После прерывания задерживаются звуковые уведомления об изменении маршрута при записи - PullRequest
0 голосов
/ 28 января 2010

Мое приложение iPhone требует, чтобы я знал, когда пользователь подключил / не подключил свои наушники. Это легко. AudioSessionAddPropertyListener с обратным вызовом, слушающим kAudioSessionProperty_AudioRouteChange.

Я пишу логи с NSLog, когда что-то происходит. Пользователь подключает наушники? Получите уведомление и строку в консоли gdb. Пользователь отключает наушники? То же самое.

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

Что я обнаружил, так это то, что после прерывания, и я снова активировал аудио сеанс и восстановил категорию аудио в kAudioSessionCategory_RecordAudio, уведомления о аудио маршруте становятся немного медленными.

Когда я подключаю наушники, я не вижу уведомления. Когда я отключаю наушники, я вижу ОБА «подключенное» уведомление И «отключенное» уведомление в быстрой последовательности.

Это похоже на задержку уведомления «подключен», а когда приходит уведомление «отключен», очередь ожидающих уведомлений сбрасывается.

Что я делаю не так? Как правильно восстановить аудио сеанс, чтобы получать своевременные уведомления?

РЕДАКТИРОВАТЬ: iPhone OS 3.1.2, работает на iPhone 3G. Я запускаю программу, скомпилированную с помощью 3.0 SDK (из XCode 3.1.2).

1 Ответ

0 голосов
/ 18 февраля 2010

У меня та же проблема, но больше информации и, следовательно, вопросов к вам. Вы используете OpenAL для звука, как я. Вы также поддерживаете музыку iPod как я. Я получаю отключение наушников на экранах меню кварца хорошо, но на экране игры glView это в основном не получается, как вы. Иногда работает первое отключение, затем сбой. Иногда переподключение также не срабатывает, поэтому, когда я переключаюсь на кварцевый экран, у меня появляется полдюжины диалогов о разъединении, на которые я должен нажать. Это со звуком OpenAL. С музыкой iPod я переключаюсь на уведомление NSNotificationCenter MPMusicPlayerControllerPlaybackStateDidChangeNotification, и это работает, но только во время воспроизведения музыки iPod. ОС 3.1.3 со сборкой до ОС 3.1.0 на iPhone и iTouch. Посмотрите на ваш код ошибки возврата из AudioSessionInitialize (), это была моя проблема, он не вызывался первым и не удался. РЕДАКТИРОВАТЬ: Исправление не удалось, это случайная / случайная проблема, по-видимому, вызванная высокой загрузкой процессора.

...