2002-12-19 22:18:10 +00:00
/ *
2002-12-21 12:37:20 +00:00
* Copyright ( c ) 2002 Lightweight Java Game Library Project
2002-12-19 22:18:10 +00:00
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions are
* met :
*
* * Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
*
* * Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in the
* documentation and / or other materials provided with the distribution .
*
* * Neither the name of ' Light Weight Java Game Library ' nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission .
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED
* TO , THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL ,
* EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT LIMITED TO ,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE , DATA , OR
* PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT ( INCLUDING
* NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
* /
package org.lwjgl.test.openal ;
import org.lwjgl.openal.AL ;
import org.lwjgl.openal.eax.* ;
import org.lwjgl.input.Keyboard ;
2003-07-18 19:02:49 +00:00
import org.lwjgl.opengl.GLWindow ;
2002-12-19 22:18:10 +00:00
import java.nio.IntBuffer ;
2003-07-02 22:35:26 +00:00
import java.nio.FloatBuffer ;
2002-12-19 22:18:10 +00:00
/ * *
* $Id$
*
* This test simulates a listener positioned in the center , and
* a source moving around the listener using the keyboard
*
* @author Brian Matzon < brian @matzon.dk >
* @version $Revision$
* /
public class MovingSoundTest extends BasicTest {
public static float MOVEMENT = 50 . 00f ;
2003-07-18 19:02:49 +00:00
private GLWindow gl = new GLWindow ( " Moving Sound Test " , 100 , 100 , 320 , 240 , 32 , 0 , 0 , 0 ) ;
2002-12-19 22:18:10 +00:00
/ * *
* Creates an instance of MovingSoundTest
* /
public MovingSoundTest ( ) {
super ( ) ;
}
/ * *
* Runs the actual test , using supplied arguments
* /
protected void execute ( String [ ] args ) {
if ( args . length < 1 ) {
2003-06-17 21:22:16 +00:00
System . out . println ( " no argument supplied, assuming Footsteps.wav " ) ;
args = new String [ ] { " Footsteps.wav " } ;
2002-12-19 22:18:10 +00:00
}
2003-03-28 22:12:45 +00:00
try {
gl . create ( ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
2002-12-19 22:18:10 +00:00
int lastError ;
2003-07-02 22:35:26 +00:00
FloatBuffer sourcePosition = createFloatBuffer ( 3 ) ;
FloatBuffer listenerPosition = createFloatBuffer ( 3 ) ;
2002-12-19 22:18:10 +00:00
boolean eaxApplied = false ;
2003-07-02 22:35:26 +00:00
EAXListenerProperties eaxListenerProp = null ;
2002-12-19 22:18:10 +00:00
//initialize keyboard
try {
Keyboard . create ( ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
exit ( - 1 ) ;
}
//create 1 buffer and 1 source
IntBuffer buffers = createIntBuffer ( 1 ) ;
IntBuffer sources = createIntBuffer ( 1 ) ;
// al generate buffers and sources
2003-07-02 22:35:26 +00:00
AL . alGenBuffers ( 1 , buffers ) ;
if ( ( lastError = AL . alGetError ( ) ) ! = AL . AL_NO_ERROR ) {
2002-12-19 22:18:10 +00:00
exit ( lastError ) ;
}
2003-07-02 22:35:26 +00:00
AL . alGenSources ( 1 , sources ) ;
if ( ( lastError = AL . alGetError ( ) ) ! = AL . AL_NO_ERROR ) {
2002-12-19 22:18:10 +00:00
exit ( lastError ) ;
}
//load wave data
WaveData wavefile = WaveData . create ( args [ 0 ] ) ;
//copy to buffers
2003-07-02 22:35:26 +00:00
AL . alBufferData (
2002-12-19 22:18:10 +00:00
buffers . get ( 0 ) ,
wavefile . format ,
2003-07-02 22:35:26 +00:00
wavefile . data ,
2002-12-19 22:18:10 +00:00
wavefile . data . capacity ( ) ,
wavefile . samplerate ) ;
2003-07-02 22:35:26 +00:00
if ( ( lastError = AL . alGetError ( ) ) ! = AL . AL_NO_ERROR ) {
2002-12-19 22:18:10 +00:00
exit ( lastError ) ;
}
//unload file again
wavefile . dispose ( ) ;
//set up source input
2003-07-02 22:35:26 +00:00
AL . alSourcei ( sources . get ( 0 ) , AL . AL_BUFFER , buffers . get ( 0 ) ) ;
if ( ( lastError = AL . alGetError ( ) ) ! = AL . AL_NO_ERROR ) {
2002-12-19 22:18:10 +00:00
exit ( lastError ) ;
}
2003-07-02 22:35:26 +00:00
AL . alSourcef ( sources . get ( 0 ) , AL . AL_REFERENCE_DISTANCE , 1024 . 0f ) ;
AL . alSourcef ( sources . get ( 0 ) , AL . AL_ROLLOFF_FACTOR , 0 . 5f ) ;
2002-12-19 22:18:10 +00:00
//lets loop the sound
2003-07-02 22:35:26 +00:00
AL . alSourcei ( sources . get ( 0 ) , AL . AL_LOOPING , AL . AL_TRUE ) ;
if ( ( lastError = AL . alGetError ( ) ) ! = AL . AL_NO_ERROR ) {
2002-12-19 22:18:10 +00:00
exit ( lastError ) ;
}
//play source 0
2003-07-02 22:35:26 +00:00
AL . alSourcePlay ( sources . get ( 0 ) ) ;
if ( ( lastError = AL . alGetError ( ) ) ! = AL . AL_NO_ERROR ) {
2002-12-19 22:18:10 +00:00
exit ( lastError ) ;
}
//setup EAX if possible
2003-07-02 22:35:26 +00:00
if ( AL . alIsExtensionPresent ( " EAX " ) ) {
2002-12-19 22:18:10 +00:00
try {
2003-07-02 22:35:26 +00:00
EAX . create ( ) ;
eaxListenerProp = new EAXListenerProperties ( ) ;
2002-12-19 22:18:10 +00:00
} catch ( Exception e ) {
}
}
System . out . println ( " Move source with arrow keys \ nMove listener with right shift and arrowkeys \ nEnable EAX effect by pressing e (if available) \ nExit with ESC " ) ;
while ( ! Keyboard . isKeyDown ( Keyboard . KEY_ESCAPE ) ) {
2003-03-28 22:12:45 +00:00
gl . tick ( ) ;
2002-12-19 22:18:10 +00:00
Keyboard . poll ( ) ;
if ( Keyboard . isKeyDown ( Keyboard . KEY_LEFT ) ) {
if ( Keyboard . isKeyDown ( Keyboard . KEY_RSHIFT ) ) {
2003-07-02 22:35:26 +00:00
listenerPosition . put ( 0 , listenerPosition . get ( 0 ) - MOVEMENT ) ;
AL . alListenerfv ( AL . AL_POSITION , listenerPosition ) ;
System . out . println ( " listenerx: " + listenerPosition . get ( 0 ) ) ;
2002-12-19 22:18:10 +00:00
} else {
2003-07-02 22:35:26 +00:00
sourcePosition . put ( 0 , sourcePosition . get ( 0 ) - MOVEMENT ) ;
AL . alSourcefv ( sources . get ( 0 ) , AL . AL_POSITION , sourcePosition ) ;
System . out . println ( " sourcex: " + sourcePosition . get ( 0 ) ) ;
2002-12-19 22:18:10 +00:00
}
}
if ( Keyboard . isKeyDown ( Keyboard . KEY_RIGHT ) ) {
if ( Keyboard . isKeyDown ( Keyboard . KEY_RSHIFT ) ) {
2003-07-02 22:35:26 +00:00
listenerPosition . put ( 0 , listenerPosition . get ( 0 ) + MOVEMENT ) ;
AL . alListenerfv ( AL . AL_POSITION , listenerPosition ) ;
System . out . println ( " listenerx: " + listenerPosition . get ( 0 ) ) ;
2002-12-19 22:18:10 +00:00
} else {
2003-07-02 22:35:26 +00:00
sourcePosition . put ( 0 , sourcePosition . get ( 0 ) + MOVEMENT ) ;
AL . alSourcefv ( sources . get ( 0 ) , AL . AL_POSITION , sourcePosition ) ;
System . out . println ( " sourcex: " + sourcePosition . get ( 0 ) ) ;
2002-12-19 22:18:10 +00:00
}
}
if ( Keyboard . isKeyDown ( Keyboard . KEY_E ) ) {
if ( eaxApplied ) {
2003-07-02 22:35:26 +00:00
eaxListenerProp . setEnvironment ( EAX . EAX_ENVIRONMENT_GENERIC ) ;
2003-07-16 21:17:13 +00:00
eaxListenerProp . eaxSet ( EAXListenerProperties . EAXLISTENER_ENVIRONMENT , 0 ) ;
2002-12-19 22:18:10 +00:00
} else {
2003-07-02 22:35:26 +00:00
eaxListenerProp . setEnvironment ( EAX . EAX_ENVIRONMENT_HANGAR ) ;
2003-07-16 21:17:13 +00:00
eaxListenerProp . eaxSet ( EAXListenerProperties . EAXLISTENER_ENVIRONMENT , 0 ) ;
2002-12-19 22:18:10 +00:00
}
eaxApplied = ! eaxApplied ;
}
2003-03-28 22:12:45 +00:00
if ( gl . isCloseRequested ( ) ) {
break ;
}
2002-12-19 22:18:10 +00:00
try {
Thread . sleep ( 100 ) ;
} catch ( InterruptedException inte ) {
}
}
//stop source 0
2003-07-02 22:35:26 +00:00
AL . alSourceStop ( sources . get ( 0 ) ) ;
if ( ( lastError = AL . alGetError ( ) ) ! = AL . AL_NO_ERROR ) {
2002-12-19 22:18:10 +00:00
exit ( lastError ) ;
}
//delete buffers and sources
2003-07-02 22:35:26 +00:00
AL . alDeleteSources ( 1 , sources ) ;
if ( ( lastError = AL . alGetError ( ) ) ! = AL . AL_NO_ERROR ) {
2002-12-19 22:18:10 +00:00
exit ( lastError ) ;
}
2003-07-02 22:35:26 +00:00
AL . alDeleteBuffers ( 1 , buffers ) ;
if ( ( lastError = AL . alGetError ( ) ) ! = AL . AL_NO_ERROR ) {
2002-12-19 22:18:10 +00:00
exit ( lastError ) ;
}
//shutdown
alExit ( ) ;
}
/ * *
* main entry point
*
* @param args String array containing arguments
* /
public static void main ( String [ ] args ) {
MovingSoundTest movingSoundTest = new MovingSoundTest ( ) ;
movingSoundTest . execute ( args ) ;
}
2003-03-19 12:41:28 +00:00
}