AudioQueueNewInput уменьшает громкость воспроизведения для AVAudioPlayer - PullRequest
2 голосов
/ 21 мая 2009

Я использую класс SCListener Стивена Селиса для записи уровней звука микрофона iPhone. Я также играю аудио с помощью AVAudioPlayer. Например, пользователь нажимает «Play», чтобы запустить звук, воспроизводимый в фоновом режиме, а затем имеет возможность дуть в микрофон, чтобы воспроизвести дополнительные, более короткие звуки. Код работает нормально, воспроизводя все звуки, когда они должны быть воспроизведены, однако громкость звука AVAudioPlayer значительно уменьшается, когда вы начинаете слушать с помощью SCListener. Я сузил виновника до этой строки в исходном коде SCListener:

AudioQueueNewInput (& format, listenCallback, self, NULL, NULL, 0 & queue);

Я ломал голову и не могу понять, как сохранить громкость воспроизведения на самом высоком уровне после выполнения этой строки. Я тоже говорил со Стивеном Селисом, и он не знает, что происходит. Возможно, я полагаю, что iPhone отключает выходную громкость, когда используется микрофон, чтобы не создавать обратную связь, но, похоже, должен быть способ отключить это.

В итоге:

  1. Начните воспроизведение длинного аудиофайла с AVAudioPlayer - громкость 100% (громко).
  2. Включить SCListener и начать прослушивание (которое вызывает AudioQueueNewInput).
  3. Уровень громкости звука AVAudioPlayer значительно уменьшается
  4. Вызовите [[SCListener sharedListener] stop], чтобы избавиться от очереди
  5. Звук AVAudioPlayer возобновляется с большей громкостью воспроизведения

Кто-нибудь видел что-нибудь подобное или есть идеи, как сохранить громкость воспроизведения выше? Я явно установил для параметра громкости значение 1.0f, чтобы обеспечить максимальный уровень усиления.

Ответы [ 2 ]

1 голос
/ 26 января 2010

Вы можете попробовать это:

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
0 голосов
/ 10 июня 2009

Я не знаком с работой Стивена Селиса, но если предложение tposchel не сработает, возможно, будет полезно взглянуть на значения InputQueue по сравнению со значениями аудио OutputQueue в режиме отладки (хотя это сложно, поскольку обратные вызовы для этих методов являются потоками реального времени).

Это может быть информативным в том смысле, что оно сообщит вам, что, по мнению ОС, отправляет на ваше устройство вывода (наушники или встроенный динамик).

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

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