2009-06-21 12 views

Respuesta

18

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

¿Esto funciona con AVAudioPlayer o sólo AudioServices? –

+5

Una nota para los demás que se encuentran con esta respuesta: las dos primeras líneas del código de muestra son irrelevantes y, si usted es como el OP (que también está grabando audio), estas líneas evitarán que la grabación funcione correctamente. – Steve

+1

Esto funcionó para mí con un ajuste: cambié sessionCategory para que fuera kAudioSessionCategory_PlayAndRecord. – Jacob

6

Ésta es una vieja pregunta, pero la otra respuesta no me ayudó a ... Sin embargo, he encontrado una solución que estoy publicando para referencia futura en caso de que alguien (o yo mismo desde el futuro!) lo necesita.

La solución se describe en la siguiente publicación de blog: iOS: Force audio output to speakers while headphones are plugged in.

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 correspondiente .m añadir las siguientes líneas dentro viewDidLoad método:

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

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

14

Swift 3

Antes de grabar el sonido que establece:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord) 

y antes de la reproducción puse:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) 

Objetivo C

b grabación ntes:

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

antes de la reproducción:

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

¡Esto es muy fácil y útil! ¡Gracias hombre! – CSawy

+0

Cambie la categoría solo si se ajusta a su caso de usuario. Para 'AVAudioSessionCategoryAmbient', apple dice" La categoría de una aplicación en la que la reproducción de sonido no es primaria, es decir, su aplicación puede utilizarse con éxito con el sonido desactivado. Esta categoría también es apropiada para aplicaciones de estilo "play along", como un piano virtual que un usuario reproduce mientras se reproduce la aplicación de Música. Cuando utiliza esta categoría, el audio de otras aplicaciones se mezcla con su audio. Su audio se silencia mediante el bloqueo de pantalla y mediante el interruptor de Silencio ". – KudoCC

26

realizo esta pregunta es bastante antiguo pero cuando yo estaba luchando con el mismo problema que encontré una solución simple que se espera ayude a una persona que quiere utilizar los altavoces de medios más fuertes a diferencia de los altavoces del receptor.El método que utiliza fue la creación de la sesión de audio con la opción DefaultToSpeaker en AVAudioSessionCategoryOptions:

En Swift (asumiendo que su sesión de audio se llama session) -

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

En Obj-C -

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

funcionó para mí. Gracias. –

+0

¡el bonito funciona como un encanto! – coolcool1994

6

Swift2:

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

Esto funciona muy bien para mí en Swift2

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

Swift 3

let audioSession = AVAudioSession.sharedInstance() 

    do { 
     try audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) 
    } catch let error as NSError { 
     print("Audio Session error: \(error.localizedDescription)") 
    } 
0
Answer For 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 _ { 
    } 
} 
Cuestiones relacionadas