Хорошо, у меня есть AVAudioSession, определенный следующим образом (да, соединение вызовов c и obj-c) Также обратите внимание, что приложение имеет фоновый режим звука, потому что если запись должна продолжаться до сделать это в то время как приложение работает в фоновом режиме:Коммутационный выход AVAudioSession/Audio Session
[(AVAudioSession *)[AVAudioSession sharedInstance] setDelegate: self];
// Allow the app sound to continue to play when the screen is locked.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
//Turn off automatic gain on the microphone
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeMeasurement error:nil];
//Turn on the ability to mix with others
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
//Activate the audio session
[[AVAudioSession sharedInstance] setActive:YES error:nil];
приложение имеет несколько различных вариантов для аудио (только первые два были запрограммированы):
- Normal: нет звука из приложения, так что не 't беспорядок с внешним звуком
- Только запись микрофона гарнитуры: не должна иметь регулировки усиления, а не испортить внешний звук (который будет воспроизводиться через гарнитуру)
- Воспроизведение музыки из приложения без записи: Остановка снаружи аудио и воспроизведение через ток выход (динамик или гарнитура)
- Воспроизведение музыки с в приложении и записывать гарнитуру микрофон: Стоп внешний аудио, запись и воспроизведение только через гарнитуру
запись хорошо работает на переднем и заднем плане, и я добавлю игра позже. Тем не менее, я просто заметил сегодня, что если звук уже воспроизводится (Pandora) на громкоговорителе, и я заходил в свое приложение и активировал режим записи, он переключает Pandora на воспроизведение через динамик телефона и даже после того, как аудиозапись отключена, и приложение основано (но не принудительно закрыто), звук продолжает воспроизводиться через динамик телефона, пока я не закрою приложение.
//Deactivate the audio session
[[AVAudioSession sharedInstance] setActive:NO error:nil];
С другой стороны, если гарнитура находится в, и музыка играет через наушники, когда приложение запускается в режиме записи, то есть только короткая пауза, и музыка продолжает играть в то же объем (правильно, без уклонения).
Я не вижу причин, по которым маршрут должен меняться, когда я активирую аудио сессию без гарнитуры и почему она не меняется, когда сеанс деактивирован. Особенно это касается телефона! Есть ли что-то, что я делаю неправильно, или мне просто нужно определить AVAudioSession по-разному в зависимости от того, что пользователь хочет делать (вместо воспроизведения в одежде + записи и измерения режима)? И даже если мне нужно определить его отдельно для разных вариантов использования. Например, звук всегда будет проходить через гарнитуру, если приложение будет записывать, и если приложение не записывается, тогда аудиосигнал выводит либо минигарнитуру, либо громкоговоритель (в зависимости от того, подключен ли пользователь к минигарнитуре или нет - т.е. нормальное поведение).
Дополнительные детали
Хорошо, я попытался переключения весь код с и заметил записку похоронена в Документов о kAudioSessionProperty_OverrideAudioRoute
kAudioSessionOverrideAudioRoute_None
Задает для категории kAudioSessionCategory_PlayAndRecord, что выход аудио должен идти в приемник. Это выходной аудиовыход по умолчанию для этой категории.
Итак, я попытался установить это свойство (эти свойства) в 3 различными способами:
- kAudioSessionProperty_OverrideAudioRoute с kAudioSessionOverrideAudioRoute_Speaker продолжает играть аудио, но переключает его через приемник, и показывает маршрут как ReceiverAndMicrophone
- kAudioSessionProperty_OverrideCategoryDefaultToSpeaker с kAudioSessionOverrideAudioRoute_Speaker останавливает текущий воспроизводимый звук, и показывает маршрут как SpeakerAndMicrophone
- kAud ioSessionProperty_OverrideCategoryDefaultToSpeaker со значением 1 делает то же самое, как kAudioSessionOverrideAudioRoute_Speaker
Так в основном документы говорят о том, что по умолчанию для переключения на приемник. Однако, независимо от того, что я делаю, я не могу сохранить выход Speaker и поддерживать внешний звук.
Привет ... У вас есть решение? Я столкнулся с такой же проблемой. –