0

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

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

4

3 回答 3

3

我遇到了类似的问题。

我花了很长时间试图解决这个问题,我认为我的特定问题发生在以下情况:

  1. 我所在的 AudioCategory 不允许在静音开关打开时播放声音。
  2. 我开始播放声音(我实际上并没有在应用程序中这样做,但这是我可以可靠再现的方式)。
  3. 在声音仍在播放的情况下,我切换到另一个在静音开关打开时不允许播放声音的 AudioCategory。

从这一点开始,我从 AudioSession API 中调用的各个点中得到“发布消息以杀死 mediaserverd”。应用程序挂起,设备挂起,我努力让设备恢复正常运行状态。

于 2013-02-14T17:26:36.403 回答
1

根据此消息 ,它是设备的静音开关。

事实证明,通过设备的物理开关将 iPad 静音是导致我的应用出现问题的原因。只要按钮没有打开,问题就不会发生。

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

于 2012-11-27T19:08:13.127 回答
0

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

于 2012-06-09T03:23:25.570 回答