【发布时间】:2020-03-24 18:41:08
【问题描述】:
我已将AVAudioSinkNode 配置为附加到AVAudioEngine 的inputNode,如下所示:
let sinkNode = AVAudioSinkNode() { (timestamp, frames, audioBufferList) -> OSStatus in
print("SINK: \(timestamp.pointee.mHostTime) - \(frames) - \(audioBufferList.pointee.mNumberBuffers)")
return noErr
}
audioEngine.attach(sinkNode)
audioEngine.connect(audioEngine.inputNode, to: sinkNode, format: nil)
audioEngine.prepare()
do {
try audioEngine.start()
print("AudioEngine started.")
} catch {
print("AudioEngine did not start!")
}
我已将其单独配置为使用“内置麦克风”设备(我确信它确实使用)。
如果我为麦克风设置采样率 44100(使用 Apple 在所有 Mac 上提供的“音频 MIDI 设置”应用程序),一切都会按预期工作:
AudioEngine started.
SINK: 692312319180567 - 512 - 2
SINK: 692312348024104 - 512 - 2
SINK: 692312359634082 - 512 - 2
SINK: 692312371244059 - 512 - 2
SINK: 692312382854036 - 512 - 2
...
但是,如果我使用“音频 MIDI 设置”应用程序(Apple 在所有 Mac 上提供),并将麦克风的采样率更改为 44100 以外的任何值(比如 48000),则接收节点似乎什么也没做(不打印任何内容)。
当然,最初我试图以编程方式修改麦克风的采样率。但后来我发现,当我通过标准的“音频 MIDI 设置”应用程序更改设备采样率时,也会发生同样的情况。因此,我用于设置采样率的代码无需在此处发布。
有谁知道AVAudioSinkNode 是否允许将采样率硬编码到其中?
我找不到任何其他解释...
【问题讨论】:
标签: swift core-audio avaudioengine