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!
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. –