如何从iOS设备获取硬件sampleRate?

时间:2018-06-06 04:03:24

标签: ios swift avaudioengine

在我的应用程序中,我使用AVAudioEngine进行语音识别,但我很难理解如何正确设置inputNode。

我使用本教程作为我的代码示例:https://www.raywenderlich.com/155752/speech-recognition-tutorial-ios

这部分代码令我头疼:

let node = audioEngine.inputNode
let recordingFormat = node.outputFormat(forBus: 0)

node.installTap(onBus: 0, bufferSize: 1024,
                format: recordingFormat) { [unowned self]
  (buffer, _) in
  self.request.append(buffer)
}

audioEngine.prepare()
try audioEngine.start()

基本上,我的应用程序因此错误而崩溃:

AVAEInternal.h:70:_AVAE_Check: required condition is false: [AVAudioIONodeImpl.mm:897:SetOutputFormat:
(format.sampleRate == hwFormat.sampleRate)]

所以我的问题是,如何从运行应用程序的设备上获取硬件sampleRate,以便将其设置为节点的录制格式?

此外,如果正在通过mac录制正在运行的应用程序或通过Apple TV进行屏幕分享,我认为我需要获取这些设备的hw sampleRate,以便我的应用程序在这些情况下也不会崩溃?!

非常感谢任何形式的帮助!

1 个答案:

答案 0 :(得分:2)

从AVAudioSession获取硬件采样率。

let sampleRate = AVAudioSession.sharedInstance().sampleRate

但这可能更适合您的具体案例。

let sampleRate = node.inputFormat(forBus: 0).sampleRate