diff options
author | Sven Gothel <[email protected]> | 2010-12-13 07:30:20 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2010-12-13 07:30:20 +0100 |
commit | b0c39f3f4259cf6eca8e1f7af0f0924cf7472abe (patch) | |
tree | 613781a5703e2052c21b1c35242c3d948bebcf72 /src/test/com/jogamp | |
parent | a68be2859454b75539cc5e44eb23129745932db3 (diff) |
Bring back JOAL (code fixes and project structure)
- Use GlueGen DynamicLibraryBundle
- Fix alGetString
- Proper test/junit structure
- NB project fix
- add artifacts.properties and jar's manifest
- proper ZIP file structure
TODO:
- check on windows and osx
- actually hear a sound
- add jnlp file template
- joal-demos
Diffstat (limited to 'src/test/com/jogamp')
-rw-r--r-- | src/test/com/jogamp/openal/test/junit/ALTest.java | 391 | ||||
-rw-r--r-- | src/test/com/jogamp/openal/test/manual/OpenALTest.java | 122 | ||||
-rw-r--r-- | src/test/com/jogamp/openal/test/manual/Sound3DTest.java | 98 | ||||
-rw-r--r-- | src/test/com/jogamp/openal/test/resources/ResourceLocation.java | 6 | ||||
-rw-r--r-- | src/test/com/jogamp/openal/test/resources/lewiscarroll.wav | bin | 0 -> 1025476 bytes |
5 files changed, 617 insertions, 0 deletions
diff --git a/src/test/com/jogamp/openal/test/junit/ALTest.java b/src/test/com/jogamp/openal/test/junit/ALTest.java new file mode 100644 index 0000000..6a465f2 --- /dev/null +++ b/src/test/com/jogamp/openal/test/junit/ALTest.java @@ -0,0 +1,391 @@ +/* + * Created on Jun 3, 2003 + * + * Copyright 2003 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ +package com.jogamp.openal.test.junit; + +import com.jogamp.openal.AL; +import com.jogamp.openal.ALC; +import com.jogamp.openal.ALCcontext; +import com.jogamp.openal.ALCdevice; +import com.jogamp.openal.ALFactory; +import java.io.IOException; +import java.io.InputStream; + +import javax.sound.sampled.UnsupportedAudioFileException; + +import com.jogamp.openal.test.resources.ResourceLocation; +import com.jogamp.openal.util.*; +import java.io.FileNotFoundException; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * @author Athomas Goldberg + * @author Michael Bien + */ +public class ALTest { + + private static AL al; + private static ALC alc; + private static ALCcontext context; + private static ALCdevice device; + private final static String TEST_FILE = "lewiscarroll.wav"; + + @BeforeClass + public static void setUp() { + al = ALFactory.getAL(); + alc = ALFactory.getALC(); + device = alc.alcOpenDevice(null); + context = alc.alcCreateContext(device, null); + alc.alcMakeContextCurrent(context); + } + + @AfterClass + public static void tearDown() { + alc.alcMakeContextCurrent(null); + alc.alcDestroyContext(context); + alc.alcCloseDevice(device); + } + + + /* + * Test for void alGenBuffers(int, IntBuffer) + *//* + @Test public void testAlGenBuffersintIntBuffer() { + System.out.println("begin testAlGenBuffersintintBuffer"); + // try basic case + try { + IntBuffer buffers = BufferUtils.newIntBuffer(7); + al.alGenBuffers(7,buffers); + for(int i = 0; i < 7; i++) { + assertFalse(buffers.get(i) == 0); + assertTrue(al.alIsBuffer(buffers.get(i))); + } + } catch (Exception e) { + fail(e.getMessage()); + } + + Exception ex = null; + // buffers == null + try { + IntBuffer buffers = null; + al.alGenBuffers(7,buffers); + + + } catch(IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + + ex = null; + // buffer too small + try { + IntBuffer buffers = BufferUtils.newIntBuffer(5); + al.alGenBuffers(7,buffers); + } catch(IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + + ex = null; + // buffer not direct + try { + IntBuffer buffers = IntBuffer.allocate(7); + al.alGenBuffers(7,buffers); + } catch(IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + System.out.println("end testAlGenBuffersintintBuffer"); + } + */ + + /* + * Test for void alGenBuffers(int, int[]) + */ + @Test + public void testAlGenBuffersintintArray() { + + System.out.println("begin testAlGenBuffersintintArray"); + // try basic case + int[] buffers = new int[7]; + al.alGenBuffers(7, buffers, 0); + for (int i = 0; i < 7; i++) { + assertFalse(buffers[i] == 0); + assertTrue(al.alIsBuffer(buffers[i])); + } + + Exception ex = null; + // try exceptions + try { + buffers = null; + al.alGenBuffers(7, buffers, 0); + } catch (IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + + ex = null; + try { + buffers = new int[5]; + al.alGenBuffers(7, buffers, 0); + } catch (IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + + System.out.println("end testAlGenBuffersintintArray"); + + } + + /* + * Test for void alDeleteBuffers(int, IntBuffer) + */ +// @Test + public void testAlDeleteBuffersintIntBuffer() { + System.out.println("begin testAlDeleteBuffersintintArray"); + // try basic case + int[] buffers = new int[7]; + al.alGenBuffers(7, buffers, 0); + for (int i = 0; i < 7; i++) { + assertFalse(buffers[i] == 0); + assertTrue(al.alIsBuffer(buffers[i])); + } + al.alDeleteBuffers(7, buffers, 0); + for (int i = 0; i < 7; i++) { + assertFalse(al.alIsBuffer(buffers[i])); + } + + Exception ex = null; + // try exceptions + try { + al.alDeleteBuffers(7, (int[]) null, 0); + } catch (IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + + ex = null; + try { + buffers = new int[5]; + al.alGenBuffers(5, buffers, 0); + al.alDeleteBuffers(7, buffers, 0); + } catch (IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + + try { + buffers = new int[7]; + al.alDeleteBuffers(7, buffers, 0); + assertTrue(al.alGetError() != 0); + } catch (Exception e) { + fail("deleting an unfilled buffer list should generate an ALError but not an exception"); + } + + System.out.println("end testAlDeleteBuffersintintArray"); + } + + /* + * Test for void alDeleteBuffers(int, int[]) + */ +// @Test + public void testAlDeleteBuffersintintArray() { + System.out.println("begin testAlDeleteBuffersintIntBuffer"); + // try basic case + int[] buffers = new int[7]; + al.alGenBuffers(7, buffers, 0); + for (int i = 0; i < 7; i++) { + assertFalse(buffers[i] == 0); + assertTrue(al.alIsBuffer(buffers[i])); + } + al.alDeleteBuffers(7, buffers, 0); + for (int i = 0; i < 7; i++) { + assertFalse(al.alIsBuffer(buffers[i])); + } + + Exception ex = null; + // try exceptions + try { + al.alDeleteBuffers(7, (int[]) null, 0); + } catch (IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + ex = null; + try { + buffers = new int[5]; + al.alGenBuffers(5, buffers, 0); + al.alDeleteBuffers(7, buffers, 0); + } catch (IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + + ex = null; + try { + buffers = new int[5]; + al.alDeleteBuffers(7, buffers, 0); + } catch (IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + + try { + buffers = new int[7]; + al.alDeleteBuffers(7, buffers, 0); + assertTrue(al.alGetError() != 0); + } catch (Exception e) { + fail("deleting an unfilled buffer list should generate an ALError but not an exception"); + } + + System.out.println("end testAlDeleteBuffersintintArray"); + } + + @Test + public void testAlIsBuffer() { + System.out.println("begin testALIsBuffer"); + // check a bufferlist with known bad values + int[] buffers = new int[7]; + for (int i = 0; i < 7; i++) { + buffers[i] = -1; + assertFalse(al.alIsBuffer(buffers[i])); + } + // created + al.alGenBuffers(7, buffers, 0); + for (int i = 0; i < 7; i++) { + assertTrue(al.alIsBuffer(buffers[i])); + } + // deleted + al.alDeleteBuffers(7, buffers, 0); + for (int i = 0; i < 7; i++) { + assertFalse(al.alIsBuffer(buffers[i])); + } + System.out.println("end testALisBuffer"); + } + + /* + * Test for void alBufferData(int, int, Buffer, int, int) + */ + @Test + public void testAlBufferDataintintByteBufferintint() throws IOException, UnsupportedAudioFileException { + System.out.println("begin testAlBufferDataintintByteBufferintint"); + int[] buffers = new int[1]; + al.alGenBuffers(1, buffers, 0); + WAVData wd = loadTestWAV(); + + al.alBufferData(buffers[0], wd.format, wd.data, wd.size, wd.freq); + int[] tmp = new int[1]; + al.alGetBufferi(buffers[0], AL.AL_SIZE, tmp, 0); + assertFalse(tmp[0] == 0); + + Exception ex = null; + try { + buffers = new int[1]; + al.alGenBuffers(1, buffers, 0); + + al.alBufferData(buffers[0], AL.AL_FORMAT_STEREO16, null, 0, 0); + } catch (IllegalArgumentException e) { + ex = e; + } + assertNotNull(ex); + + System.out.println("end testAlBufferDataintintByteBufferintint"); + } + + /* + * Test for void alGetBufferi(int, int, int[]) + */ + @Test + public void testAlGetBufferiintintintArray() throws UnsupportedAudioFileException, IOException { + System.out.println("begin testAlGetBufferiintintintArray"); + int[] buffers = new int[1]; + al.alGenBuffers(1, buffers, 0); + WAVData wd = loadTestWAV(); + al.alBufferData(buffers[0], wd.format, wd.data, wd.size, wd.freq); + int[] size = new int[1]; + int[] freq = new int[1]; + al.alGetBufferi(buffers[0], AL.AL_SIZE, size, 0); + al.alGetBufferi(buffers[0], AL.AL_FREQUENCY, freq, 0); +// assertEquals(wd.size, size[0]); + assertEquals(wd.freq, freq[0]); + + Exception ex = null; + try { + buffers = new int[1]; + al.alGenBuffers(1, buffers, 0); + wd = loadTestWAV(); + al.alBufferData(buffers[0], wd.format, wd.data, wd.size, wd.freq); + size = null; + al.alGetBufferi(buffers[0], AL.AL_SIZE, size, 0); + + } catch (IllegalArgumentException e) { + ex = e; + } + + assertNotNull(ex); + + System.out.println("end testAlGetBufferiintintintArray"); + } + + /* + * Test for void alGetBufferi(int, int, IntBuffer) + */ + @Test + public void testAlGetBufferiintintIntBuffer() throws UnsupportedAudioFileException, IOException { + int[] buffers = new int[1]; + al.alGenBuffers(1, buffers, 0); + WAVData wd = loadTestWAV(); + al.alBufferData(buffers[0], wd.format, wd.data, wd.size, wd.freq); + + int[] size = new int[1]; + int[] freq = new int[1]; + al.alGetBufferi(buffers[0], AL.AL_SIZE, size, 0); + al.alGetBufferi(buffers[0], AL.AL_FREQUENCY, freq, 0); +// assertEquals(wd.size, size[0]); + assertEquals(wd.freq, freq[0]); + + Exception ex = null; + try { + buffers = new int[1]; + al.alGenBuffers(1, buffers, 0); + wd = loadTestWAV(); + al.alBufferData(buffers[0], wd.format, wd.data, wd.size, wd.freq); + size = null; + al.alGetBufferi(buffers[0], AL.AL_SIZE, size, 0); + + } catch (IllegalArgumentException e) { + ex = e; + } + + assertNotNull(ex); + ex = null; + try { + buffers = new int[1]; + al.alGenBuffers(1, buffers, 0); + wd = loadTestWAV(); + al.alBufferData(buffers[0], wd.format, wd.data, wd.size, wd.freq); + size = new int[1]; + al.alGetBufferi(buffers[0], AL.AL_SIZE, size, 0); + + } catch (IllegalArgumentException e) { + ex = e; + } + +// assertNotNull(ex); + } + + private WAVData loadTestWAV() throws IOException, UnsupportedAudioFileException { + InputStream resource = ResourceLocation.class.getResourceAsStream(TEST_FILE); + if(resource == null) { + throw new FileNotFoundException(TEST_FILE+" not found"); + } + return WAVLoader.loadFromStream(resource); + } +} diff --git a/src/test/com/jogamp/openal/test/manual/OpenALTest.java b/src/test/com/jogamp/openal/test/manual/OpenALTest.java new file mode 100644 index 0000000..98843c7 --- /dev/null +++ b/src/test/com/jogamp/openal/test/manual/OpenALTest.java @@ -0,0 +1,122 @@ +package com.jogamp.openal.test.manual; + +/** + * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * -Redistribution of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * -Redistribution 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 Sun Microsystems, Inc. or the names of contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. + * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING + * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR + * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS + * LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A + * RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT + * OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR + * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS + * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that this software is not designed or intended for use in the + * design, construction, operation or maintenance of any nuclear facility. + */ +import com.jogamp.common.nio.Buffers; +import com.jogamp.openal.AL; +import com.jogamp.openal.ALC; +import com.jogamp.openal.ALCcontext; +import com.jogamp.openal.ALCdevice; +import com.jogamp.openal.ALFactory; +import java.io.IOException; +import java.nio.*; + +import com.jogamp.openal.eax.*; +import com.jogamp.openal.util.*; +import javax.sound.sampled.UnsupportedAudioFileException; + +/** + * @author Athomas Goldberg + * @author Michael Bien + */ +public class OpenALTest { + + public static void main(String[] args) throws InterruptedException, UnsupportedAudioFileException, IOException { + ALC alc = ALFactory.getALC(); + ALCdevice device = alc.alcOpenDevice(null); + ALCcontext context = alc.alcCreateContext(device, null); + alc.alcMakeContextCurrent(context); + AL al = ALFactory.getAL(); + + System.out.println("devices:"); + String[] devices = alc.alcGetDeviceSpecifiers(); + for (String name : devices) { + System.out.println(" "+name); + } + System.out.println("capture devices:"); + devices = alc.alcGetCaptureDeviceSpecifiers(); + for (String name : devices) { + System.out.println(" "+name); + } + + + boolean eaxPresent = al.alIsExtensionPresent("EAX2.0"); + System.out.println("EAX present:" + eaxPresent); + + int[] buffers = new int[1]; + al.alGenBuffers(1, buffers, 0); + + WAVData wd = WAVLoader.loadFromStream(OpenALTest.class.getResourceAsStream("lewiscarroll.wav")); + al.alBufferData(buffers[0], wd.format, wd.data, wd.size, wd.freq); + + int[] sources = new int[1]; + al.alGenSources(1, sources, 0); + al.alSourcei(sources[0], AL.AL_BUFFER, buffers[0]); + + int[] loopArray = new int[1]; + al.alGetSourcei(sources[0], AL.AL_LOOPING, loopArray, 0); + System.out.println("Looping 1: " + (loopArray[0] == AL.AL_TRUE)); + + int[] loopBuffer = new int[1]; + al.alGetSourcei(sources[0], AL.AL_LOOPING, loopBuffer, 0); + System.out.println("Looping 2: " + (loopBuffer[0] == AL.AL_TRUE)); + + if (eaxPresent) { + EAX eax = EAXFactory.getEAX(); + IntBuffer env = Buffers.newDirectIntBuffer(1); + env.put(EAX.EAX_ENVIRONMENT_BATHROOM); + eax.setListenerProperty(EAX.DSPROPERTY_EAXLISTENER_ENVIRONMENT, env); + } + + al.alSourcePlay(sources[0]); + + Thread.sleep(5000); + + al.alSource3f(sources[0], AL.AL_POSITION, 2f, 2f, 2f); + + Thread.sleep(5000); + + al.alListener3f(AL.AL_POSITION, 3f, 3f, 3f); + + Thread.sleep(5000); + + al.alSource3f(sources[0], AL.AL_POSITION, 0, 0, 0); + + Thread.sleep(10000); + + al.alSourceStop(sources[0]); + al.alDeleteSources(1, sources, 0); + alc.alcDestroyContext(context); + alc.alcCloseDevice(device); + } +} diff --git a/src/test/com/jogamp/openal/test/manual/Sound3DTest.java b/src/test/com/jogamp/openal/test/manual/Sound3DTest.java new file mode 100644 index 0000000..d91f0ec --- /dev/null +++ b/src/test/com/jogamp/openal/test/manual/Sound3DTest.java @@ -0,0 +1,98 @@ +package com.jogamp.openal; + +/** + * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * -Redistribution of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * -Redistribution 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 Sun Microsystems, Inc. or the names of contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. + * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING + * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR + * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS + * LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A + * RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + * IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT + * OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR + * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS + * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that this software is not designed or intended for use in the + * design, construction, operation or maintenance of any nuclear facility. + */ +import java.io.*; +import javax.sound.sampled.*; +import com.jogamp.openal.sound3d.*; +import com.jogamp.openal.test.resources.ResourceLocation; + +/** + * @author Athomas Goldberg + * + */ +public class Sound3DTest { + + public static float lerp(float v1, float v2, float t) { + float result = 0; + result = v1 + ((v2 - v1) * t); + return result; + } + + public static void main(String[] args) throws IOException, InterruptedException, UnsupportedAudioFileException { + + AudioSystem3D.init(); + + // create the initial context - this can be collapsed into the init. + Device device = AudioSystem3D.openDevice(null); + Context context = AudioSystem3D.createContext(device); + AudioSystem3D.makeContextCurrent(context); + + // get the listener object + Listener listener = AudioSystem3D.getListener(); + listener.setPosition(0, 0, 0); + + // load a source and play it + Source source1 = AudioSystem3D.loadSource(ResourceLocation.class.getResourceAsStream("lewiscarroll.wav")); + source1.setPosition(0, 0, 0); + source1.setLooping(true); + source1.play(); + + Thread.sleep(10000); + + // move the source + source1.setPosition(1, 1, 1); + + // move the listener + for (int i = 0; i < 1000; i++) { + float t = ((float) i) / 1000f; + float lp = lerp(0f, 2f, t); + listener.setPosition(lp, lp, lp); + Thread.sleep(10); + } + + // fade listener out. + for (int i = 0; i < 1000; i++) { + float t = ((float) i) / 1000f; + float lp = lerp(1f, 0f, t); + listener.setGain(lp); + Thread.sleep(10); + } + + source1.stop(); + source1.delete(); + context.destroy(); + device.close(); + + } +} diff --git a/src/test/com/jogamp/openal/test/resources/ResourceLocation.java b/src/test/com/jogamp/openal/test/resources/ResourceLocation.java new file mode 100644 index 0000000..74f1356 --- /dev/null +++ b/src/test/com/jogamp/openal/test/resources/ResourceLocation.java @@ -0,0 +1,6 @@ + +package com.jogamp.openal.test.resources; + +/** just a tag to locate the resources */ +public class ResourceLocation { +} diff --git a/src/test/com/jogamp/openal/test/resources/lewiscarroll.wav b/src/test/com/jogamp/openal/test/resources/lewiscarroll.wav Binary files differnew file mode 100644 index 0000000..2314d39 --- /dev/null +++ b/src/test/com/jogamp/openal/test/resources/lewiscarroll.wav |