使用AVAudioPlayer播放声音时,应用会冻结

时间:2010-01-27 08:49:44

标签: objective-c iphone cocoa-touch

我正在为有多个迷你游戏的学龄前儿童制作应用程序。其中一个涉及在图片中找出“出了什么问题”。例如,如果他们按下在街上玩耍的小孩,发出一声叮当声,孩子就会被移出街道,并且标签会更新为“发现1/5错误”。如果他们找到了所有这些,他们会转移到新的视图控制器,并出现新的流量错误。

一切都工作得很好......大部分时间。但每隔一段时间,应用程序就会播放一次,然后冻结。我认为它与声音的实际播放有关(使用AVAudioplayer),因为如果我发表评论,它似乎每次都有效。

发现错误时调用的函数是:

-(void)fantKnapp{

    NSLog(@"fant en knapp");
    int ant =[self.antall intValue];
    ant++;
    NSLog(@"antall %i",ant);
    self.antall=[NSNumber numberWithInt:ant];
    self.poeng.text=[NSString stringWithFormat: @"%i/5 funnet",ant];

    if(ant==5){
        NSLog(@"Du klarte alle!");
        klartAlleView.hidden=NO;
        spillIgjen.hidden=NO;
        nestebrettKnapp.hidden=NO;
        navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate spillLyd:@"du_klarte_alle"];
    }
    else{
        navtestAppDelegate *appDelegate=(navtestAppDelegate *)[[UIApplication sharedApplication] delegate];
        [appDelegate spillLyd:@"cling_1"];
    }
}

此代码找到“antall”,即当前发现的错误数(点数)。如果发现所有错误,则播放某种声音(此声音始终有效)。如果没有其他声音播放。这是通过调用appdelegate文件中的函数来完成的。

-(void)spillLyd:(NSString*) filnavn{
    NSString *audioFilePath=[[NSBundle mainBundle] pathForResource:filnavn ofType:@"aif"];
    NSURL *audioFileURL=[NSURL fileURLWithPath:audioFilePath];
    self.lydspiller=[[[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil] autorelease];
    [self.lydspiller prepareToPlay];
    [self.lydspiller play];
    NSLog(@"spiller lyden");
}

这在49/50的案例中效果很好,但每隔一段时间它就不会。有趣的是声音确实播放,但应用程序冻结,标签未更新(self.poeng.text = ...)。但是显示了所有NSLog注释,包括新的点数。我希望这会在播放声音之前发生......

这是AVAudioplayer的问题吗?有没有人有类似的经历?任何人都可以帮我解决这个问题吗?我很感谢任何帮助或建议...

(对挪威人抱歉。这可能不会让我更容易帮助我......)

1 个答案:

答案 0 :(得分:0)

您可能需要实现AVAudioPlayerDelegate方法,以便尝试捕获播放器中的错​​误。如果代表报告即使应用程序冻结,播放器已成功完成,则该错误很可能与播放器无关。

我觉得你。很少有调试任务比追踪明确但非常间歇性的错误更令人沮丧。