Cocos2d-音樂播放(音效循環播放&&停止)


        //預加載背景音樂 和 預加載音效 在播放背景音樂與音效之前都要提前加載,為了防止加載消耗時間發生與游戲不同步;
        [[SimpleAudioEngine sharedEngine] preloadBackgroundMusic:@"office_background.mp3"]; [[SimpleAudioEngine sharedEngine] preloadEffect:@"office_background.mp3"]; //播放背景音樂 和 循環播放背景音樂;
        [[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"office_background.mp3"]; [[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"school_kissing.mp3" loop:YES]; //暫停播放背景音樂;
 [[SimpleAudioEngine sharedEngine] pauseBackgroundMusic]; //繼續播放背景音樂(不是從頭開始播)
 [[SimpleAudioEngine sharedEngine] resumeBackgroundMusic]; //停止播放背景音樂
 [[SimpleAudioEngine sharedEngine] stopBackgroundMusic];
 //設置背景音樂音量大小;
        [CDAudioManager sharedManager].backgroundMusic.volume=1.0;  //(volume值范圍為0.0-1.0);
        //背景音樂播放幾次:
        [CDAudioManager sharedManager].backgroundMusic.numberOfLoops= int值;
        //背景音樂播放完后:         [[CDAudioManager sharedManager] setBackgroundMusicCompletionListener:self selector:@selector(觸發的方法)];
 
//播放音效;
        [[SimpleAudioEngine sharedEngine] playEffect:@"school_kissing.mp3"]; //pitch(值范圍:>0){值最大,音調越高,播放時間越短} pan:(值范圍:-1到1)貌似是左右聲道 gain:(值范圍:>0)音量大小;
        [[SimpleAudioEngine sharedEngine] playEffect:@"office_background.mp3" pitch:3.0 pan:-1 gain:0.1];

有時我們需要循環播放一個音效;

可以做如下操作:

在 #import "SimpleAudioEngine.h" 源碼中:

-(ALuint) playEffect:(NSString*) filePath loop:(BOOL)loop;

-(ALuint) playEffect:(NSString*) filePath pitch:(Float32) pitch pan:(Float32) pan gain:(Float32) gain loop:(BOOL)loop;

 #import "SimpleAudioEngine.m"源碼中 實現方法:

-(ALuint) playEffect:(NSString*) filePath loop:(BOOL)loop
{
    return [self playEffect:filePath pitch:1.0f pan:0.0f gain:1.0f loop:loop];
}

-(ALuint) playEffect:(NSString*) filePath pitch:(Float32) pitch pan:(Float32) pan gain:(Float32) gain loop:(BOOL)loop
{
    int soundId = [bufferManager bufferForFile:filePath create:YES];
    if (soundId != kCDNoBuffer) {
        return [soundEngine playSound:soundId sourceGroupId:0 pitch:pitch pan:pan gain:gain loop:loop];
    } else {
        return CD_MUTE;
    }    
}

這樣我們就可以用如下方法實現音效循環播放:

        //loop循環播放音效;
        [[SimpleAudioEngine sharedEngine] playEffect:@"school_kissing.mp3" loop:YES];
        [[SimpleAudioEngine sharedEngine] playEffect:@"school_kissing.mp3" pitch:1.0 pan:0.0 gain:1.0 loop:YES];

停止播放音效:設一個全局的靜態變量:

static int i=1;(隨便賦個值)
  在播放音效時候  i=[[SimpleAudioEngine sharedEngine] playEffect:@"school_kissing.mp3" loop:YES];
  停止播放音效:   [[SimpleAudioEngine sharedEngine] stopEffect:i];

需要注意的是:如有多個音效播放,索引值不能是同一個, 因為每次播放都會返回一個int值如:

    i=[[SimpleAudioEngine sharedEngine] playEffect:@"abc.mp3" loop:YES];
    i=[[SimpleAudioEngine sharedEngine] playEffect:@"def.mp3" loop:YES];
     [[SimpleAudioEnginesharedEnginestopEffect:i];
//播放abc可能返回值為100,播放def返回為101,這樣通過同一個索引“i”就不能停止abc的播放了;
 
        

你會發現,還在循環播放;必須使用不同的“索引”才行;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM