Я использую класс SCListener Стивена Селиса для записи уровней звука микрофона iPhone. Я также играю аудио с помощью AVAudioPlayer. Например, пользователь нажимает «Play», чтобы запустить звук, воспроизводимый в фоновом режиме, а затем имеет возможность дуть в микрофон, чтобы воспроизвести дополнительные, более короткие звуки. Код работает нормально, воспроизводя все звуки, когда они должны быть воспроизведены, однако громкость звука AVAudioPlayer значительно уменьшается, когда вы начинаете слушать с помощью SCListener. Я сузил виновника до этой строки в исходном коде SCListener:
AudioQueueNewInput (& format, listenCallback, self, NULL, NULL, 0 & queue);
Я ломал голову и не могу понять, как сохранить громкость воспроизведения на самом высоком уровне после выполнения этой строки. Я тоже говорил со Стивеном Селисом, и он не знает, что происходит. Возможно, я полагаю, что iPhone отключает выходную громкость, когда используется микрофон, чтобы не создавать обратную связь, но, похоже, должен быть способ отключить это.
В итоге:
- Начните воспроизведение длинного аудиофайла с AVAudioPlayer - громкость 100% (громко).
- Включить SCListener и начать прослушивание (которое вызывает AudioQueueNewInput).
- Уровень громкости звука AVAudioPlayer значительно уменьшается
- Вызовите [[SCListener sharedListener] stop], чтобы избавиться от очереди
- Звук AVAudioPlayer возобновляется с большей громкостью воспроизведения
Кто-нибудь видел что-нибудь подобное или есть идеи, как сохранить громкость воспроизведения выше? Я явно установил для параметра громкости значение 1.0f, чтобы обеспечить максимальный уровень усиления.