Я работаю над VoIP-приложением, которое использует MPVolumeView, чтобы пользователь мог настроить громкость системы. Все это отлично работало и денди, пока вышел iOS 9.1. Затем я обнаружил, что если бы я установил AVAudioSession
в режим AVAudioSessionModeVoiceChat
, то слот MPVolumeView
сломался. (Это ползунок больше не регулирует громкость системы.) Если бы я изменил режим на AvAudioSessionModeDefault
, то MPVolumeView
работал бы так, как ожидалось, но я микрофон записывал звук, поступающий из динамика iPad. (Другими словами, голосовая обработка была отключена - что мне нужно для VoIP-звонков.) Предыдущий в iOS 9.1 Я мог установить режим AudioSession на AVAudioSessionModeDefault
, а затем в AudioComponentDescription установить componentSubType на kAudioUnitSubType_VoiceProcessingIO
, и все работает нормально. К сожалению, это уже не так. Кто-нибудь знает, как сохранить голосовую обработку и работать MPVolumeView после iOS 9.1?Переходы iOS MPVolumeView на основе режима AudioSession
Вот код, где я поставил AVAudioSession:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
// Make sure the session on this thread matches.
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionAllowBluetooth error:nil];
// Here is the main connundrum: I want to set AVAudioSessionModeDefault so that the MPVolumeView will work,
// but when I do that the mic picks up the audio from the speaker and plays it back creating an unwanted feeback loop.
// If I set the mode to AVAudioSessionModeVoiceChat the voice processing (primarily the AEC) fixes the feeback loop,
// but then the MPVolumeView no longers works. (It no longer adjusts the system volume.
//Question: How can I have BOTH the voice processing AND the MPVolumeView adjust the system volume?
if(!appDelegate.viewController.voiceChatMode)
[audioSession setMode:AVAudioSessionModeDefault error:nil];
else
[audioSession setMode:AVAudioSessionModeVoiceChat error:nil];
[audioSession setPreferredIOBufferDuration:0.005 error:nil];
[audioSession setActive:YES error:nil];
Код в вашем вопросе отлично работает на iOS 9.2 («MPVolumeView» включен, когда установлен режим «AVAudioSessionModeVoiceChat»). Должна ли быть активная запись для воспроизведения проблемы? –
Возможно. В моем примере проекта я записываю звук и воспроизвожу его обратно, но это также проблема, когда у меня есть голос VoIP, записывающий голос и воспроизведение звука от другого пользователя. У вас есть пример этого? Я спрашиваю, потому что мой простой тест не сработал. – CaptionCallDev
Единственный пример, который у меня есть, - это то, что у вас есть в приведенном выше фрагменте кода, извините. –