gpt4 book ai didi

AVCaptureSession 和蓝牙麦克风

转载 作者:行者123 更新时间:2023-12-04 07:22:11 27 4
gpt4 key购买 nike

我正在开发一个视频录制应用程序,需要能够使用蓝牙麦克风作为音频输入(如果已连接)。

我有以下代码来配置 AVCaptureSession 的音频输入:

self.captureSession.usesApplicationAudioSession = YES;
self.captureSession.automaticallyConfiguresApplicationAudioSession = NO;

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:nil];

self.microphone = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
audioInput = [AVCaptureDeviceInput deviceInputWithDevice:self.microphone error:&error];

if ([self.captureSession canAddInput:audioInput])
{
[self.captureSession addInput:audioInput];
}

问题是,蓝牙麦克风永远不会显示为可用的捕获设备(尽管它已正确配对)。打印出 [AVCaptureDevice devices] 结果:

enter image description here

所以,无论我做什么,音频总是来自 iPad 的内置麦克风。

最佳答案

我也在 SFSpeechRecognizer 的上下文中遇到了这个问题.我想从蓝牙麦克风录制音频并将其转换为文本。首先,我在 AVAudioSession 中切换了输入:

// Activate bluetooth devices for recording
try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryRecord, with: [.allowBluetooth])
try? AVAudioSession.sharedInstance().setActive(true)

// Configure a bluetooth device for recording if available
let bluetoothRoutes = [AVAudioSessionPortBluetoothHFP]
let availableInputs = AVAudioSession.sharedInstance().availableInputs
if let bluetoothInput = (availableInputs?.filter{ bluetoothRoutes.contains($0.portType) })?.first {
try? AVAudioSession.sharedInstance().setPreferredInput(bluetoothInput)
}

但即使设置了 AVCaptureSession 的 automaticallyConfiguresApplicationAudioSession属性为假, AVCaptureDevice.devices()只向我展示了内置麦克风,并没有从蓝牙录制任何音频。

我最终更换了 AVCaptureDeviceAVAudioRecorder ,这确实尊重路线变化。现在我可以将音频录制到一个临时文件中,然后将其传递给 SFSpeechRecognizer .

关于AVCaptureSession 和蓝牙麦克风,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30021667/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com