cocos2d -iphone循環播放音效

http://www.cnblogs.com/moon-7/archive/2012/04/23/2467145.html   
 //預加載背景音樂 和 預加載音效  在播放背景音樂與音效之前都要提前加載,爲了防止加載消耗時間發生與遊戲不同步;
        [[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的播放了;

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

分類
發佈了55 篇原創文章 · 獲贊 5 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章