2010-03-03 11 views
13

Sto tentando di trasmettere l'audio all'auricolare Bluetooth (non A2DP) utilizzando AVAudioPlayer, AVAudioSession e AudioSessionSetProperty.come indirizzare l'audio dell'iPhone all'auricolare bluetooth

Sembra che ci siano funzioni per selezionare l'auricolare Bluetooth come input (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput), ma non equivalente per l'impostazione dell'output. Questo viene fatto nell'app Voicemail, dove è possibile selezionare l'auricolare, l'altoparlante del microtelefono o l'altoparlante. Ho provato varie combinazioni di SessionCategories e le proprietà AudioSession, ma non riesco a trovare un approccio che funzioni.

Sono sicuro che qualcuno ha capito questo, cura di condividere un esempio?

+0

Sembra che nessuno abbia risolto questo (beh, nessuno sta parlando almeno finora!) Ho aperto un ticket di supporto Apple su questo argomento e posterò una risposta quando ne avrò uno. – Ethan

+0

hai qualche risposta? – Krishnan

+0

Sì, l'ho fatto. Per parafrasare, "no, non puoi farlo". Non penso che l'ingegnere abbia davvero capito cosa stavo chiedendo, perché ero in grado di realizzarlo. Vedrò se posso postare le parti pertinenti come risposta. – Ethan

risposta

16

Questo piccolo test ha funzionato per me ... riguarda anche la configurazione dell'auricolare Bluetooth come input (non è sicuro se è ciò che si desidera). Mi dispiace per la formattazione di merda sul codice ...

// 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 

Spero che ti aiuti!

+0

Sembra che anche il codice sia finito, mi spiace di non essere venuto qui e di segnalarlo prima;) – Ethan

+0

"quella documentazione è sbagliata. Interessa sia l'input che l'output." dalla mailing list coreaudio di apple (http://lists.apple.com/archives/coreaudio-api/2009/Oct/msg00030.html) – mtoy

+2

AudioSessionSetProperty è obsoleto da iOS7. Come sarebbe questo senza utilizzare AudioSessionSetProperty? –

6

Sono riuscito a farlo funzionare, ma ci sono volute alcune attività. Ho messo insieme il pezzo proveniente da qui il codice:

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err]; 

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

E 'anche possibile per i quali sono disponibili fonti e passare da Bluetooth, un auricolare, ricevitore o il vivavoce, ma le cose diventano molto coinvolti in quel punto. Il gestore della sorgente audio che alla fine scrissi era di oltre 700 linee.

+5

Sono molto interessato a vedere come passare tra le fonti disponibili che sono disponibili, pensi di poter rendere pubblico quel codice o aggiungere alcune informazioni al tuo profilo dove posso contattarti? –

+0

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

+0

Questo ha funzionato. – user523234

Problemi correlati