【发布时间】:2020-03-24 22:57:21
【问题描述】:
我正在使用 swift 的 AVFoundation 框架来播放一些音频。我创建了一个 AVAudioSourceNode,它将传递一些要播放的样本。
let srcNode = AVAudioSourceNode { _, timeStamp, frameCount, AudioBufferList -> OSStatus in
let ablPointer = UnsafeMutableAudioBufferListPointer(AudioBufferList)
}
然后我将它附加到音频引擎。并将其连接到混音器。
engine.attach(srcNode)
engine.connect(srcNode, to: engine.mainMixerNode, format: srcNode.inputFormat(forBus:0))
如果我启动引擎,就会播放音频。然而,当我深入研究,并通过打印格式来探测这个 SourceNode 的格式时,sampleRate 是 44,100。我的音频硬件的采样率为 48,000。
我想不通的是,如果我有一个预先生成的样本数组,以 48kHz 播放。 sourceNode 将以 44.1kHz 的速度读取它,然后引擎会将其转换为 48kHz 以在我的硬件上播放,这意味着实际播放的音频比预期的原始音频要长。
我如何才能真正指定此 AVAudioSourceNode 的格式,以便它以相同的速率工作? (同样,虽然我可以更改 engine.connect 调用中的格式,但这只会更改连接格式,而不是 sourceNode 运行的速率。
【问题讨论】:
标签: swift audio avfoundation core-audio