2012-04-23 2 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音です。私は毎回私がsound1.mp3、sound2.mp3、sound3.mp3 ......

がどのように私は私のsoundIdを解放することができている私の音

例を再生するためにsoundIDでしょうか?私は

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

を知っているが、私はこのデリゲートの内側に私のサウンドIDを解放する方法を理解していない私の、私は方法を「再生」を呼び出し音の変更が、この方法のアロケーション新しいAVAudioPlayer毎回

私は解放した場合に内部の「失敗した場合、shm_open: 『私は私のアプリを使用して、いくつかの分、私がクラッシュして、このメッセージを持っていた後、私のアプリがクラッシュ をsoundIdための方法は、Appleのオーディオキュー』

私を助けてください...おかげ

+0

デリゲートメソッドが呼び出される場所、または手動で変更する場合は、各サウンドが終了するのを待っていますか? – sooper

答えて

0

デリゲートメソッドでsoundIDを解放したくありません。 playerをリリースしたいとします。あなたのコードから判断すると、soundIDは象牙です。デリゲートが呼び出されると、soundIDが別の値に設定されている可能性があります。しかし、playerのパラメータは、再生が終了したAVAudioPlayerになります。

関連する問題