Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何从AVAudioEngine';s安装高频抽头_Swift_Avaudioengine - Fatal编程技术网

Swift 如何从AVAudioEngine';s安装高频抽头

Swift 如何从AVAudioEngine';s安装高频抽头,swift,avaudioengine,Swift,Avaudioengine,我希望在屏幕上呈现音频波形,就像iOS语音备忘录应用程序一样,所以我使用AVAudioEngine并在输入节点上安装了Tap。但它在0.1秒的频率上提供了最快的回调,我需要在更快的频率上获得缓冲数据,这样可以在屏幕上绘制越来越多的波形,以实现平滑和实时的可视化 你能建议一个更好的方法吗 让inputNode=self.audioEngine!。输入节点 let format=inputNode.inputFormat(forBus:0) 我想你误解了如何处理这件事。与以高频率获取非常少量的新数据

我希望在屏幕上呈现音频波形,就像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
        }
    }