OSDN Git Service

[fixed] issue 725, OpenAL backend switches to passthrough if no audio device is avail...
authorbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Wed, 7 Mar 2012 12:47:37 +0000 (12:47 +0000)
committerbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Wed, 7 Mar 2012 12:47:37 +0000 (12:47 +0000)
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/Mp3.java
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/Ogg.java
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALAudio.java
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALMusic.java
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALSound.java
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/Wav.java

index ad40330..750a565 100644 (file)
@@ -38,6 +38,7 @@ public class Mp3 {
 \r
                public Music (OpenALAudio audio, FileHandle file) {\r
                        super(audio, file);\r
+                       if(audio.noDevice) return;\r
                        bitstream = new Bitstream(file.read());\r
                        decoder = new MP3Decoder();\r
                        try {\r
@@ -105,7 +106,7 @@ public class Mp3 {
 \r
                public Sound (OpenALAudio audio, FileHandle file) {\r
                        super(audio);\r
-\r
+                       if(audio.noDevice) return;\r
                        ByteArrayOutputStream output = new ByteArrayOutputStream(4096);\r
 \r
                        Bitstream bitstream = new Bitstream(file.read());\r
index 894ceb4..66522fd 100644 (file)
@@ -27,6 +27,7 @@ public class Ogg {
 \r
                public Music (OpenALAudio audio, FileHandle file) {\r
                        super(audio, file);\r
+                       if(audio.noDevice) return;\r
                        input = new OggInputStream(file.read());\r
                        setup(input.getChannels(), input.getSampleRate());\r
                }\r
@@ -49,7 +50,7 @@ public class Ogg {
        static public class Sound extends OpenALSound {\r
                public Sound (OpenALAudio audio, FileHandle file) {\r
                        super(audio);\r
-\r
+                       if(audio.noDevice) return;\r
                        OggInputStream input = new OggInputStream(file.read());\r
                        ByteArrayOutputStream output = new ByteArrayOutputStream(4096);\r
                        byte[] buffer = new byte[2048];\r
index 462becb..4849994 100644 (file)
@@ -63,6 +63,7 @@ public class OpenALAudio implements Audio {
        private ObjectMap<String, Class<? extends OpenALMusic>> extensionToMusicClass = new ObjectMap();\r
 \r
        Array<OpenALMusic> music = new Array(false, 1, OpenALMusic.class);\r
+       boolean noDevice = false;\r
 \r
        public OpenALAudio () {\r
                this(16);\r
@@ -79,7 +80,9 @@ public class OpenALAudio implements Audio {
                try {\r
                        AL.create();\r
                } catch (LWJGLException ex) {\r
-                       throw new GdxRuntimeException("Error initializing OpenAL.", ex);\r
+                       noDevice = true;\r
+                       return;\r
+//                     throw new GdxRuntimeException("Error initializing OpenAL.", ex);\r
                }\r
 \r
                allSources = new IntArray(false, simultaneousSources);\r
@@ -136,6 +139,7 @@ public class OpenALAudio implements Audio {
        }\r
 \r
        int obtainSource (boolean isMusic) {\r
+               if(noDevice) return 0;\r
                for (int i = 0, n = idleSources.size; i < n; i++) {\r
                        int sourceId = idleSources.get(i);\r
                        int state = alGetSourcei(sourceId, AL_SOURCE_STATE);\r
@@ -165,6 +169,7 @@ public class OpenALAudio implements Audio {
        }\r
 \r
        void freeSource (int sourceID) {\r
+               if(noDevice) return;\r
                alSourceStop(sourceID);\r
                alSourcei(sourceID, AL_BUFFER, 0);\r
                if (sourceToSoundId.containsKey(sourceID)) {\r
@@ -175,6 +180,7 @@ public class OpenALAudio implements Audio {
        }\r
 \r
        void freeBuffer (int bufferID) {\r
+               if(noDevice) return;\r
                for (int i = 0, n = idleSources.size; i < n; i++) {\r
                        int sourceID = idleSources.get(i);\r
                        if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) {\r
@@ -189,6 +195,7 @@ public class OpenALAudio implements Audio {
        }\r
 \r
        void stopSourcesWithBuffer (int bufferID) {\r
+               if(noDevice) return;\r
                for (int i = 0, n = idleSources.size; i < n; i++) {\r
                        int sourceID = idleSources.get(i);\r
                        if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) {\r
@@ -202,6 +209,7 @@ public class OpenALAudio implements Audio {
        }\r
 \r
        public void update () {\r
+               if(noDevice) return;\r
                for (int i = 0; i < music.size; i++)\r
                        music.items[i].update();\r
        }\r
@@ -243,6 +251,7 @@ public class OpenALAudio implements Audio {
        }\r
 \r
        public void dispose () {\r
+               if(noDevice) return;\r
                for (int i = 0, n = allSources.size; i < n; i++) {\r
                        int sourceID = allSources.get(i);\r
                        int state = alGetSourcei(sourceID, AL_SOURCE_STATE);\r
@@ -262,11 +271,47 @@ public class OpenALAudio implements Audio {
                }\r
        }\r
 \r
-       public AudioDevice newAudioDevice (int sampleRate, boolean isMono) {\r
+       public AudioDevice newAudioDevice (int sampleRate, final  boolean isMono) {\r
+               if(noDevice) return new AudioDevice() {\r
+                       @Override\r
+                       public void writeSamples (float[] samples, int offset, int numSamples) {\r
+                       }\r
+                       \r
+                       @Override\r
+                       public void writeSamples (short[] samples, int offset, int numSamples) {\r
+                       }\r
+                       \r
+                       @Override\r
+                       public void setVolume (float volume) {\r
+                       }\r
+                       \r
+                       @Override\r
+                       public boolean isMono () {\r
+                               return isMono;\r
+                       }\r
+                       \r
+                       @Override\r
+                       public int getLatency () {\r
+                               return 0;\r
+                       }\r
+                       \r
+                       @Override\r
+                       public void dispose () {\r
+                       }\r
+               };\r
                return new OpenALAudioDevice(this, sampleRate, isMono);\r
        }\r
 \r
        public AudioRecorder newAudioRecorder (int samplingRate, boolean isMono) {\r
+               if(noDevice) return new AudioRecorder() {\r
+                       @Override\r
+                       public void read (short[] samples, int offset, int numSamples) {\r
+                       }\r
+                       \r
+                       @Override\r
+                       public void dispose () {\r
+                       }\r
+               };\r
                // BOZO - Write OpenAL recorder.\r
                return new JavaSoundAudioRecorder(samplingRate, isMono);\r
        }\r
index 4aa1aba..6369e1c 100644 (file)
@@ -49,8 +49,9 @@ public abstract class OpenALMusic implements Music {
        public OpenALMusic (OpenALAudio audio, FileHandle file) {\r
                this.audio = audio;\r
                this.file = file;\r
-\r
-               if(audio != null) audio.music.add(this);\r
+               if(audio != null) {\r
+                       if(!audio.noDevice) audio.music.add(this);\r
+               }\r
        }\r
 \r
        protected void setup (int channels, int sampleRate) {\r
@@ -60,6 +61,7 @@ public abstract class OpenALMusic implements Music {
        }\r
 \r
        public void play () {\r
+               if(audio.noDevice) return;\r
                if (sourceID == -1) {\r
                        sourceID = audio.obtainSource(true);\r
                        if (sourceID == -1) return;\r
@@ -85,6 +87,7 @@ public abstract class OpenALMusic implements Music {
        }\r
 \r
        public void stop () {\r
+               if(audio.noDevice) return;\r
                if (sourceID == -1) return;\r
                reset();\r
                audio.freeSource(sourceID);\r
@@ -94,11 +97,13 @@ public abstract class OpenALMusic implements Music {
        }\r
 \r
        public void pause () {\r
+               if(audio.noDevice) return;\r
                if (sourceID != -1) alSourcePause(sourceID);\r
                isPlaying = false;\r
        }\r
 \r
        public boolean isPlaying () {\r
+               if(audio.noDevice) return false;\r
                if (sourceID == -1) return false;\r
                return isPlaying;\r
        }\r
@@ -113,10 +118,12 @@ public abstract class OpenALMusic implements Music {
 \r
        public void setVolume (float volume) {\r
                this.volume = volume;\r
+               if(audio.noDevice) return;\r
                if (sourceID != -1) alSourcef(sourceID, AL_GAIN, volume);\r
        }\r
 \r
        public float getPosition () {\r
+               if(audio.noDevice) return 0;\r
                if (sourceID == -1) return 0;\r
                return renderedSeconds + alGetSourcef(sourceID, AL11.AL_SEC_OFFSET);\r
        }\r
@@ -137,6 +144,7 @@ public abstract class OpenALMusic implements Music {
        }\r
 \r
        public void update () {\r
+               if(audio.noDevice) return;\r
                if (sourceID == -1) return;\r
 \r
                boolean end = false;\r
@@ -175,6 +183,7 @@ public abstract class OpenALMusic implements Music {
        }\r
 \r
        public void dispose () {\r
+               if(audio.noDevice) return;\r
                if (buffers == null) return;\r
                if (sourceID != -1) {\r
                        reset();\r
index 10b937d..994b8ca 100644 (file)
@@ -50,6 +50,7 @@ public class OpenALSound implements Sound {
        }\r
 \r
        public long play (float volume) {\r
+               if(audio.noDevice) return 0;\r
                int sourceID = audio.obtainSource(false);\r
                if (sourceID == -1) return -1;\r
                long soundId = audio.getSoundId(sourceID);\r
@@ -66,6 +67,7 @@ public class OpenALSound implements Sound {
 \r
        @Override\r
        public long loop (float volume) {\r
+               if(audio.noDevice) return 0;\r
                int sourceID = audio.obtainSource(false);\r
                if (sourceID == -1) return -1;\r
                long soundId = audio.getSoundId(sourceID);\r
@@ -77,10 +79,12 @@ public class OpenALSound implements Sound {
        }\r
 \r
        public void stop () {\r
+               if(audio.noDevice) return;\r
                audio.stopSourcesWithBuffer(bufferID);\r
        }\r
 \r
        public void dispose () {\r
+               if(audio.noDevice) return;\r
                if (bufferID == -1) return;\r
                audio.freeBuffer(bufferID);\r
                alDeleteBuffers(bufferID);\r
@@ -89,27 +93,32 @@ public class OpenALSound implements Sound {
 \r
        @Override\r
        public void stop (long soundId) {\r
+               if(audio.noDevice) return;\r
                audio.stopSound(soundId);\r
        }\r
 \r
        @Override\r
        public void setPitch (long soundId, float pitch) {\r
+               if(audio.noDevice) return;\r
                audio.setSoundPitch(soundId, pitch);\r
        }\r
 \r
        @Override\r
        public void setVolume (long soundId, float volume) {\r
+               if(audio.noDevice) return;\r
                audio.setSoundGain(soundId, volume);\r
        }\r
 \r
 \r
        @Override\r
        public void setLooping (long soundId, boolean looping) {\r
+               if(audio.noDevice) return;\r
                audio.setSoundLooping(soundId, looping);\r
        }\r
 \r
        @Override\r
        public void setPan (long soundId, float pan, float volume) {\r
+               if(audio.noDevice) return;\r
                audio.setSoundPan(soundId, pan, volume);\r
        }\r
 }\r
index 80a2c2f..e7d4c0d 100644 (file)
@@ -31,6 +31,7 @@ public class Wav {
                public Music (OpenALAudio audio, FileHandle file) {\r
                        super(audio, file);\r
                        input = new WavInputStream(file);\r
+                       if(audio.noDevice) return;\r
                        setup(input.channels, input.sampleRate);\r
                }\r
 \r
@@ -59,6 +60,7 @@ public class Wav {
        static public class Sound extends OpenALSound {\r
                public Sound (OpenALAudio audio, FileHandle file) {\r
                        super(audio);\r
+                       if(audio.noDevice) return;\r
 \r
                        WavInputStream input = new WavInputStream(file);\r
                        ByteArrayOutputStream output = new ByteArrayOutputStream(4096);\r