Speakhere НЕ записывает после получения телефонного звонка - PullRequest
2 голосов
/ 09 февраля 2012

Я работаю над проектом, который нуждается в записи и анализе звука, все мысли в порядке, когда я говорю здесь. Но когда кто-то звонит на мой телефон, запись останавливается, а когда приложение возвращается, оно никогда не записывает снова.
Я пытаюсь перезапустить рекордер нажатием кнопки «запись», но я получаю эту ошибку:
Ошибка: не удалось получить количество входных каналов ('! Cat')
Ошибка: не удалось включить измерение (-50)
ОШИБКА: ошибка измерения
Я также пытаюсь перезапустить с помощью вызова StartRecord (....), но ничем не отличается. Так что любой может помочь мне

if (inInterruptionState == kAudioSessionEndInterruption)

    THIS->recorder->StartRecord(CFSTR("recordedFile.caf"));

Ответы [ 3 ]

1 голос
/ 09 февраля 2012

Приложение должно остановить запись в любом прослушивателе прерываний аудио-сеанса и начать обратный вызов прерывания, если оно когда-либо захочет начать запись снова. В противном случае может потребоваться принудительное завершение работы и перезапуск пользователем.

0 голосов
/ 13 февраля 2013

просто из памяти - при возврате на передний план (в соответствующем обработчике уведомлений) вам нужно вызвать

AudioSessionSetActive (true)

или что-то подобное.Как я уже сказал, я читаю его только по смежному вопросу - никаких гарантий.Удачи, Ноби

0 голосов
/ 21 октября 2012

У меня была та же проблема с SpeakHere, и я нашел это решение методом проб и ошибок.Попробуйте это: избавьтесь от ссылок на воспроизведениеWasInterrupted (закомментировано ниже), но оставьте в других директивах, связанных с игроком.Каким-то образом это снова включает рекордер!Если бы кто-нибудь мог объяснить, почему это работает, я хотел бы знать!

В void interruptListener измените

else if ((inInterruptionState == kAudioSessionEndInterruption)&& THIS->playbackWasInterrupted))

на

else if (inInterruptionState == kAudioSessionEndInterruption)

         //&& THIS->playbackWasInterrupted)

и затем закомментируйте или удалитестрока «playWasInterrupted» ниже:

{
    // we were playing back when we were interrupted, so reset and resume now
    THIS->player->StartQueue(true);
    [[NSNotificationCenter defaultCenter] postNotificationName:@"playbackQueueResumed" object:THIS];

// THIS-> PlayWasInterrupted = NO;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...