我有钢琴应用程序。它工作正常,有一点错误。如果我同时快速播放多个键,声音会消失几秒钟,并在控制台中收到以下消息
AudioQueueStart发布消息以杀死mediaserverd
以下是相关代码:
-(IBAction)playNoteFromKeyTouch:(id) sender{
[NSThread detachNewThreadSelector:@selector(playNote:) toTarget:self withObject:[NSString stringWithFormat:@"Piano.mf.%@",[sender currentTitle]]];
}
-(void)playNote:(NSString *) note{
NSError *err;
NSString *path = [[NSBundle mainBundle] pathForResource:note ofType:@"aiff"];
AVAudioPlayer *p = [[AVAudioPlayer alloc ] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&err];
p.delegate = self;
if (err) {
NSLog(@"%@", err);
}else{
[p prepareToPlay];
[p play];
}
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
[player release];
}
我已经使用Instruments测试过,我没有任何内存泄漏。如果有人可以有想法避免这个错误,那将不胜感激。
答案 0 :(得分:3)
我遇到了类似的问题。
我花了很多时间试图解决这个问题,我认为我的具体问题发生在:
从这一点开始,我从AudioSession API中的调用中看到各种各样的点,从而发布消息来杀死mediaserverd。应用程序挂起,设备挂起,我很难让设备恢复正常运行状态。
答案 1 :(得分:1)
答案 2 :(得分:0)
我使用SoundBankPlayer而不是AVAudioPlayer“解决”了这个问题。 SoundBanker info