在iOS中实现音频波形视图和音频时间线视图?

nik*_*niy 3 audio objective-c uiview audiounit ios

我正在开发一个允许用户从麦克风录音的应用程序,并且我正在使用音频单元来实现此目的。我已经弄清楚音频后端并正在工作,并且我开始研究视图/控件等。有两件事我尚未实现:

1)我将使用OpenGL ES来绘制音频输入的波形,似乎没有更简单的方法来实现实时绘制。我将在 GLKView 内绘图。记录完某些内容后,用户应该能够来回滚动并查看没有毛刺的波形。我知道这是可行的,但很难理解如何实施。假设用户正在滚动,我是否需要每次重新读取录制的音频并重新绘制所有内容?我显然不想将整个录音存储在内存中,并且从磁盘读取速度很慢。

2)对于滚动等,用户应该看到一个时间线,如果我知道第一个问题,我不知道如何实现时间线。

我描述的所有功能都是可行的,因为它可以在语音备忘录应用程序中看到。任何帮助总是值得赞赏。

这是更好地显示问题的图像。

dav*_*234 5

我就是这么做的。我这样做的方法是创建一个数据结构,用于保存音频的不同“缩放级别”数据。除非您以每 1 像素显示 1 个样本的分辨率显示音频,否则不需要从磁盘读取每个样本,因此您要做的是将样本下采样到可以存储在内存中的更小的数组提前时间。一个简单的例子是,如果您的波形以每像素 64 个样本的比例显示音频。假设您有一组 65536 个立体声样本,您会将每对 L/R 样本平均为一个正单声道值,然后将 64 个正单声道值平均为一个浮点数。然后,您的 65536 个音频样本数组可以通过 512 个“视觉样本”数组进行可视化。我的现实世界实现变得比这复杂得多,因为我有办法显示所有缩放级别和实时重采样等,但这是基本思想。它本质上是音频的 Mip 贴图。