2010-03-03 23 views
13

Estoy intentando emitir audio a los auriculares bluetooth (no A2DP) usando AVAudioPlayer, AVAudioSession y AudioSessionSetProperty.cómo pasar el audio del iPhone a los auriculares bluetooth

Parece que hay funciones para seleccionar el auricular bluetooth como entrada (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput), pero no hay un equivalente para establecer la salida. Esto se hace en la aplicación Correo de voz, donde puede seleccionar el auricular, el auricular o el altavoz. He intentado varias combinaciones de SessionCategories y las propiedades de AudioSession, pero parece que no puedo encontrar un enfoque que funcione.

Estoy seguro de que alguien ha descubierto esto, ¿te importa compartir un ejemplo?

+0

Parece que nadie ha resuelto este (bueno, ¡nadie que hable hasta ahora al menos!) He abierto un ticket de soporte de Apple sobre este tema y publicaré una respuesta cuando tenga uno. – Ethan

+0

¿Tiene alguna respuesta? – Krishnan

+0

Sí, lo hice. Parafraseando, "no, no puedes hacer eso". No creo que el ingeniero entendiera realmente lo que estaba pidiendo, porque pude lograrlo. Veré si puedo publicar las partes pertinentes como respuesta. – Ethan

Respuesta

16

Esta pequeña prueba funcionó para mí ... implica la configuración de los auriculares bluetooth como entrada también (no estoy seguro de si eso es lo que quiere). Lo siento sobre el formato de mierda en el código ...

// create and set up the audio session 
AVAudioSession* audioSession = [AVAudioSession sharedInstance]; 
[audioSession setDelegate:self]; 
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; 
[audioSession setActive: YES error: nil]; 

// set up for bluetooth microphone input 
UInt32 allowBluetoothInput = 1; 
OSStatus stat = AudioSessionSetProperty (
         kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 
         sizeof (allowBluetoothInput), 
         &allowBluetoothInput 
         ); 
NSLog(@"status = %x", stat); // problem if this is not zero 

// check the audio route 
UInt32 size = sizeof(CFStringRef); 
CFStringRef route; 
OSStatus result = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &route); 
NSLog(@"route = %@", route);  
// if bluetooth headset connected, should be "HeadsetBT" 
// if not connected, will be "ReceiverAndMicrophone" 

// now, play a quick sound we put in the bundle (bomb.wav) 
CFBundleRef mainBundle = CFBundleGetMainBundle(); 
CFURLRef  soundFileURLRef; 
SystemSoundID soundFileObject; 
soundFileURLRef = CFBundleCopyResourceURL (mainBundle,CFSTR ("bomb"),CFSTR ("wav"),NULL); 
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject); 
AudioServicesPlaySystemSound (soundFileObject);  // should play into headset 

Espero que ayude!

+0

Esto se ve como el código que terminé también, lo siento, no vine aquí y lo marqué antes;) – Ethan

+0

"esa documentación es incorrecta. Afecta tanto a la entrada como a la salida". de la lista de correo de apple coreaudio (http://lists.apple.com/archives/coreaudio-api/2009/Oct/msg00030.html) – mtoy

+2

AudioSessionSetProperty está en desuso desde iOS7. ¿Cómo sería esto sin usar AudioSessionSetProperty? –

6

Pude hacer que funcionara, pero me llevó algo de trabajo. He monté la pieza referida al código aquí:

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err]; 

UInt32 allowBluetoothInput = 1; 
AudioSessionSetProperty(
    kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 
    sizeof (allowBluetoothInput), 
    &allowBluetoothInput); 

También es posible, que las fuentes están disponibles y cambiar entre Bluetooth, un auricular, auricular o el altavoz, pero las cosas se vuelven muy involucrados en ese punto. El administrador de la fuente de audio que finalmente escribí tenía más de 700 líneas.

+5

Estoy muy interesado en ver cómo cambiar entre las fuentes disponibles que están disponibles, ¿cree que podría hacer público ese código o agregar alguna información a su perfil donde pueda contactarlo? –

+0

http://stackoverflow.com/questions/20393249/use-audio-unit-i-o-to-create-audio-on-the-fly – madLokesh

+0

Éste funcionó. – user523234

Cuestiones relacionadas