OSDN Git Service

Added pause and resume methods for Sound
authormoly <tsweston@gmail.com>
Thu, 18 Jul 2013 19:12:10 +0000 (20:12 +0100)
committermoly <tsweston@gmail.com>
Thu, 18 Jul 2013 19:12:10 +0000 (20:12 +0100)
backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidSound.java
backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSObjectALSound.java
backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSSound.java
backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/iosrobovm/IOSSound.java
backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtMusic.java
backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtSound.java
backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/soundmanager2/SMSound.java
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALAudio.java
backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALSound.java
gdx/src/com/badlogic/gdx/audio/Sound.java
gdx/src/com/badlogic/gdx/physics/box2d/World.java

index 546c9bf..9fa69cd 100644 (file)
@@ -64,6 +64,26 @@ final class AndroidSound implements Sound {
        public void stop (long soundId) {\r
                soundPool.stop((int)soundId);\r
        }\r
+       \r
+       @Override\r
+       public void pause () {\r
+               soundPool.autoPause();\r
+       }\r
+       \r
+       @Override\r
+       public void pause (long soundId) {\r
+               soundPool.pause((int)soundId);\r
+       }\r
+       \r
+       @Override\r
+       public void resume () {\r
+               soundPool.autoResume();\r
+       }\r
+       \r
+       @Override\r
+       public void resume (long soundId) {\r
+               soundPool.resume((int)soundId);\r
+       }\r
 \r
        @Override\r
        public void setPitch (long soundId, float pitch) {\r
index 623278c..3c040b5 100644 (file)
@@ -116,4 +116,28 @@ public class IOSObjectALSound implements Sound {
                // TODO Auto-generated method stub\r
 \r
        }\r
+\r
+       @Override\r
+       public void pause () {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       @Override\r
+       public void resume () {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       @Override\r
+       public void pause (long soundId) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+\r
+       @Override\r
+       public void resume (long soundId) {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
 }\r
index 0d676c4..8b5e061 100644 (file)
@@ -218,6 +218,38 @@ public class IOSSound implements Sound {
                        players[(int)soundId].Stop();\r
                }\r
        }\r
+       \r
+       @Override\r
+       public void pause() {\r
+               for (int i = 0; i < players.length; i++) {\r
+                       players[i].Pause();\r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public void pause(long soundId) {\r
+               if (soundId >= 0) {\r
+                       players[(int)soundId].Pause();\r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public void resume() {\r
+               for (int i = 0; i < players.length; i++) {\r
+                       AVAudioPlayer player = players[i];\r
+                        if (!player.get_Playing() && player.get_CurrentTime() > 0)\r
+                                playQueue.offer(player);\r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public void resume(long soundId) {\r
+               if (soundId >= 0) {\r
+                        AVAudioPlayer player = players[(int)soundId];\r
+                        if (!player.get_Playing() && player.get_CurrentTime() > 0)\r
+                                playQueue.offer(player);\r
+               }\r
+       }\r
 \r
        @Override\r
        public void setLooping(long soundId, boolean looping) {\r
index 8cf957c..e3859a4 100644 (file)
@@ -91,4 +91,28 @@ public class IOSSound implements Sound {
                
        }
 
+       @Override
+       public void pause() {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void resume() {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void pause(long soundId) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void resume(long soundId) {
+               // TODO Auto-generated method stub
+               
+       }
+
 }
\ No newline at end of file
index 3a3a542..ba5cc99 100644 (file)
@@ -44,6 +44,10 @@ public class GwtMusic implements Music, SMSoundCallback {
        @Override
        public void play () {
                if (isPlaying()) return;
+               if (sound.getPaused()) {
+                       resume();
+                       return;
+               }
                soundOptions.volume = (int)(volume * 100);
                soundOptions.pan = (int)(pan * 100);
                soundOptions.loops = 1;
@@ -51,6 +55,10 @@ public class GwtMusic implements Music, SMSoundCallback {
                sound.play(soundOptions);
                isPlaying = true;
        }
+       
+       public void resume () {
+               sound.resume();
+       }
 
        @Override
        public void pause () {
@@ -66,7 +74,7 @@ public class GwtMusic implements Music, SMSoundCallback {
 
        @Override
        public boolean isPlaying () {
-               isPlaying &= sound.playState() == 1;
+               isPlaying &= sound.getPlayState() == 1;
                return isPlaying;
        }
 
index a997272..dc8e7dc 100644 (file)
@@ -135,6 +135,34 @@ public class GwtSound implements Sound {
        }\r
 \r
        @Override\r
+       public void pause () {\r
+               for (int i = 0; i < sounds.length; i++) {\r
+                       if (sounds[i] != null)\r
+                               sounds[i].pause();\r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public void pause (long soundId) {\r
+               if (soundId >= 0 && sounds[(int)soundId] != null)\r
+                       sounds[(int)soundId].pause();\r
+       }\r
+       \r
+       @Override\r
+       public void resume () {\r
+               for (int i = 0; i < sounds.length; i++) {\r
+                       if (sounds[i] != null)\r
+                               sounds[i].resume();\r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public void resume (long soundId) {\r
+               if (soundId >= 0 && sounds[(int)soundId] != null)\r
+                       sounds[(int)soundId].resume();\r
+       }\r
+       \r
+       @Override\r
        public void setLooping (long soundId, boolean looping) {\r
                if (soundId >= 0 && sounds[(int)soundId] != null)\r
                        sounds[(int)soundId].setLooping(looping);\r
index 0e965ab..dfaeb70 100644 (file)
@@ -122,12 +122,17 @@ public class SMSound {
         * 1 = playing or buffering sound (play has been called, waiting for data etc.).\r
         * Note that a 1 may not always guarantee that sound is being heard, given buffering and autoPlay status.\r
         * @return the current playing state. */\r
-       public native final int playState () /*-{\r
+       public native final int getPlayState () /*-{\r
                return this.@com.badlogic.gdx.backends.gwt.soundmanager2.SMSound::jsSound.playState;\r
        }-*/;\r
        \r
+       /** Boolean indicating pause status. True/False. */\r
+       public native final boolean getPaused () /*-{\r
+               return this.@com.badlogic.gdx.backends.gwt.soundmanager2.SMSound::jsSound.paused;\r
+       }-*/;\r
+       \r
        /** Number of times to loop the sound. */\r
-       public native final int loops () /*-{\r
+       public native final int getLoops () /*-{\r
                return this.@com.badlogic.gdx.backends.gwt.soundmanager2.SMSound::jsSound.loops;\r
        }-*/;\r
 }
\ No newline at end of file
index 228d218..6a526a5 100644 (file)
@@ -196,6 +196,26 @@ public class OpenALAudio implements Audio {
                        }\r
                }\r
        }\r
+       \r
+       void pauseSourcesWithBuffer (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
+                               alSourcePause(sourceID);\r
+               }\r
+       }\r
+       \r
+       void resumeSourcesWithBuffer (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
+                               if (alGetSourcei(sourceID, AL_SOURCE_STATE) == AL_PAUSED)\r
+                                       alSourcePlay(sourceID);\r
+                       }\r
+               }\r
+       }\r
 \r
        public void update () {\r
                if (noDevice) return;\r
@@ -213,6 +233,19 @@ public class OpenALAudio implements Audio {
                int sourceId = soundIdToSource.get(soundId);\r
                alSourceStop(sourceId);\r
        }\r
+       \r
+       public void pauseSound (long soundId) {\r
+               if (!soundIdToSource.containsKey(soundId)) return;\r
+               int sourceId = soundIdToSource.get(soundId);\r
+               alSourcePause(sourceId);\r
+       }\r
+       \r
+       public void resumeSound (long soundId) {\r
+               if (!soundIdToSource.containsKey(soundId)) return;\r
+               int sourceId = soundIdToSource.get(soundId);\r
+               if (alGetSourcei(sourceId, AL_SOURCE_STATE) == AL_PAUSED)\r
+                       alSourcePlay(sourceId);\r
+       }\r
 \r
        public void setSoundGain (long soundId, float volume) {\r
                if (!soundIdToSource.containsKey(soundId)) return;\r
index 166a77d..4c83f6e 100644 (file)
@@ -100,8 +100,32 @@ public class OpenALSound implements Sound {
                if (audio.noDevice) return;\r
                audio.stopSound(soundId);\r
        }\r
+       \r
+       @Override\r
+       public void pause () {\r
+               if (audio.noDevice) return;\r
+               audio.pauseSourcesWithBuffer(bufferID);\r
+       }\r
+       \r
+       @Override\r
+       public void pause (long soundId) {\r
+               if (audio.noDevice) return;\r
+               audio.pauseSound(soundId);\r
+       }\r
 \r
        @Override\r
+       public void resume () {\r
+               if (audio.noDevice) return;\r
+               audio.resumeSourcesWithBuffer(bufferID);\r
+       }\r
+       \r
+       @Override\r
+       public void resume (long soundId) {\r
+               if (audio.noDevice) return;\r
+               audio.resumeSound(soundId);\r
+       }\r
+       \r
+       @Override\r
        public void setPitch (long soundId, float pitch) {\r
                if (audio.noDevice) return;\r
                audio.setSoundPitch(soundId, pitch);\r
index 2b20727..973f3df 100644 (file)
@@ -72,6 +72,12 @@ public interface Sound extends Disposable {
 \r
        /** Stops playing all instances of this sound. */\r
        public void stop ();\r
+       \r
+       /** Pauses all instances of this sound. */\r
+       public void pause ();\r
+       \r
+       /** Resumes all paused instances of this sound. */\r
+       public void resume ();\r
 \r
        /** Releases all the resources. */\r
        public void dispose ();\r
@@ -81,6 +87,16 @@ public interface Sound extends Disposable {
         * @param soundId the sound id */\r
        public void stop (long soundId);\r
 \r
+       /** Pauses the sound instance with the given id as returned by {@link #play()} or {@link #play(float)}. If the sound is no longer\r
+        * playing, this has no effect.\r
+        * @param soundId the sound id */\r
+       public void pause (long soundId);\r
+       \r
+       /** Resumes the sound instance with the given id as returned by {@link #play()} or {@link #play(float)}. If the sound is not\r
+        * paused, this has no effect.\r
+        * @param soundId the sound id */\r
+       public void resume (long soundId);\r
+       \r
        /** Sets the sound instance with the given id to be looping. If the sound is no longer playing this has no effect.s\r
         * @param soundId the sound id\r
         * @param looping whether to loop or not. */\r
index fcd72ab..5671795 100644 (file)
@@ -829,7 +829,7 @@ b2ContactFilter defaultFilter;
                return contacts;\r
        }\r
 \r
-       /** @return all bodies currently in the simulation */\r
+       /** @param bodies an Array in which to place all bodies currently in the simulation */\r
        public void getBodies (Array<Body> bodies) {\r
                bodies.clear();\r
                bodies.ensureCapacity(this.bodies.size);\r
@@ -838,7 +838,7 @@ b2ContactFilter defaultFilter;
                }               \r
        }\r
 \r
-       /** @return all joints currently in the simulation */\r
+       /** @param joints an Array in which to place all joints currently in the simulation */\r
        public void getJoints (Array<Joint> joints) {\r
                joints.clear();\r
                joints.ensureCapacity(this.joints.size);\r