2010-04-18 1 views
4

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

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

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); 

он остается проходить через динамик.

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

ответ

4

В соответствии с Apple's documentation, переопределение маршрута аудио сеанса доступно только при использовании категории kAudioSessionCategory_PlayAndRecord.

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

0

сказал, как Лоран, попробуйте использовать 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