我希望像 iOS 语音备忘录应用程序一样在屏幕上渲染音频波形,因此我使用 AVAudioEngine 并在输入节点上安装 Tap。但它以 0.1 秒的频率提供最快的回调,我需要以更快的频率获取缓冲区数据,以便可以在屏幕上绘制越来越多的波形,以实现平滑和实时的可视化。
您能否建议更好的方法?
let inputNode = self.audioEngine!.inputNode
let format = inputNode.inputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 4096, format: format) { [self] (buffer, time) in
processAudioData(buffer: buffer)
DispatchQueue.main.async {
audioPlotView.setNeedsDisplay(). // Render waveform on screen
}
}
我认为你误解了如何处理这个问题。您不应该以高频率获取非常少量的新数据,而应该分解代码以在较长的时间间隔内获取更大的数据块。
然后,您可以设置显示代码来启动动画,以便在给定的时间间隔内以新数据的图表形式呈现动画。对于动画来说,1/10 秒实际上是一个非常短的时间间隔。
我建议对 1/10 秒时间间隔的数据幅度进行平均,并将新的平均数据动画到位。
顺便说一句,请参阅更新我发布了您问题的答案 https://stackoverflow.com/a/67660646/205185关于创建数据的动画图表。
我想出的动画看起来像这样:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)