0

私はピアノのアプリケーションを持っています。少しの誤差はありますが、問題なく動作しています。同時に複数のキーを非常に速く弾くと、サウンドが数秒間消え、コンソールに次のメッセージが表示されます

Mediaserverd を強制終了する AudioQueueStart メッセージの投稿

関連するコードは次のとおりです。

-(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 の呼び出しのさまざまなポイントのように見える「posting message to kill mediaserverd」を取得します。アプリがハングアップし、デバイスがハングアップし、デバイスを通常の実行状態に戻すのに苦労しています。

于 2013-02-14T17:26:36.403 に答える
1

このメッセージ によると、それはデバイスのミュート スイッチです。

デバイスの物理スイッチを介して iPad をミュートしたことが、私のアプリで問題を引き起こしていることが判明しました。ボタンがオンになっていない限り、問題は発生しません。

おいおい。プログラムでオーバーライドする方法は?

于 2012-11-27T19:08:13.127 に答える
0

AVAudioPlayer の代わりに SoundBankPlayer を使用して問題を「解決」しました。サウンドバンカー情報.

于 2012-06-09T03:23:25.570 に答える