从 AirPod 麦克风录制音频
Posted
技术标签:
【中文标题】从 AirPod 麦克风录制音频【英文标题】:Record audio from AirPod microphone 【发布时间】:2018-05-18 16:12:36 【问题描述】:我正在尝试录制和语音识别通过我的蓝牙 AirPods 麦克风传来的音频。
我尝试了所有找到的方法,但没有成功。我可以通过内置麦克风进行录音,但是一旦我将音频类别设置为蓝牙,它就会崩溃。
这是我的代码的当前版本:
askSpeechPermission()
var request = SFSpeechAudioBufferRecognitionRequest()
var listOfInputs = AVAudiosession.sharedInstance().availableInputs
do
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryRecord, mode: AVAudioSessionModeDefault, options: AVAudioSessionCategoryOptions.allowBluetooth)
catch
let node = audioEngine.inputNode
let recordingFormat = node.outputFormat(forBus: 0)
node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) buffer, _ in
self.request.append(buffer)
这就是导致的崩溃错误。
*** 由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“所需条件为 false:format.sampleRate == hwFormat.sampleRate”
【问题讨论】:
请添加 'func' 和你缺少的 '' .... 【参考方案1】:您是否尝试过检查您的采样率。要修改您的采样率,您可以使用
let fmt = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: 44100, channels: 1, interleaved: true)
然后你可以把它变成你的格式
node.installTap(onBus: 0, bufferSize: 1024, format: fmt) buffer, _ in
self.request.append(buffer)
【讨论】:
我尝试了你的建议,但它在 installTap 上不断崩溃,并出现同样的旧错误。【参考方案2】:我遇到了同样的问题,我解决了添加 BluetoothA2DP 选项:
audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:(AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetoothA2DP)
error:nil];
【讨论】:
【参考方案3】:按照 Osman 的建议,我可以通过将采样率设置为 AudioSession 采样率来解决问题
let sampleRate = AVAudioSession.sharedInstance().sampleRate
let fmt = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: sampleRate, channels: 1, interleaved: true)
node.installTap(onBus: 0, bufferSize: 1024, format: fmt) buffer, _ in
self.request.append(buffer)
希望对大家有所帮助~
【讨论】:
以上是关于从 AirPod 麦克风录制音频的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Delphi 中使用 TMediaPlayer 从麦克风输入中录制音频?