2017-10-06 10 views
0

Ich sehe die Frage bereits hier gefragt:AVAudioRecorder/AVAudioSession mit Apple Airpods

AirPods not working as an input source for Voice Recorder App

Ich habe mit diesem Thread eincheckten, aber keine Antwort.

Aber weiß jemand, ob/warum AVAudioRecorder die AirPods möglicherweise nicht als Eingabegerät für die Aufnahme von Audio in einer App verwenden kann? Ich habe Audio-Aufnahme funktioniert durch die eingebauten Mikrofone sowie mit anderen BT-Geräten (Beats, billige BT-Lautsprecher-Sache, etc.) aber bei der Arbeit mit den AirPods kann ich das Audio nicht erfassen.

Zusätzlich, wenn ich aufzeichnen möchte, durchlaufe ich die verfügbaren Eingänge und zwinge den Eingang zum BT-Gerät (siehe Code unten) in diesem Fall die AirPods. Auch hier funktioniert es für alle anderen BT-Geräte außer den AirPods.

Gedanken? Jede Anleitung, was wir hier falsch machen, wäre großartig. Das war ärgerlich.

NSError *error; 
AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryRecord withOptions:audioSession.categoryOptions|AVAudioSessionCategoryOptionAllowBluetooth 
        error:&error]; 
[audioSession setActive:YES error:nil]; 

NSLog(@"Data sources: %@", [audioSession availableInputs]); 
// Data sources: ("<AVAudioSessionPortDescription: 0x1706071b0, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Bottom>", 
"<AVAudioSessionPortDescription: 0x170611bd0, type = BluetoothHFP; name = Dan\U2019s AirPods; UID = 50:32:37:E0:90:37-tsco; selectedDataSource = (null)>"  

for (AVAudioSessionPortDescription *desc in [audioSession availableInputs]){ 
    NSLog(@"Port desc: %@", desc.portType); 
    // Loop: 1) Port desc: MicrophoneBuiltIn 
    //  2) Port desc: BluetoothHFP 

    if (desc.portType == AVAudioSessionPortBluetoothHFP) { 
     NSLog(@"Trying to change preferred input"); 
     NSError *error; 
     BOOL didSet = [audioSession setPreferredInput:desc error:&error]; 
     NSString *didSetString = didSet ? @"True" : @"False"; 
     NSLog(@"Post change preferred input: %@, error: %@", didSetString, error); 
     // Post change preferred input: True, error: (null) 
    } 
} 

Antwort

1

Das Problem, das wir hatten, hatte mit der Kategorie zu tun, die eingestellt wurde. Aufgrund von Problemen, die wir mit verschiedenen Bluetooth-Ausgabegeräten hatten, haben wir die Audiokategorie auf AVAudioSessionCategoryPlayback eingestellt und beibehalten, außer wenn wir zur Aufnahme bereit sind.

Per diesem Stapel Post: AVAudioSession: Some Bluetooth devices are not working properly on my App

In dem obigen Code wechseln wir die Kategorie über AVAudioSessionCategoryRecord bevor wir über zu Rekord sind. Während dies für die eingebauten Mikrofone und andere Bluetooth-Geräte funktioniert, hat es mit AirPods nicht funktioniert. Wenn Sie die Kategorie auf AVAudioSessionCategoryPlayAndRecord einstellen, kann die Aufzeichnung mit den AirPods arbeiten.

Ich habe dann immer noch eine reine Wiedergabe-Kategorie für die Sitzung in der App für die Audiowiedergabe. Wechseln Sie nur zu PlayAndRecord, wenn Sie Audio aufnehmen möchten.

Als Randnotiz: Apple listet die AirPods nicht als MFi-Gerät auf. https://mfi.apple.com/MFiWeb/getFAQ.action#1-1

0

Ich denke AirPods MFI sind (Made for iPhone) Zubehör, das bedeutet, dass die Bluetooth-Kommunikation geht durch ExternalAccessory Rahmen https://developer.apple.com/documentation/externalaccessory

Hier Apfel Demo: https://developer.apple.com/library/content/samplecode/EADemo/Introduction/Intro.html

Tipp: Protokollname gesetzt werden müssen in Info.plist in UISupportedExternalAccessoryProtocols Schlüssel

Weitere Details: https://mfi.apple.com/MFiWeb/getFAQ.action

+0

Danke. Ich werde das durchsehen und sehen, ob es hilft. – djneely