summaryrefslogtreecommitdiffstats
path: root/www/devmaster/lesson2.html
diff options
context:
space:
mode:
Diffstat (limited to 'www/devmaster/lesson2.html')
-rw-r--r--www/devmaster/lesson2.html158
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">&nbsp; </font><font color="#66FF99">&nbsp;</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(
+ &quot;wavdata/Footsteps.wav&quot;,
+ 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 &quot;Footsteps.wav&quot;.
+ 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