0

在我的应用程序中,我使用 AVAudioPlayer 播放一些 mp3。我的代码是:

- (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?

当我的声音改变时,我调用“播放”方法,但是这个方法每次都分配一个新的 AVAudioPlayer

我知道

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

但我不明白如何在这个委托方法中释放我的声音 id,因为如果我在 soundId 中释放我的应用程序在我使用我的应用程序几分钟后崩溃,我就会崩溃这条消息“shm_open failed:”Apple Audio Queue”

请帮助我...谢谢

4

1 回答 1

0

你不想soundID在你的委托方法中释放。你想释放player。从你的代码来看,soundID是一个ivar。当委托被调用时,soundID可能已被设置为另一个值。但player参数将是AVAudioPlayer刚刚播放完的那个。

于 2012-04-24T00:06:55.750 回答