Как переключаться между динамиком и наушниками в приложении iPhone - PullRequest
4 голосов
/ 18 апреля 2010

Я написал приложение, которое воспроизводит звук с помощью AVAudioPlayer.

Я реализовал функцию, которая переключает звук на динамик:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);    
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

Но когда я пытаюсь переключить его обратно в наушники, используя это:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);    
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

он остается направленным через динамик.

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

Ответы [ 2 ]

4 голосов
/ 11 июня 2010

В соответствии с документацией Apple , переопределение маршрута Audio Session доступно только при использовании категории kAudioSessionCategory_PlayAndRecord.

Вы можете попробовать изменить категорию на kAudioSessionCategory_PlayAndRecord и использовать ключ свойства kAudioSessionProperty_OverrideCategoryDefaultToSpeaker для направления звука на динамик.

0 голосов
/ 28 мая 2013

Как сказал Лоран, попробуйте использовать PlayAndRecord следующим образом:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);

Очень важно использовать AVAudioSessionCategoryPlayAndRecord, иначе маршрут не дойдет до динамика. После того, как вы установили маршрут переопределения для аудио сеанса, вы можете использовать экземпляр AVAudioPlayer и отправить некоторый вывод на динамик.

Надеюсь, что это работает для других, как и для меня. Документация по этому вопросу разбросана, но приложение Skype доказывает, что это возможно. Продолжай, друзья мои! :)

Некоторая документация Apple здесь: http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html

Выполнить поиск на странице для kAudioSessionProperty_OverrideAudioRoute

...