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

时间:2015-07-30 20:29:52

标签: ios objective-c audio uiview audiounit

我正在制作一款允许用户从麦克风录音的应用,我正在使用音频单元。我有音频后端找到并工作,我开始研究视图/控件等。 我还有两件事要实现:

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

2)对于滚动等,用户应该看到时间轴,如果我对1个问题有所了解,我不知道如何实现时间轴。

我所描述的所有功能都可以,因为它可以在Voice Memos应用程序中看到。任何帮助总是受到赞赏。

Here's an image the displays the question better.

1 个答案:

答案 0 :(得分:4)

我做到了这一点。我这样做的方式是创建一个包含不同"缩放级别的数据结构。音频数据。除非您以每1像素显示1个样本的分辨率显示音频,否则您不需要从磁盘读取每个样本,因此您要做的是将样本下采样到可以存储的小得多的数组在记忆中提前。一个简单的例子是你的波形是以每像素64个样本的比例显示音频。假设您有一个65536个立体声样本数组,您可以将每个L / R样本对平均为正单值,然后将64个正单值平均值放入一个浮点数。然后,您可以使用512"视觉样本"的阵列显示您的65536音频样本数组。我的真实世界实现变得复杂得多,因为我有办法显示所有缩放级别和实时重采样等,但这是基本的想法。对于音频,它基本上是Mip map