我希望在屏幕上呈现音频波形,如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
}
}
发布于 2021-05-26 13:13:52
我想你误解了如何处理这件事。与其以较高的频率获取极少量的新数据,不如对代码进行调整,以便在更长的时间间隔内获得更大的数据块。
然后,您可以设置显示代码,以启动动画,在给定的时间间隔内在新数据的图表中动画。1/10秒实际上是一个动画的很短的时间间隔。
我建议在第二个时间间隔的十分之一的时间内,平均数据的振幅,并将新的平均数据放在适当的位置。
顺便说一句,请参阅关于创建数据的动画图的update I posted to the answer to your question。
我想出的动画是这样的:
https://stackoverflow.com/questions/67661093
复制相似问题