从 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 麦克风录制音频的主要内容,如果未能解决你的问题,请参考以下文章

录制和播放从麦克风录制的音频流

无法在 Qt 中将音频从麦克风录制到 QFile

如何在 Delphi 中使用 TMediaPlayer 从麦克风输入中录制音频?

如何录制网络/浏览器音频输出(不是麦克风音频)

如何使用openAL将实时音频输入从麦克风录制到文件中? (里面有C++代码)

使用麦克风录制时,SDL 音频捕获未检测到任何音频