2010-01-28 1 views
0

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

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

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

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

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

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

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

EDIT: iPhone OS 3.1.2, работающий на iPhone 3G. Я запускаю программу, скомпилированную с 3.0 SDK (из XCode 3.1.2).

+0

Какая ОС и оборудование? –

+0

Извините: отредактированный вопрос, чтобы добавить версии ОС/оборудования. –

ответ

0

У меня такая же проблема, но больше информации и, следовательно, вопросы для вас. Вы используете OpenAL для звука, подобного мне. Вы также поддерживаете музыку iPod, как я. У меня отключены разъемы для наушников в экранах меню кварца, но в игровом экране glView это в основном терпит неудачу, как вы. Иногда срабатывает первый разрыв, затем сбой. Иногда повторное подключение также не срабатывает, поэтому, когда я переключаюсь на кварцевый экран, я получаю очередь из десяти десятков диалоговых окон разъединения, на которые я должен щелкнуть. Это звуковой сигнал OpenAL. С iPod music я переключаюсь на уведомление NSNotificationCenter MPMusicPlayerControllerPlaybackStateDidChangeNotification и это работает, но только во время воспроизведения музыки iPod. ОС 3.1.3 со встроенной ОС 3.1.0 на iPhone и iTouch. Посмотрите на свой код ошибки возврата из AudioSessionInitialize(), это была моя проблема, она не вызывалась первой и не удалась. EDIT: Fix failed, это прерывистая/случайная проблема, вызванная высокой загрузкой процессора.

+0

Я не использую OpenAL, просто прямые вызовы аудио сессии/звуковой очереди. Кроме того, нет музыки iPod! Я регистрирую неудачи, и AudioSessionInitialize() определенно указывает на успех. (Он также определенно вызывается перед любыми другими функциями аудиосеанса/звуковой очереди. –