AudioQueueStart发布消息以杀死mediaserverd

时间:2012-06-08 16:15:15

标签: ios avaudioplayer

我有钢琴应用程序。它工作正常,有一点错误。如果我同时快速播放多个键,声音会消失几秒钟,并在控制台中收到以下消息

  

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测试过,我没有任何内存泄漏。如果有人可以有想法避免这个错误,那将不胜感激。

3 个答案:

答案 0 :(得分:3)

我遇到了类似的问题。

我花了很多时间试图解决这个问题,我认为我的具体问题发生在:

  1. 我在AudioCategory中,在静音开关打开时不允许播放声音。
  2. 我开始播放声音(我实际上并没有在应用中这样做,但这就是我可以可靠地再现的方式)。
  3. 当声音仍在播放时,我切换到另一个AudioCategory,当静音开关打开时,该音频不允许播放声音。
  4. 从这一点开始,我从AudioSession API中的调用中看到各种各样的点,从而发布消息来杀死mediaserverd。应用程序挂起,设备挂起,我很难让设备恢复正常运行状态。

答案 1 :(得分:1)

根据this message ,这是设备的静音开关。

  

事实证明,通过设备的物理开关将iPad静音了   导致我的应用程序的问题。只要按钮不是   开启问题不会发生。

啧。如何以编程方式覆盖?

答案 2 :(得分:0)

我使用SoundBankPlayer而不是AVAudioPlayer“解决”了这个问题。 SoundBanker info