iOS AVAudioPlayer多个实例,一次多个声音

时间:2010-09-28 22:46:11

标签: ipad instance avaudioplayer dealloc

我正在制作一本iPad的互动儿童书,上面有一个“给我读”的选项。

对于每个页面(具有索引),都有一个产生“read to me”功能的音频剪辑。该功能运行良好,除了当我翻页时,前一页音频仍然播放,即使新音频开始,这是我的例子:

- (void) didTurnToPageAtIndex:(NSUInteger)index 
{
    if ([delegate respondsToSelector:@selector(leavesView:didTurnToPageAtIndex:)])
        [delegate leavesView:self didTurnToPageAtIndex:index];

    if([[NSUserDefaults standardUserDefaults] boolForKey:@"kReadToMe"] == YES)
    {
        NSString* filename = [voices objectAtIndex:index];
        NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@"m4v"];  
        NSLog(@"File: %@, Index: %i",path,index);

        //Create new audio for next page
        AVAudioPlayer * newAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil]; 
        rtmAudio = newAudio; // automatically retain audio and dealloc old file if new file is loaded
        //[newAudio release];
        [rtmAudio play];
    }
}

比如说,在第2页的音频停止播放之前,我转向第3页,两个片段互相播放,这将惹恼孩子们,我知道这对我有用。

我在分配新文件之前尝试放置[rtmAudio stop],但这似乎不起作用。在开始新剪辑之前,我需要一种方法来杀死流行的音频剪辑。

2 个答案:

答案 0 :(得分:1)

我建议你在整个应用程序中有一个音频播放器实例。然后你可以检查它是否正在播放,如果是这样,则停止然后再继续。

你在这个方法中创造一个新的玩家,然后停止旧的....我相信

答案 1 :(得分:0)

正如AlexChaffee提到Apple docs,"同时播放多个声音,每个音频播放器一个声音,精确同步"。最好在整个应用程序中使用带有NSNotificationCenter通知的多重实例。