diff options
Diffstat (limited to 'www/devmaster/lesson2.html')
-rw-r--r-- | www/devmaster/lesson2.html | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/www/devmaster/lesson2.html b/www/devmaster/lesson2.html new file mode 100644 index 0000000..a03ec7d --- /dev/null +++ b/www/devmaster/lesson2.html @@ -0,0 +1,158 @@ +<html> + +<head> + +<title>DevMaster.net - OpenAL Tutorials: Lesson 2</title> + +</head> + +<body> + +<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"><b><font color="#FFFFFF">OpenAL Tutorials</font></b></td> + <td width="53%" height="12"> + <p align="right"><font color="#66CCFF"> </font><font color="#66FF99"> </font><a href="http://devmaster.net/"><font color="#66FF99">DevMaster.net</font></a></td> + </tr> +</table> + +<p align="left" class="title"><span class="title"><font size="5">Looping and +Fade-away</font></span><font size="4"><br> +<b>Lesson 2</b></font></p> + +<p align="right" class="title"> <span class="author">Author: <a href="mailto:[email protected]"><font color="#888888">Jesse + Maurais<br> + </font></a></span><span class="author">Adapted for Java By: <a href="mailto:[email protected]"><font color="#888888">Jesse + Maurais</font></a> </span></p> +<p>Hope you found the last tutorial of some use. I know I did. This will be a +real quick and easy tutorial. It won't get too much more complicated at this +point.</p> +<pre > + <font color="#0000FF">import </font>java.nio.ByteBuffer; + <font color="#0000FF">import </font>net.java.games.joal.AL; + <font color="#0000FF">import</font> net.java.games.joal.ALC; + <font color="#0000FF">import</font> net.java.games.joal.ALFactory; + <font color="#0000FF">import</font> net.java.games.joal.util.ALut; + + + <font color="#0000FF">public</font> <font color="#0000FF">class</font> LoopingAndFadeaway { + <font color="#0000FF">static</font> <font color="#0000FF">int</font>[] buffer = <font color="#0000FF">new</font> <font color="#0000FF">int</font>[1]; + <font color="#0000FF">static</font> <font color="#0000FF">int</font>[] source = <font color="#0000FF">new</font> <font color="#0000FF">int</font>[1]; + <font color="#0000FF">static</font> <font color="#0000FF">float</font>[] sourcePos = { 0.0f, 0.0f, 0.0f }; + <font color="#0000FF">static</font> <font color="#0000FF">float</font>[] sourceVel = { 0.0f, 0.0f, 0.1f }; + <font color="#0000FF">static</font> <font color="#0000FF">float</font>[] listenerPos = { 0.0f, 0.0f, 0.0f }; + <font color="#0000FF">static</font> <font color="#0000FF">float</font>[] listenerVel = { 0.0f, 0.0f, 0.0f }; + <font color="#0000FF">static</font> <font color="#0000FF">float</font>[] listenerOri = { 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f }; + <font color="#0000FF">static</font> AL al; + <font color="#0000FF">static</font> ALC alc;</p></pre> +<p>There is only one change in the code since the last tutorial in this fist +section. It is that we altered the sources velocity. It's 'z' field is now 0.1.</p> +<pre class=code> + <font color="#0000FF">static</font> <font color="#0000FF">int</font> loadALData() { + <font color="#0000FF">if</font> (al.alGetError() != AL.AL_NO_ERROR) { + <font color="#0000FF">return</font> AL.AL_FALSE; + } + <font color="#0000FF">int</font>[] format = <font color="#0000FF">new</font> <font color="#0000FF">int</font>[1]; + <font color="#0000FF">int</font>[] size = <font color="#0000FF">new</font> <font color="#0000FF">int</font>[1]; + ByteBuffer[] data = <font color="#0000FF">new</font> ByteBuffer[1]; + <font color="#0000FF">int</font>[] freq = <font color="#0000FF">new</font> <font color="#0000FF">int</font>[1]; + <font color="#0000FF">int</font>[] loop = <font color="#0000FF">new</font> <font color="#0000FF">int</font>[1]; + + + <font color="#006600"> // Load wav data into a buffer.</font> + + al.alGenBuffers(1, buffer); + <font color="#0000FF">if </font>(al.alGetError() != AL.AL_NO_ERROR) + <font color="#0000FF">return</font> AL.AL_FALSE; + ALut.alutLoadWAVFile( + "wavdata/Footsteps.wav", + format, + data, + size, + freq, + loop); + al.alBufferData(buffer[0], format[0], data[0], size[0], freq[0]); + ALut.alutUnloadWAV(format[0], data[0], size[0], freq[0]); + + al.alGenSources(1, source); + al.alSourcei(source[0], AL.AL_BUFFER, buffer[0]); + al.alSourcef(source[0], AL.AL_PITCH, 1.0f); + al.alSourcef(source[0], AL.AL_GAIN, 1.0f); + al.alSourcefv(source[0], AL.AL_POSITION, sourcePos); + al.alSourcefv(source[0], AL.AL_POSITION, sourceVel); + al.alSourcei(source[0], AL.AL_LOOPING, AL.AL_TRUE); + <font color="#0000FF"> if </font>(al.alGetError() != AL.AL_NO_ERROR) { + <font color="#0000FF">return</font> AL.AL_FALSE; + } + <font color="#0000FF">return</font> AL.AL_TRUE; + }</pre> +<p>Two changes in this section. First we are loading the file "Footsteps.wav". + We are also explicitly setting the sources 'AL_LOOPING' value to 'AL_TRUE'. + What this means is that when the source is prompted to play it will continue + to play until stopped. It will play over again after the sound clip has ended.</p> +<pre class=code> + <font color="#0000FF">static <span class=codeKeyword>void</span> </font>setListenerValues() { + al.alListenerfv(AL.AL_POSITION, listenerPos); + al.alListenerfv(AL.AL_VELOCITY, listenerVel); + al.alListenerfv(AL.AL_ORIENTATION, listenerOri); + } + + <font color="#0000FF">static <span class=codeKeyword>void</span> </font>killALData() { + al.alDeleteBuffers(1, buffer); + al.alDeleteSources(1, source); + Alut.alutExit(); + } +</pre> +<p>Nothing has changed here.</p> +<pre class=code> + <font color="#0000FF">public static void main</font>(String[] args) { + ALut.alutInit(); + al = ALFactory.getAL(); + + <font color="#0000FF">if</font>(loadALData() == AL.AL_FALSE) { + System.exit(1); + }; + setListenerValues(); + al.alSourcePlay(source[0]); + <font color="#0000FF">long</font> startTime = System.currentTimeMillis(); + <font color="#0000FF">long</font> elapsed = 0; + <font color="#0000FF">long</font> ticker = 0; + <font color="#0000FF">long</font> lastTime = 0; + <font color="#0000FF">while</font> (elapsed < 5000) { + elapsed = System.currentTimeMillis() - startTime; + <font color="#0000FF">if</font> (ticker > 100) { + ticker = 0; + sourcePos[0] += sourceVel[0]; + sourcePos[1] += sourceVel[1]; + sourcePos[2] += sourceVel[2]; + al.alSourcefv( + source[0], + AL.AL_POSITION, + sourcePos); + } + ticker += System.currentTimeMillis() - lastTime; + lastTime = System.currentTimeMillis(); + } + ALut.alutExit(); + } +}</pre> +<p>The only thing that has changed in this code is the loop. Instead of playing +and stopping the audio sample it will slowly get quieter as the sources position +grows more distant. We do this by slowly incrementing the position by it's +velocity over time. The time is sampled by checking the system clock which gives +us a tick count. It shouldn't be necessary to change this, but if the audio clip +fades too fast you might want to change 100 to some higher number. </p> +<p><a href="http://devmaster.net/tutorials/OpenAL/lesson2.zip">Download the Java + Source and Ant Build file.</a></p> +<p align="right"><b> </b></p> +<table border="0" cellspacing="1" style="border-collapse: collapse" width="100%" id="AutoNumber2" bgcolor="#666699"> + <tr> + <td width="47%"> <p dir="ltr"><font color="#FFFFFF" size="1">� 2003 DevMaster.net. + All rights reserved.</font></td> + <td width="53%"> <p align="right" dir="ltr"><font color="#FFFFFF"><a href="mailto:[email protected]"> + <font size="1">Contact us</font></a><font size="1"> if you want to write + for us or for any comments, suggestions, or feedback.</font></font></td> + </tr> +</table> +</body> +</html>
\ No newline at end of file |