Skip to content

Instantly share code, notes, and snippets.

@ggshily
Created November 11, 2015 09:27
Show Gist options
  • Save ggshily/18bd380b5f06c6ffdccf to your computer and use it in GitHub Desktop.
Save ggshily/18bd380b5f06c6ffdccf to your computer and use it in GitHub Desktop.
setBackgroundMusicLoop for cocos2dx
diff --git a/client/cocos2d/cocos/audio/android/cddSimpleAudioEngine.cpp b/client/cocos2d/cocos/audio/android/cddSimpleAudioEngine.cpp
index c9a78fe..65f4f3d 100644
--- a/client/cocos2d/cocos/audio/android/cddSimpleAudioEngine.cpp
+++ b/client/cocos2d/cocos/audio/android/cddSimpleAudioEngine.cpp
@@ -55,6 +55,7 @@ namespace CocosDenshion {
// Empty implementations. On Android, only subclasses are meant to be used
void SimpleAudioEngine::preloadBackgroundMusic(const char* pszFilePath) { }
void SimpleAudioEngine::playBackgroundMusic(const char* pszFilePath, bool bLoop) { }
+ void SimpleAudioEngine::setBackgroundMusicLoop(bool bLoop){ };
void SimpleAudioEngine::stopBackgroundMusic(bool bReleaseData) { }
void SimpleAudioEngine::pauseBackgroundMusic() { }
void SimpleAudioEngine::resumeBackgroundMusic() { }
diff --git a/client/cocos2d/cocos/audio/android/jni/cddandroidAndroidJavaEngine.cpp b/client/cocos2d/cocos/audio/android/jni/cddandroidAndroidJavaEngine.cpp
index 5d4a767..9136e68 100644
--- a/client/cocos2d/cocos/audio/android/jni/cddandroidAndroidJavaEngine.cpp
+++ b/client/cocos2d/cocos/audio/android/jni/cddandroidAndroidJavaEngine.cpp
@@ -90,6 +90,17 @@ namespace CocosDenshion {
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
+ void AndroidJavaEngine::setBackgroundMusicLoop(bool bLoop) {
+ cocos2d::JniMethodInfo methodInfo;
+
+ if (! getJNIStaticMethodInfo(methodInfo, "setBackgroundMusicLoop", "(Z)V")) {
+ return ;
+ }
+
+ methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID, bLoop);
+ methodInfo.env->DeleteLocalRef(methodInfo.classID);
+ }
+
void AndroidJavaEngine::stopBackgroundMusic(bool bReleaseData) {
cocos2d::JniMethodInfo methodInfo;
diff --git a/client/cocos2d/cocos/audio/android/jni/cddandroidAndroidJavaEngine.h b/client/cocos2d/cocos/audio/android/jni/cddandroidAndroidJavaEngine.h
index a6bb400..163f84a 100644
--- a/client/cocos2d/cocos/audio/android/jni/cddandroidAndroidJavaEngine.h
+++ b/client/cocos2d/cocos/audio/android/jni/cddandroidAndroidJavaEngine.h
@@ -35,6 +35,7 @@ namespace CocosDenshion {
void preloadBackgroundMusic(const char* pszFilePath);
void playBackgroundMusic(const char* pszFilePath, bool bLoop);
+ void setBackgroundMusicLoop(bool bLoop);
void stopBackgroundMusic(bool bReleaseData);
void pauseBackgroundMusic();
void resumeBackgroundMusic();
diff --git a/client/cocos2d/cocos/audio/include/SimpleAudioEngine.h b/client/cocos2d/cocos/audio/include/SimpleAudioEngine.h
index 9508ba1..04cf2b2 100644
--- a/client/cocos2d/cocos/audio/include/SimpleAudioEngine.h
+++ b/client/cocos2d/cocos/audio/include/SimpleAudioEngine.h
@@ -95,6 +95,13 @@ public:
* @lua playMusic
*/
virtual void playBackgroundMusic(const char* filePath, bool loop = false);
+
+ /**
+ * set background music loop.
+ *
+ * @param loop Whether the background music loop or not.
+ */
+ virtual void setBackgroundMusicLoop(bool loop);
/**
* Stop playing background music.
diff --git a/client/cocos2d/cocos/audio/ios/CDAudioManager.h b/client/cocos2d/cocos/audio/ios/CDAudioManager.h
index 96b0754..014e23a 100644
--- a/client/cocos2d/cocos/audio/ios/CDAudioManager.h
+++ b/client/cocos2d/cocos/audio/ios/CDAudioManager.h
@@ -210,6 +210,8 @@ typedef enum {
-(void) playBackgroundMusic:(NSString*) filePath loop:(BOOL) loop;
/** Preloads a background music */
-(void) preloadBackgroundMusic:(NSString*) filePath;
+/** set background music loop */
+-(void) setBackgroundMusicLoop:(BOOL) loop;
/** Stops playing the background music */
-(void) stopBackgroundMusic;
/** Pauses the background music */
diff --git a/client/cocos2d/cocos/audio/ios/CDAudioManager.m b/client/cocos2d/cocos/audio/ios/CDAudioManager.m
index cc2d75c..5deb39e 100644
--- a/client/cocos2d/cocos/audio/ios/CDAudioManager.m
+++ b/client/cocos2d/cocos/audio/ios/CDAudioManager.m
@@ -555,11 +555,7 @@ static BOOL configured = FALSE;
{
[self.backgroundMusic load:filePath];
- if (loop) {
- [self.backgroundMusic setNumberOfLoops:-1];
- } else {
- [self.backgroundMusic setNumberOfLoops:0];
- }
+ [self setBackgroundMusicLoop:loop];
if (!willPlayBackgroundMusic || _mute) {
CDLOGINFO(@"Denshion::CDAudioManager - play bgm aborted because audio is not exclusive or sound is muted");
@@ -569,6 +565,15 @@ static BOOL configured = FALSE;
[self.backgroundMusic play];
}
+-(void) setBackgroundMusicLoop:(BOOL)loop
+{
+ if (loop) {
+ [self.backgroundMusic setNumberOfLoops:-1];
+ } else {
+ [self.backgroundMusic setNumberOfLoops:0];
+ }
+}
+
-(void) stopBackgroundMusic
{
[self.backgroundMusic stop];
diff --git a/client/cocos2d/cocos/audio/ios/SimpleAudioEngine.mm b/client/cocos2d/cocos/audio/ios/SimpleAudioEngine.mm
index 9b9ebfa..90d5ef0 100644
--- a/client/cocos2d/cocos/audio/ios/SimpleAudioEngine.mm
+++ b/client/cocos2d/cocos/audio/ios/SimpleAudioEngine.mm
@@ -42,6 +42,11 @@ static void static_playBackgroundMusic(const char* pszFilePath, bool bLoop)
[[SimpleAudioEngine sharedEngine] playBackgroundMusic: [NSString stringWithUTF8String: pszFilePath] loop: bLoop];
}
+static void static_setBackgroundMusicLoop(bool bLoop)
+{
+ [[SimpleAudioEngine sharedEngine] setBackgroundMusicLoop:bLoop];
+}
+
static void static_stopBackgroundMusic()
{
[[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
@@ -187,6 +192,11 @@ void SimpleAudioEngine::playBackgroundMusic(const char* pszFilePath, bool bLoop)
std::string fullPath = FileUtils::getInstance()->fullPathForFilename(pszFilePath);
static_playBackgroundMusic(fullPath.c_str(), bLoop);
}
+
+void SimpleAudioEngine::setBackgroundMusicLoop(bool loop)
+{
+ static_setBackgroundMusicLoop(loop);
+}
void SimpleAudioEngine::stopBackgroundMusic(bool bReleaseData)
{
diff --git a/client/cocos2d/cocos/audio/ios/SimpleAudioEngine_objc.h b/client/cocos2d/cocos/audio/ios/SimpleAudioEngine_objc.h
index a5e8faa..c276e6f 100644
--- a/client/cocos2d/cocos/audio/ios/SimpleAudioEngine_objc.h
+++ b/client/cocos2d/cocos/audio/ios/SimpleAudioEngine_objc.h
@@ -60,6 +60,8 @@
-(void) playBackgroundMusic:(NSString*) filePath;
/** plays background music, if loop is true the music will repeat otherwise it will be played once */
-(void) playBackgroundMusic:(NSString*) filePath loop:(BOOL) loop;
+/** set background music loop */
+-(void) setBackgroundMusicLoop:(BOOL) loop;
/** stops playing background music */
-(void) stopBackgroundMusic;
/** pauses the background music */
diff --git a/client/cocos2d/cocos/audio/ios/SimpleAudioEngine_objc.m b/client/cocos2d/cocos/audio/ios/SimpleAudioEngine_objc.m
index 4b17439..d026100 100644
--- a/client/cocos2d/cocos/audio/ios/SimpleAudioEngine_objc.m
+++ b/client/cocos2d/cocos/audio/ios/SimpleAudioEngine_objc.m
@@ -96,6 +96,11 @@ static CDBufferManager *bufferManager = nil;
[am playBackgroundMusic:filePath loop:loop];
}
+-(void) setBackgroundMusicLoop:(BOOL)loop
+{
+ [am setBackgroundMusicLoop:loop];
+}
+
-(void) stopBackgroundMusic
{
[am stopBackgroundMusic];
diff --git a/client/cocos2d/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxMusic.java b/client/cocos2d/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxMusic.java
index e086ca6..34d7935 100644
--- a/client/cocos2d/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxMusic.java
+++ b/client/cocos2d/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxMusic.java
@@ -133,6 +133,19 @@ public class Cocos2dxMusic {
}
}
}
+
+ public void setBackgroundMusicLoop(final boolean isLoop) {
+ if (mBackgroundMediaPlayer == null) {
+ Log.e(Cocos2dxMusic.TAG, "playBackgroundMusic: background media player is null");
+ } else {
+ try {
+ mBackgroundMediaPlayer.setLooping(isLoop);
+ mIsLoop = isLoop;
+ } catch (final Exception e) {
+ Log.e(Cocos2dxMusic.TAG, "playBackgroundMusic: error state");
+ }
+ }
+ }
public void stopBackgroundMusic() {
if (this.mBackgroundMediaPlayer != null) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment