如何从AVAudioEngine的installTap高频获取buffer

how to get buffer from AVAudioEngine's installTap at high frequency

我希望在屏幕上呈现音频波形,例如 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 秒时间间隔的数据幅度进行平均,然后将新的平均数据动画化到位。

顺便说一句,请参阅 关于创建数据动画图的内容。

我想出的动画是这样的: