2010-06-23 9 views
8

tengo un problema con AVAudioRecorder y AVAudioPlayer.AVAudioRecorder & AVAudioPlayer - Salida de sonido en el altavoz interno, ¿cómo cambiar?

cuando uso Reproductor y Grabación al mismo tiempo (p. Ej., Para reproducir sonido mientras grabo) el sonido está en el altavoz interno silencioso. He buscado stackoverflow y todo lo que encontré fue este código:

UInt32 *audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

Pero esto no me ayuda :( Cuando i CopyPaste, lo tengo errores ¿Qué puedo hacer para grabar y reproducir el altavoz al. la parte inferior?

no consumo algo como SCLister oder algo ...

Gracias de antemano

Max

Respuesta

1

Lo único que he encontrado acerca de este tema es la siguiente:

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

que debe establecerse cuando se graba el audio si desea reproducir al mismo tiempo. Pruébalo y déjame saber.

P.S. Asegúrese de agregar los marcos AudioToolbox y AVFoundation a su proyecto e inclúyalos en sus archivos .m.

+1

Sí, esto es necesario, pero lo tengo. Sin cambios :( La función en sí está bien, puede sonar el micrófono y escuchar el sonido, pero solo con el altavoz interno. –

16

Esto es un poco antiguo, pero esta publicación me ayudó y quería actualizarla para cualquier otra persona que pueda necesitarla en el futuro. El código publicado en la parte superior es correcto: tomará el audio silencioso que se está reproduciendo a través del altavoz del teléfono y lo dirigirá al altavoz en la parte inferior. Hay un pequeño error tipográfico en el código, y es por eso que está dando errores. Aquí está el fragmento correcto, que va a resolver este problema:

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

Asegúrese de que también activa la sesión de audio justo después de este ajuste, antes de crear el audio reproductor/grabador:

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

pasado, si Tocará y grabará al mismo tiempo, probablemente también deba configurar la categoría y las funciones de mezcla. Aquí está el fragmento completo que establecerá la categoría, permitirá la mezcla, enrutará el audio al hablante principal y activará la sesión. Querrá hacer esto solo una vez después de que se inicie la aplicación.

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

OSStatus propertySetError = 0; 
UInt32 allowMixing = true; 
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); 

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

NSLog(@"Mixing: %x", propertySetError); // This should be 0 or there was an issue somewhere 

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

Espero que ayude a alguien!

+0

por cierto, debe ser 'error: NULL' no' error: nil' – user102008

+2

Hay bastante código de muestra de Apple que muestra el error: nulo y error: NULO por lo que parece ser aceptable para usar. Sin duda no causará ningún problema. –

+0

gracias amigo Me ayudó mucho ...! – Warewolf

0

Si estás reproduciendo a través de los altavoces tranquilas, y quiere jugar a través del altavoz ruidoso en la parte inferior del iPhone, utilice este código:

UInt32 doChangeDefaultRoute = 1; 

AudioSessionSetProperty (
         kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, 
         sizeof (doChangeDefaultRoute), 
         &doChangeDefaultRoute 
         ); 
0

Esto es cuestión de edad, pero ninguno de los otras respuestas me ayudaron ... Sin embargo, encontré una solución que estoy publicando para referencia futura en caso de que alguien lo necesite.

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.Ahora en el archivo corrseponding .m añadir las siguientes líneas dentro viewDidLoad método:

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

Ahora usted tienen audio (por ejemplo AVAudioPlayer) salida forzada al altavoz!

0

AudioSessionSetProperty está en desuso desde iOS7, pero el siguiente funcionó para mí.

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; 
2

me respondió desde aquí ya: How to get AVAudioPlayer output to the speaker

En resumen, use esto antes de la grabación:

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

... y utilizar esto antes de la reproducción (en altavoces o auriculares si están enchufado)

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

¡Eres el hombre! – CSawy

Cuestiones relacionadas