2012-04-23 91 views
0

在我的應用程序中,我使用AVAudioPlayer播放一些mp3。我的代碼是:AVAudioPlayer,很多聲音

- (void) play{ 
    NSString *path = [NSString stringWithFormat:@"%@/%@", 
         [[NSBundle mainBundle] resourcePath], 
         [arraysound objectAtIndex:appDelegate.indexSound]]; 
    NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO]; 
    soundID = [[AVAudioPlayer alloc] initWithContentsOfURL:filePath error:nil]; 
    soundID.delegate = self; 
    [soundID prepareToPlay]; 
    [soundID play]; 
} 

但我有40個聲音播放;我用每次soundID發揮出自己的聲音

例子中,我sound1.mp3,sound2.mp3,sound3.mp3 ......

我怎樣才能釋放我soundId?

當我的聲音改變我稱之爲「玩」的方法,但這種方法的alloc一個新的AVAudioPlayer每次

我知道

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player 
        successfully: (BOOL) flag { 

,但我不明白如何釋放此委託在我的聲音ID方法,因爲如果我釋放內soundId我的應用程序崩潰 「的shm_open失敗:‘過了幾分鐘,我用我的應用我有崩潰此消息後,蘋果音頻隊列’

請幫我...謝謝

+0

您是否在等待每個聲音完成調用委託方法的位置,還是您手動更改它們? – sooper 2012-04-23 23:46:33

回答

0

你不想在你的委託方法中釋放soundID。你想發佈player。從你的代碼來看,soundID是一個伊娃。代表被調用時,soundID可能已被設置爲另一個值。但player參數將是剛剛完成播放的AVAudioPlayer