From: moly Date: Thu, 18 Jul 2013 19:12:10 +0000 (+0100) Subject: Added pause and resume methods for Sound X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=631ab745a56846f0fd20cf9cc35ceb4e8706b926;p=mikumikustudio%2Flibgdx-mikumikustudio.git Added pause and resume methods for Sound --- diff --git a/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidSound.java b/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidSound.java index 546c9bf04..9fa69cd00 100644 --- a/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidSound.java +++ b/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidSound.java @@ -64,6 +64,26 @@ final class AndroidSound implements Sound { public void stop (long soundId) { soundPool.stop((int)soundId); } + + @Override + public void pause () { + soundPool.autoPause(); + } + + @Override + public void pause (long soundId) { + soundPool.pause((int)soundId); + } + + @Override + public void resume () { + soundPool.autoResume(); + } + + @Override + public void resume (long soundId) { + soundPool.resume((int)soundId); + } @Override public void setPitch (long soundId, float pitch) { diff --git a/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSObjectALSound.java b/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSObjectALSound.java index 623278c55..3c040b5cc 100644 --- a/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSObjectALSound.java +++ b/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSObjectALSound.java @@ -116,4 +116,28 @@ public class IOSObjectALSound implements Sound { // TODO Auto-generated method stub } + + @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 + + } } diff --git a/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSSound.java b/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSSound.java index 0d676c434..8b5e06165 100644 --- a/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSSound.java +++ b/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSSound.java @@ -218,6 +218,38 @@ public class IOSSound implements Sound { players[(int)soundId].Stop(); } } + + @Override + public void pause() { + for (int i = 0; i < players.length; i++) { + players[i].Pause(); + } + } + + @Override + public void pause(long soundId) { + if (soundId >= 0) { + players[(int)soundId].Pause(); + } + } + + @Override + public void resume() { + for (int i = 0; i < players.length; i++) { + AVAudioPlayer player = players[i]; + if (!player.get_Playing() && player.get_CurrentTime() > 0) + playQueue.offer(player); + } + } + + @Override + public void resume(long soundId) { + if (soundId >= 0) { + AVAudioPlayer player = players[(int)soundId]; + if (!player.get_Playing() && player.get_CurrentTime() > 0) + playQueue.offer(player); + } + } @Override public void setLooping(long soundId, boolean looping) { diff --git a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/iosrobovm/IOSSound.java b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/iosrobovm/IOSSound.java index 8cf957c18..e3859a4a0 100644 --- a/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/iosrobovm/IOSSound.java +++ b/backends/gdx-backend-robovm/src/com/badlogic/gdx/backends/iosrobovm/IOSSound.java @@ -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 diff --git a/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtMusic.java b/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtMusic.java index 3a3a54210..ba5cc9918 100644 --- a/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtMusic.java +++ b/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtMusic.java @@ -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; } diff --git a/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtSound.java b/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtSound.java index a99727238..dc8e7dcaf 100644 --- a/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtSound.java +++ b/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/GwtSound.java @@ -135,6 +135,34 @@ public class GwtSound implements Sound { } @Override + public void pause () { + for (int i = 0; i < sounds.length; i++) { + if (sounds[i] != null) + sounds[i].pause(); + } + } + + @Override + public void pause (long soundId) { + if (soundId >= 0 && sounds[(int)soundId] != null) + sounds[(int)soundId].pause(); + } + + @Override + public void resume () { + for (int i = 0; i < sounds.length; i++) { + if (sounds[i] != null) + sounds[i].resume(); + } + } + + @Override + public void resume (long soundId) { + if (soundId >= 0 && sounds[(int)soundId] != null) + sounds[(int)soundId].resume(); + } + + @Override public void setLooping (long soundId, boolean looping) { if (soundId >= 0 && sounds[(int)soundId] != null) sounds[(int)soundId].setLooping(looping); diff --git a/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/soundmanager2/SMSound.java b/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/soundmanager2/SMSound.java index 0e965ab55..dfaeb70f2 100644 --- a/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/soundmanager2/SMSound.java +++ b/backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/soundmanager2/SMSound.java @@ -122,12 +122,17 @@ public class SMSound { * 1 = playing or buffering sound (play has been called, waiting for data etc.). * Note that a 1 may not always guarantee that sound is being heard, given buffering and autoPlay status. * @return the current playing state. */ - public native final int playState () /*-{ + public native final int getPlayState () /*-{ return this.@com.badlogic.gdx.backends.gwt.soundmanager2.SMSound::jsSound.playState; }-*/; + /** Boolean indicating pause status. True/False. */ + public native final boolean getPaused () /*-{ + return this.@com.badlogic.gdx.backends.gwt.soundmanager2.SMSound::jsSound.paused; + }-*/; + /** Number of times to loop the sound. */ - public native final int loops () /*-{ + public native final int getLoops () /*-{ return this.@com.badlogic.gdx.backends.gwt.soundmanager2.SMSound::jsSound.loops; }-*/; } \ No newline at end of file diff --git a/backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALAudio.java b/backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALAudio.java index 228d218f7..6a526a5f0 100644 --- a/backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALAudio.java +++ b/backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALAudio.java @@ -196,6 +196,26 @@ public class OpenALAudio implements Audio { } } } + + void pauseSourcesWithBuffer (int bufferID) { + if (noDevice) return; + for (int i = 0, n = idleSources.size; i < n; i++) { + int sourceID = idleSources.get(i); + if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) + alSourcePause(sourceID); + } + } + + void resumeSourcesWithBuffer (int bufferID) { + if (noDevice) return; + for (int i = 0, n = idleSources.size; i < n; i++) { + int sourceID = idleSources.get(i); + if (alGetSourcei(sourceID, AL_BUFFER) == bufferID) { + if (alGetSourcei(sourceID, AL_SOURCE_STATE) == AL_PAUSED) + alSourcePlay(sourceID); + } + } + } public void update () { if (noDevice) return; @@ -213,6 +233,19 @@ public class OpenALAudio implements Audio { int sourceId = soundIdToSource.get(soundId); alSourceStop(sourceId); } + + public void pauseSound (long soundId) { + if (!soundIdToSource.containsKey(soundId)) return; + int sourceId = soundIdToSource.get(soundId); + alSourcePause(sourceId); + } + + public void resumeSound (long soundId) { + if (!soundIdToSource.containsKey(soundId)) return; + int sourceId = soundIdToSource.get(soundId); + if (alGetSourcei(sourceId, AL_SOURCE_STATE) == AL_PAUSED) + alSourcePlay(sourceId); + } public void setSoundGain (long soundId, float volume) { if (!soundIdToSource.containsKey(soundId)) return; diff --git a/backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALSound.java b/backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALSound.java index 166a77d6b..4c83f6eea 100644 --- a/backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALSound.java +++ b/backends/gdx-openal/src/com/badlogic/gdx/backends/openal/OpenALSound.java @@ -100,8 +100,32 @@ public class OpenALSound implements Sound { if (audio.noDevice) return; audio.stopSound(soundId); } + + @Override + public void pause () { + if (audio.noDevice) return; + audio.pauseSourcesWithBuffer(bufferID); + } + + @Override + public void pause (long soundId) { + if (audio.noDevice) return; + audio.pauseSound(soundId); + } @Override + public void resume () { + if (audio.noDevice) return; + audio.resumeSourcesWithBuffer(bufferID); + } + + @Override + public void resume (long soundId) { + if (audio.noDevice) return; + audio.resumeSound(soundId); + } + + @Override public void setPitch (long soundId, float pitch) { if (audio.noDevice) return; audio.setSoundPitch(soundId, pitch); diff --git a/gdx/src/com/badlogic/gdx/audio/Sound.java b/gdx/src/com/badlogic/gdx/audio/Sound.java index 2b2072703..973f3df05 100644 --- a/gdx/src/com/badlogic/gdx/audio/Sound.java +++ b/gdx/src/com/badlogic/gdx/audio/Sound.java @@ -72,6 +72,12 @@ public interface Sound extends Disposable { /** Stops playing all instances of this sound. */ public void stop (); + + /** Pauses all instances of this sound. */ + public void pause (); + + /** Resumes all paused instances of this sound. */ + public void resume (); /** Releases all the resources. */ public void dispose (); @@ -81,6 +87,16 @@ public interface Sound extends Disposable { * @param soundId the sound id */ public void stop (long soundId); + /** Pauses the sound instance with the given id as returned by {@link #play()} or {@link #play(float)}. If the sound is no longer + * playing, this has no effect. + * @param soundId the sound id */ + public void pause (long soundId); + + /** Resumes the sound instance with the given id as returned by {@link #play()} or {@link #play(float)}. If the sound is not + * paused, this has no effect. + * @param soundId the sound id */ + public void resume (long soundId); + /** Sets the sound instance with the given id to be looping. If the sound is no longer playing this has no effect.s * @param soundId the sound id * @param looping whether to loop or not. */ diff --git a/gdx/src/com/badlogic/gdx/physics/box2d/World.java b/gdx/src/com/badlogic/gdx/physics/box2d/World.java index fcd72ab92..56717951e 100644 --- a/gdx/src/com/badlogic/gdx/physics/box2d/World.java +++ b/gdx/src/com/badlogic/gdx/physics/box2d/World.java @@ -829,7 +829,7 @@ b2ContactFilter defaultFilter; return contacts; } - /** @return all bodies currently in the simulation */ + /** @param bodies an Array in which to place all bodies currently in the simulation */ public void getBodies (Array bodies) { bodies.clear(); bodies.ensureCapacity(this.bodies.size); @@ -838,7 +838,7 @@ b2ContactFilter defaultFilter; } } - /** @return all joints currently in the simulation */ + /** @param joints an Array in which to place all joints currently in the simulation */ public void getJoints (Array joints) { joints.clear(); joints.ensureCapacity(this.joints.size);