Небольшая предыстория:
Я работаю над приложением для iOS, которое выполняет аудиозапись и использует категорию аудиосеансов AVAudioSessionCategoryPlayAndRecord
.Приложение также воспроизводит звуковые эффекты, которые я хочу воспроизводить через основной динамик устройства (пока пользователь не записывает).Чтобы остановить вывод звука при воспроизведении через основные динамики во время записи, я использую следующий фрагмент кода:
UInt32 defaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
sizeof (defaultRoute),
&defaultRoute);
Когда пользователь начинает запись, я снова запускаю тот же код с defaultRoute
из 0
, чтоприводит к тому, что выводимый звук перестает воспроизводиться через динамики и поэтому не включается в запись.Этот метод отлично работает на iPhone.
Проблема:
Когда я запускаю тот же код на iPod Touch (4-го поколения), kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
собственность, кажется, не имеет никакого влияния.В результате, когда пользователь записывает звук на iPod Touch, звуковые эффекты будут воспроизводиться через динамик и включаться в запись.
Кто-нибудь знает, почему это происходит, или как это исправить?Я хочу, чтобы поведение на iPod Touch соответствовало поведению на iPhone: вывод звука не воспроизводится через основные динамики во время записи.
Примечание:
Наиболее близким решением, которое я получил, является обнаружение, является ли устройство iPod Touch, и, если это так, отключение звука системы при записи начинается с использованием следующего фрагмента кода:
[MPMusicPlayerController iPodMusicPlayer].volume = 0.0;
Это не было желательным решением, посколькукогда этот код выполняется, всплывающее окно с наложением тома показывает, что громкость выключена.Это добавляет путаницу к пользовательскому интерфейсу и не является достаточно хорошим решением.
Любая помощь будет оценена!