Swift 如何从AVAudioEngine';s安装高频抽头
我希望在屏幕上呈现音频波形,就像iOS语音备忘录应用程序一样,所以我使用AVAudioEngine并在输入节点上安装了Tap。但它在0.1秒的频率上提供了最快的回调,我需要在更快的频率上获得缓冲数据,这样可以在屏幕上绘制越来越多的波形,以实现平滑和实时的可视化 你能建议一个更好的方法吗 让inputNode=self.audioEngine!。输入节点 let format=inputNode.inputFormat(forBus:0)Swift 如何从AVAudioEngine';s安装高频抽头,swift,avaudioengine,Swift,Avaudioengine,我希望在屏幕上呈现音频波形,就像iOS语音备忘录应用程序一样,所以我使用AVAudioEngine并在输入节点上安装了Tap。但它在0.1秒的频率上提供了最快的回调,我需要在更快的频率上获得缓冲数据,这样可以在屏幕上绘制越来越多的波形,以实现平滑和实时的可视化 你能建议一个更好的方法吗 让inputNode=self.audioEngine!。输入节点 let format=inputNode.inputFormat(forBus:0) 我想你误解了如何处理这件事。与以高频率获取非常少量的新数据
我想你误解了如何处理这件事。与以高频率获取非常少量的新数据不同,您应该考虑代码的因素,以在更长的时间间隔内获取更大的数据块 然后,可以设置显示代码以启动动画,以便在给定的时间间隔内在新数据的图形中设置动画。十分之一秒实际上对于动画来说是相当短的时间间隔 我建议在1/10秒的时间间隔内平均数据的振幅,并将新的平均数据动画化 顺便说一句,请参见关于创建数据的动画图形 我制作的动画如下所示:
感谢Ducan提供的代码,这对建立理解非常有帮助。。。在这里,我们还需要在波形上来回滚动,所以我做了更多的研究,发现UIScrollView对此有所帮助。所以现在我在内容视图的图层上渲染线条,并更改内容视图框架以向后移动并增加内容视图宽度,并相应更改scrollview contentsize和contentoffset。请让我知道您的意见。下面是观看演示输出视频的链接。
inputNode.installTap(onBus: 0, bufferSize: 4096, format: format) { [self] (buffer, time) in
processAudioData(buffer: buffer)
DispatchQueue.main.async {
audioPlotView.setNeedsDisplay(). // Render waveform on screen
}
}