diff options
author | athomas <[email protected]> | 2003-07-08 20:13:32 +0000 |
---|---|---|
committer | athomas <[email protected]> | 2003-07-08 20:13:32 +0000 |
commit | 04d65685d51af2568c53571c41776bd9026b6f43 (patch) | |
tree | 1d6eb1439d35d6a38010614966702f5d85131afd /www/devmaster/lesson7.html | |
parent | 4bf057572535db6a4b29b0fa4702ecab82a34885 (diff) |
Added lesson 7
git-svn-id: file:///home/mbien/NetBeansProjects/JOGAMP/joal-sync/svn-server-sync-demos/joal-demos/trunk@32 235fdd13-0e8c-4fed-b5ee-0a390d04b286
Diffstat (limited to 'www/devmaster/lesson7.html')
-rw-r--r-- | www/devmaster/lesson7.html | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/www/devmaster/lesson7.html b/www/devmaster/lesson7.html new file mode 100644 index 0000000..ddb54a3 --- /dev/null +++ b/www/devmaster/lesson7.html @@ -0,0 +1,178 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<link rel="stylesheet" type="text/css" href="general.css"> +</head> +<body> + +<div align="center"> + +<IMG SRC="http://games.dev.java.net/images/navbar.gif" WIDTH=454 HEIGHT=43 BORDER=0 ALT="" USEMAP="#navbar_Map"></div> + <MAP NAME="navbar_Map"> + <AREA SHAPE="rect" ALT="Wiki" COORDS="340,0,386,43" HREF="http://wiki.java.net/bin/view/Games"> + <AREA SHAPE="rect" ALT="Weblogs" COORDS="286,0,339,43" HREF="http://weblogs.java.net/weblogs/project/games"> + <AREA SHAPE="rect" ALT="Forums" COORDS="216,0,285,43" HREF="http://games.dev.java.net/forums"> + <AREA SHAPE="rect" ALT="JavaGames Home" COORDS="91,0,215,43" HREF="http://community.java.net/games"> + <AREA SHAPE="rect" ALT="www.java.net" COORDS="1,1,91,44" HREF="http://www.java.net" TARGET="_self"> + </MAP><br> +<br> +OpenAL Tutorials from DevMaster.net. Reprinted with Permission.<br> +<br> +<table border="0" cellspacing="0" style="border-collapse: collapse" width="100%" cellpadding="0" id="AutoNumber1" height="12" bgcolor="#666699"> + <tr> + <td width="47%" height="12" valign="middle"><p><b><font color="#FFFFFF">OpenAL + Tutorials</font></b></p></td> + <td width="53%" height="12" align="right" valign="middle"><p align="right"><a href="http://devmaster.net/"><font color="#66FF99">DevMaster.net</font></a></p></td> + </tr> +</table> +<p class="ArticleTitle"><font size="5">The Doppler Effect<br> + </font><font color="#000000" size="4"><strong>Lesson 7</strong></font></p> +<p align="right" class="ArticleAuthor">Author: <a href="mailto:[email protected]">Jesse + Maurais</a><br> + Adapted For Java By: <a href="mailto:[email protected]">Athomas Goldberg</a></p> +<h1>A Look at Real-World Physics</h1> +<p>I know this will be boring review for anyone with a course in high school +physics, but lets humour ourselves. The Doppler effect can be a very tricky +concept for some people, but it is a logical process, and kind of interesting +when you get right down to it. To begin understanding the Doppler effect we +first must start to understand what a "sound" really is. Basically a sound is +your minds interpretation of a compression wave that is traveling through the +air. Whenever the air becomes disturbed it starts a wave which compresses the +air particles around it. This wave travels outward from it's point of origin. +Consider the following diagram.</p> +<p><img src="sound_waves.jpg" width="150" height="132" hspace="5" vspace="0" border="0" align="left">In this diagram +(on the left) the big red "S" stands for the sources position, and the big +red "L" stands for (you guessed it), the Listener's position. Both source and +Listener are not moving. The source is emitting compression waves outward, which +are represented in this diagram by the blue circles. The Listener is +experiencing the sound exactly as it is being made in this diagram. The Doppler +effect is not actually present in this example since there is no motion; the +Doppler effect only describes the warping of sound due to motion.</p> +<p>What you should try to do is picture this diagram animated. When the source +emits a wave (the circles) it will look as though it is growing away from it's +point of origin, which is the sources position. A good example of a similar +effect is the ripples in a pond. When you throw a pebble into a calm body of +water it will emit waves which constantly move away from the point of impact. +Believe it or not this occurs from the exact same physical properties. But what +does this have to do with the Doppler effect? Check out the next diagram (on the +right).</p> + +<p> +<img src="doppler_effect.jpg" width="150" height="132" hspace="5" border="0" align="right">Wow, what's going on here? The source is now in motion, indicated by the +little red arrow. In fact the source is now moving towards the Listener with an +implied velocity. Notice particularly that the waves (circles) are being +displaced inside each other. The displacement follows the approximate path of +the source which emits them. This is the key to the Doppler effect. Essentially +what has happened is that the source has emitted a wave at different points in +it's path of travel. The waves it emits do not move with it, but continue on +their own path of travel from the point they were emitted.</p> +<p>So how does this effect the perceived sound by the Listener? Well, notice too +in the last diagram that the waves (circles) that are between the source and the +Listener are kind of compressed together. This will cause the sound waves to run +together, which in turn causes the perceived sound seem like it's faster. What +we are talking about here is frequency. The distances between the waves effects +the frequency of the sound. When the source that emits the sound is in motion, +it causes a change in frequency. You may notice too that distance between the +waves varies at different points in space. For example, on the opposite side of +the moving source (anywhere along the previous path of travel) the distances are +actually wider, so the frequency will be lower (the distance and frequency have +an inverse relationship). What this implies is that the frequency perceived by +the Listener is relative to where the Listener is standing. </p> +<p>The motion of the Listener can also affect the frequency. This one is a +little harder to picture though. If the source is still, and the Listener is +moving toward the source, then the perceived frequency by the Listener will be +warped in the same exact manner that we described for the moving source. </p> +<p>If you still have trouble picturing this, consider the following two +diagrams:</p> +<p align="center"><img border="0" src="sin_wave.jpg" width="255" height="135"> +<img border="0" src="compress_sin_wave.jpg" width="255" height="135"></p> +<p>These two diagrams will represent the sound in the form of a sine wave. Look +at the first one. Think of the peaks as the instance of the wave. The very top +point of the wave will be the same as the instance of the blue circle in the +previous set of diagrams. The valleys will be like the spaces in between the +blue circles. The second diagram represents a compressed wave. When you compare +the two you will notice an obvious difference. The second diagram simply has +more wave occurrences in the same amount of space. Other ways of saying this are +that they occur more often, with a greater regularity, or with a greater +frequency. </p> +<p>For anyone who is interested in some added information: The velocity of the +waves is the speed of sound. If the velocity of the source is greater than that +of the wave, then the source is breaking the sound barrier.</p> +<h1>The Physics of OpenAL</h1> + +<p>Ok, either you have understood my ramblings on the Doppler effect from above, +or you have skipped it because you already have full knowledge of the Doppler +effect and just want to know how it effects the OpenAL rendering pipeline. I +think the best start to his section will be to quote the OpenAL spec directly:</p> +<blockquote> + <p><i>"The Doppler Effect depends on the velocities of Source and Listener + relative to the medium, and the propagation speed of sound in that medium." - + chapter 3, subsection 7"</i></p> +</blockquote> +<p>We can take this to mean that there are 3 factors which are going to affect +the final frequency of the sound heard by the Listener. These factors are the +velocity of the source, the velocity of the Listener, and a predefined speed of +sound. </p> +<p>When we refer to a "medium", what we mean is the kind of material that both +the source and Listener are "in". For example, sounds that are heard from +underwater are much different than sounds that are heard in the open air. Air +and water are examples of different mediums. The reason that sound is so +different between these mediums has to do with the particle density. As we said +before, sound is nothing but the motion of particles in the air. In a medium +with a much greater particle density the sound will be much different because +the particles are in closer contact. When they are in closer contact it allows +for the wave to travel much better. As an example of the opposite, think of +outer space. In outer space there is an extremely low particle density. In fact +there is only a few very light particles (mostly hydrogen) scattered about. This +is why no sound can be heard from space. </p> + +<p>Ok, lets get back on topic. OpenAL calculates the Doppler effect internally +for us, so we need only define a few parameters that will effect the +calculation. We would do this in case we don't want a realistic rendering. +Rather if want to exaggerate or deemphasize the effect. The calculation goes +like this.</p> +<p><span class="codeNormal"> shift = DOPPLER_FACTOR * freq * (DOPPLER_VELOCITY +- l.velocity) / (DOPPLER_VELOCITY + s.velocity)</span></p> +<p>Constants are written in all caps to differentiate. The "l" and "s" variables +are the Listener and source respectively. "freq" is the initial unaltered +frequency of the emitting wave, and "shift" is the altered frequency of the +wave. The term "shift" is the proper way to address the altered frequency and +will be used from now on. This final shifted frequency will be sampled by OpenAL +for all audio streaming that is affected. </p> + +<p>We already know that we can define the velocity of both source and Listener +by using the 'AL_VELOCITY' field to 'alListenerfv' and 'alSourcefv'. The 'freq' +parameter comes straight from the buffer properties when it was loaded from +file. To set the constant values the following functions are provided for us.</p> +<pre class=code><font color="#0000FF">public void </font>alDopplerFactor(<font color="#0000FF">float</font> factor); +<font color="#0000FF">public void </font>alDopplerVelocity(<font color="#0000FF">float</font> velocity); +</pre> +<p>For 'alDopplerFactor' any non-negative value will suffice. Passing a negative +value will raise an error of 'AL_INVALID_VALUE', and the whole command will be +ignored. Passing zero is a perfectly valid argument. Doing this will disable the +Doppler effect and may in fact help overall performance (but won't be as +realistic). The effect of the Doppler factor will directly change the magnitude +of the equation. A value of 1.0 will not change the effect at all. Passing +anything between 0.0 and 1.0 will minimize the Doppler effect, and anything +greater than 1.0 will maximize the effect. </p> +<p>For 'alDopplerVelocity' any non-negative non-zero value will suffice. Passing +either a negative or a zero will raise an error of 'AL_INVALID_VALUE', and the +whole command will be ignored. The Doppler velocity is essentially the speed of +sound. Setting this will be like setting how fast sound can move through the +medium. OpenAL has no sense of medium, but setting the velocity will give the +effect of a medium. OpenAL also has no sense of units (kilometer, miles, +parsecs), so keep that in mind when you set this value so it is consistent with +all other notions of units that you have defined.</p></p> +<table border="0" cellspacing="1" style="border-collapse: collapse" width="100%" id="AutoNumber2" bgcolor="#666699"> + <tr> + <td width="40%"> <p dir="ltr"><font color="#FFFFFF" size="2">� 2003 DevMaster.net. + All rights reserved.</font></td> + <td width="60%"> <p align="right" dir="ltr"><font size="2"><a href="mailto:[email protected]"> + <font color="#FFFFFF">Contact us</font></a><font color="#FFFFFF"> if you + want to write for us or for any comments, suggestions, or feedback.</font></font></td> + </tr> +</table> +</body> +</html> |