usar - ¿Cómo envío el audio al altavoz sin utilizar AudioSessionSetProperty?
usar celular como parlante por usb (3)
En cada versión de iOS, la mayoría de las propiedades de audioSession se migran a AVFoundation, por lo que debe usarlas de preferencia siempre que esté disponible.
Dado que iOS 6 kAudioSessionProperty_OverrideAudioRoute
está representado en AVAudioSession por el método
- (BOOL)overrideOutputAudioPort:error:
Los valores disponibles son AVAudioSessionPortOverrideNone
y AVAudioSessionPortOverrideSpeaker
Aquí hay una sesión de audio de ejemplo configurada completamente a través de AVFoundation:
- (void)configureAVAudioSession
{
// Get your app''s audioSession singleton object
AVAudioSession *session = [AVAudioSession sharedInstance];
// Error handling
BOOL success;
NSError *error;
// set the audioSession category.
// Needs to be Record or PlayAndRecord to use audioRouteOverride:
success = [session setCategory:AVAudioSessionCategoryPlayAndRecord
error:&error];
if (!success) {
NSLog(@"AVAudioSession error setting category:%@",error);
}
// Set the audioSession override
success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
if (!success) {
NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error);
}
// Activate the audio session
success = [session setActive:YES error:&error];
if (!success) {
NSLog(@"AVAudioSession error activating: %@",error);
}
else {
NSLog(@"AudioSession active");
}
}
ACTUALIZAR
Desde iOS 7.0, la API C de Audio Session Services ahora está totalmente obsoleta a favor de AVAudioSession.
ACTUALIZACIÓN 2
- (BOOL)overrideOutputAudioPort:error:
es un método, no una propiedad, y establece un valor subyacente solo de escritura UInt32. No puede obtener el valor actual, y debe tratar el método como establecer un estado temporal. Si la ruta de audio cambia o se interrumpe, la propiedad se restablece a su valor predeterminado ( AVAudioSessionPortOverrideNone
). Puede recibir notificaciones de interrupción a través de AVAudioSessionDelegate
.
Como AudioSessionSetProperty
puede quedar en deprecated
, estoy tratando de encontrar un ejemplo de código de cómo enrutar el audio al speaker
por otros medios.
Anteriormente, hice lo siguiente:
-(void)setSpeakerEnabled
{
debugLog(@"%s",__FUNCTION__);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideAudioRoute,
sizeof (audioRouteOverride),
&audioRouteOverride
);
}
Intentando obtener el mismo resultado pero without call
a AudioSessionSetProperty
.
La solución de Foundry junto con este blog de Mario Diana también me permitió actualizar el código de configuración de la sesión de audio obsoleto en iOS 7. Mi código anterior estaba basado en AudioBufferPlayer por Matthijs Hollemans . Recuerde agregar el marco AVFoundation.
NSError *error;
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
if(error)
{
NSLog(@"Error: AudioSession cannot use speakers");
}