Created
November 11, 2015 09:27
-
-
Save ggshily/18bd380b5f06c6ffdccf to your computer and use it in GitHub Desktop.
setBackgroundMusicLoop for cocos2dx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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