録音用に AudioQueue を使用して iOS アプリを作成しています。リニア PCM を取得するように構成された入力キューを作成し、このキューを指定すると、すべてが期待どおりに機能します。
割り込みを管理するために、AVAudioSession のデリゲート メソッドを実装して、割り込みの開始と終了をキャッチしました。メソッド endInterruption は次のようになります。
- (void)endInterruptionWithFlags:(NSUInteger)flags;
{
if (flags == AVAudioSessionInterruptionFlags_ShouldResume && audioQueue != 0) {
NSLog(@"Current audio session - category: '%@' mode: '%@'",
[[AVAudioSession sharedInstance] category],
[[AVAudioSession sharedInstance] mode]);
NSError *error = nil;
OSStatus errorStatus;
if ((errorStatus = AudioSessionSetActive(true)) != noErr) {
error = [self errorForAudioSessionServiceWithOSStatus:errorStatus];
NSLog(@"Could not reactivate the audio session: %@",
[error localizedDescription]);
} else {
if ((errorStatus = AudioQueueStart(audioQueue, NULL)) != noErr) {
error = [self errorForAudioQueueServiceWithOSStatus:errorStatus];
NSLog(@"Could not restart the audio queue: %@",
[error localizedDescription]);
}
}
}
// ...
}
フォアグラウンドでアプリが中断された場合、すべて正常に動作します。中断がバックグラウンドで発生した場合、問題が発生します。オーディオ セッションをアクティブにすると、エラー!catが発生します。
指定されたオーディオ セッション カテゴリは、試行されたオーディオ操作に使用できません。たとえば、オーディオ セッション カテゴリを kAudioSessionCategory_AudioProcessing に設定して、オーディオを再生または録音しようとしました。
セッションをアクティブ化せずにキューを開始すると、エラー コード-12985が発生します。
その時点で、カテゴリはAVAudioSessionCategoryPlayAndRecordに設定され、モードはAVAudioSessionModeDefaultになります。
このエラー メッセージに関するドキュメントも、バックグラウンドで入力オーディオ キューを再起動できるかどうかもわかりませんでした。