Я пишу приложение для iOS, используя AudioQueue для записи. Я создаю входную очередь, настроенную для получения линейного 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 .
Я не смог найти документацию для этого сообщения об ошибке, и, если возможно, перезапустить входную аудио-очередь в фоновом режиме.