Sign in to follow this  
Kirl

Calculating sound volume (distance & speed)

Recommended Posts

I want to calculate (aproximate) the sound volume of a bouncing ball, depending on the distance from the viewer and the speed at wich it hits the surface. I have a ball.z variable (distance from view) and a ySpeed variable, but I'm new to the 3rd dimension and I'm not sure of the exact formula for taking them both into acount. The Z depth ranges from -150 (front) to 200 (back), so in all it's 350 deep. The ySpeed variable can range from -3 (min) to around -100. The volume parameter has a range from 0 (silence) to 100 (full volume). I hope anybody can help me out with this...

Share this post


Link to post
Share on other sites
Well, my first guess would be to make the volume relative to the speed and relative to the inverse square of the distance from the player(though I doubt anyone would notice if you just used the inverse of the distance not squared). So that would be something like V= A*yspeed/(z+151) where A is some constant that could be found by plugging in your max and min values and solving so V has the desired max and min. Note I used +151 to prevent a division by zero that might occur if you used 150. Honestly though, the only way to know what sounds good would be to try several different formulas.

Share this post


Link to post
Share on other sites
I don't know the exact equations, but usually, volume is function of the inverse distance, and the speed of impact. Maybe some kind of polynomial, exponential equation.

Share this post


Link to post
Share on other sites
Volume = (((Current Distance)/(Max Distance))*((Max Volume)-(Min Volume)))+ (Min Volume)

Distance is the viewers distance from the starting point of the sound

or if you take the speed of the ball

CD = Current Distance
MD = Max Distance
MV = Max Volume
MnV = Min Volume
MS = Max Speed
MnS = Min Speed

(CD/MD)*((MV-MnV)*Abs(ySpeed/(MS-MnS)) = Volume

that looks right to me

so
(CD/MD)*((100)*Abs(ySpeed/(-100/-3))
= Volume

Share this post


Link to post
Share on other sites
I'm not feeling this inverse-linear dissipation of loudness.

Just like all radially-uniform phenomena in three dimensions, the energy of a sonic event evolves as the inverse-square of distance. This is direct from energy conservation. Now loudness is a logarithmic function of kinetic energy (of the air particles). So I get:

V(r) = V1 - 2ln((√2p)r) for r > 1/√2p

where V1 is the loudness at distance 1 from the source.
It seems a little counter-intuitive. Any guesses?

Admiral

Share this post


Link to post
Share on other sites
The power drops off proportionally to the inverse squared distance, but what we hear is related to the amplitude of the wave. The power of a wave is proportional to the amplitude squared, so the amplitude is actually inversely proportional to distance (linear, not quadratic). Acoustics is confusing...

I think if you're going to be generating the sound wave, you can stop somewhere around here knowing that the amplitude is inversely proportional to distance. There's probably more complicated things that can be added to the model too...

If you actually want to measure how loud the sound will be perceived as opposed to just generating the sound, you need to run the sound wave through a psychological model.

Share this post


Link to post
Share on other sites
Modeling sound accurately is pretty hard. Doppler effect and speed of sound, environmental effects and various sort of filtering as the sound trasverse different mediums, and gets absorbed or bounces off surfaces.

But yeah, if you restrict yourself to seomething very simple such as...

float s1 = 0.03f;
float s2 = 1.0f;
float s3 = 0.05f;

float d1 = 0.03f;
float d2 = 0.9f;
float d3 = 0.01f;

volume_speed = s1 + s2 * (speed) + s3 * (speed * speed)
volume_dist = d1 + d2 * (dist) + d3 * (dist * dist)

volume = volume_speed / volume_dist;

Note that the polynomial coefficients s... and d... are almost completely random. It's just as an example on how to use a polynomial.

Share this post


Link to post
Share on other sites
Quote:
Original post by Vorpy
The power drops off proportionally to the inverse squared distance, but what we hear is related to the amplitude of the wave. The power of a wave is proportional to the amplitude squared, so the amplitude is actually inversely proportional to distance (linear, not quadratic).

Thanks for clearing that up.

Admiral

Share this post


Link to post
Share on other sites
Woooo, thanks! Never thought sound could be so confusing (in 2d I simply used speed)...

Much of these examples go much further then what I need, I have used Alrecenks example with a few tweaks. Plus a cheap hack to keep the sound within it's limmits, but I think it works nicely (you can hear the result in this test environment).

Thanks for all the suggestions and options.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this