djn*_*ely 5 bluetooth objective-c ios avaudiosession
我看到这里已经问过一个问题:
我已经使用此线程签入,但没有响应。
但是,有谁知道AVAudioRecorder是否/为什么不能将AirPods用作在应用中录制音频的输入设备?我通过内置麦克风以及其他BT设备(节拍器,cheapo BT扬声器电话等)进行音频记录,但是使用AirPods时我无法捕获音频。
另外,当要记录时,我将遍历可用的输入,并在这种情况下将输入强制为BT设备(请参见下面的代码)。再次适用于除AirPods之外的所有其他BT设备。
有什么想法吗?关于我们在这里做错什么的任何指导都是很棒的。这真令人发疯。
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)
}
}
Run Code Online (Sandbox Code Playgroud)
证明了我们与所设置类别有关的问题。由于各种蓝牙输出设备的问题,我们准备将音频类别设置为并保持设置为AVAudioSessionCategoryPlayback除准备录制时以外的其他类别。
根据此堆栈文章:AVAudioSession:某些蓝牙设备在我的应用程序上无法正常工作
在上面的代码中,我们将类别切换到AVAudioSessionCategoryRecord要记录的位置。虽然此方法适用于内置麦克风和其他蓝牙设备,但不适用于AirPods。而是将类别设置为AVAudioSessionCategoryPlayAndRecord允许录制与AirPods一起使用。
然后,我仍然在整个应用程序的会话中维护“仅播放”类别,以进行音频播放。仅在要录制音频时切换到PlayAndRecord。
附带说明:Apple不会将AirPods列为MFi设备。 https://mfi.apple.com/MFiWeb/getFAQ.action#1-1
| 归档时间: |
|
| 查看次数: |
2995 次 |
| 最近记录: |