sonido solo puedo poner llaman escucha desactivado cuando auriculares altavoz activar activa iphone objective-c audio avaudioplayer avaudiorecorder

puedo - se activa el altavoz solo iphone



Cómo obtener la salida de AVAudioPlayer para el altavoz (8)

De http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/12890-audiosessionsetproperty-problem-playing-sound-listening-mic.html -

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

Estoy grabando audio con AVAudioRecorder como se ve en ¿Cómo grabo audio en el iPhone con AVAudioRecorder?

Luego uso AVAudioPlayer para reproducir la grabación. Sin embargo, el sonido está saliendo del parlante, no del parlante. ¿Cómo podría redirigir el sonido al altavoz?

TIA!


Esta es una vieja pregunta, pero la otra respuesta no me ayudó ... Sin embargo, encontré una solución que estoy publicando para referencia futura en caso de que alguien (o yo mismo del futuro!) Lo necesite.

La solución se describe en la siguiente publicación de blog: iOS: fuerza la salida de audio a los altavoces mientras los auriculares están enchufados .

Necesita crear un nuevo AudioRouter de la clase Objective-C en su proyecto. A continuación, importe AudioRouter.h en el archivo de encabezado de la clase en la que está iniciando la funcionalidad de audio. A continuación, en el archivo .m correspondiente, agregue las siguientes líneas dentro del método viewDidLoad :

AudioRouter *foobar = [[AudioRouter alloc] init]; [foobar initAudioSessionRouting]; [foobar forceOutputToBuiltInSpeakers];

¡Ahora tiene salida de audio (por ejemplo, AVAudioPlayer) forzada a altavoz! Tenga en cuenta que si conecta auriculares mientras la aplicación está funcionando, toda la salida de audio se dirige a los auriculares.


Esto funciona muy bien para mí en Swift2

let session = AVAudioSession.sharedInstance() try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker)


Me doy cuenta de que esta pregunta es bastante antigua, pero cuando estaba luchando con el mismo problema, encontré una solución simple que, con suerte, ayudará a cualquier persona que quiera utilizar los altavoces de medios más fuertes en lugar de los altavoces del receptor. El método que utilicé fue configurar la sesión de audio con la opción DefaultToSpeaker en AVAudioSessionCategoryOptions:

En Swift (suponiendo que su sesión de audio se llame session ) -

session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker, error: nil)

En Obj-C -

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: nil];


Respuesta para Swift 4.0

func SetSessionPlayerOn() { do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord) } catch _ { } do { try AVAudioSession.sharedInstance().setActive(true) } catch _ { } do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) } catch _ { } } func SetSessionPlayerOff() { do { try AVAudioSession.sharedInstance().setActive(false) } catch _ { } }


Swift 3

Antes de grabar el sonido que configuro:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)

y antes de la reproducción configuré:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

C objetivo

antes de grabar:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryRecord error:nil];

antes de la reproducción:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];


Swift 3

let audioSession = AVAudioSession.sharedInstance() do { try audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) } catch let error as NSError { print("Audio Session error: /(error.localizedDescription)") }


Swift2:

try session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker)