首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从AVAudioEngine的installTap高频提取缓冲器

如何从AVAudioEngine的installTap高频提取缓冲器
EN

Stack Overflow用户
提问于 2021-05-23 14:54:51
回答 1查看 656关注 0票数 0

我希望在屏幕上呈现音频波形,如iOS语音备忘录应用程序,所以我使用AVAudioEngine并在输入节点上安装了Tap。但它以0.1秒的频率回传最快,我需要在更快的频率上获得缓冲数据,这样就可以在屏幕上绘制越来越多的波形,以实现平滑和实时的可视化。

你能提出更好的方法吗?

代码语言:javascript
运行
复制
    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
        }
    } 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-26 13:13:52

我想你误解了如何处理这件事。与其以较高的频率获取极少量的新数据,不如对代码进行调整,以便在更长的时间间隔内获得更大的数据块。

然后,您可以设置显示代码,以启动动画,在给定的时间间隔内在新数据的图表中动画。1/10秒实际上是一个动画的很短的时间间隔。

我建议在第二个时间间隔的十分之一的时间内,平均数据的振幅,并将新的平均数据放在适当的位置。

顺便说一句,请参阅关于创建数据的动画图的update I posted to the answer to your question

我想出的动画是这样的:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67661093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档