Cómo cambiar entre parlantes y auriculares en la aplicación de iPhone

He escrito una aplicación que reproduce audio usando AVAudioPlayer.

He implementado una function que cambia el audio al altavoz:

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

Pero cuando bash cambiarlo a los auriculares usando esto:

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

permanece enrutado a través del hablante.

No puedo encontrar otra forma de dirigir el audio. ¿Alguien puede sugerir que estoy haciendo mal?

De acuerdo con la documentation de Apple , la anulación de ruta de session de audio solo está disponible cuando se usa la categoría kAudioSessionCategory_PlayAndRecord .

Puede intentar cambiar la categoría a kAudioSessionCategory_PlayAndRecord y usar la key de propiedad kAudioSessionProperty_OverrideCategoryDefaultToSpeaker para enrutar el audio al altavoz.

Como dijo Laurent, intenta usar PlayAndRecord así:

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

Es muy importante usar AVAudioSessionCategoryPlayAndRecord o la ruta no pasará al altavoz. Una vez que haya establecido la ruta de anulación para la session de audio, puede usar una instancia de AVAudioPlayer y enviar cierta salida al altavoz.

Espero que funcione para otros como lo hizo para mí. La documentation sobre esto está dispersa, pero la aplicación de Skype demuestra que es posible. ¡Persevera, amigos míos! 🙂

Algunos documentos de Apple aquí: http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html

Realice una búsqueda en la página para kAudioSessionProperty_OverrideAudioRoute