在 iOS 中实现音频波形视图和音频时间轴视图?
Implementing audio waveform view and audio timeline view in iOS?
我正在开发一款允许用户通过麦克风录音的应用程序,为此我正在使用音频单元。我弄清楚了音频后端并开始工作,我开始研究 views/controls 等。
有两件事我还没有实现:
1) 我将使用 OpenGL ES 绘制音频输入的波形,似乎没有更简单的实时绘制方法。我将在 GLKView 中绘图。记录完某些内容后,用户应该能够来回滚动并查看没有毛刺的波形。我知道这是可行的,但很难理解如何实施。假设用户正在滚动,我是否需要每次都重新读取录制的音频并重新绘制所有内容?我显然不想将整个录音存储在内存中,而且从磁盘读取很慢。
2) 对于滚动等,用户应该看到一个时间线,如果我对第一个问题有想法,我不知道如何实现时间线。
我描述的所有功能都是可行的,因为它可以在语音备忘录应用程序中看到。任何帮助总是感激。
我就是这么做的。我这样做的方法是创建一个数据结构来保存音频的不同 "zoom levels" 数据。除非您以每 1 像素显示 1 个样本的分辨率显示音频,否则您不需要从磁盘读取每个样本,因此您要做的是将样本下采样到可以存储在内存中的更小的数组提前时间。一个天真的例子是,如果您的波形以每像素 64 个样本的比率显示音频。假设您有一组 65536 个立体声样本,您会将每 L/R 对样本平均为正单声道值,然后将 64 个正单声道值平均为一个浮点数。然后,您的 65536 个音频样本数组可以用 512 "visual samples" 个数组可视化。我的现实世界实现变得比这复杂得多,因为我有办法显示所有缩放级别和实时重采样等,但这是基本思想。它本质上是一个 Mip map 的音频。
我正在开发一款允许用户通过麦克风录音的应用程序,为此我正在使用音频单元。我弄清楚了音频后端并开始工作,我开始研究 views/controls 等。 有两件事我还没有实现:
1) 我将使用 OpenGL ES 绘制音频输入的波形,似乎没有更简单的实时绘制方法。我将在 GLKView 中绘图。记录完某些内容后,用户应该能够来回滚动并查看没有毛刺的波形。我知道这是可行的,但很难理解如何实施。假设用户正在滚动,我是否需要每次都重新读取录制的音频并重新绘制所有内容?我显然不想将整个录音存储在内存中,而且从磁盘读取很慢。
2) 对于滚动等,用户应该看到一个时间线,如果我对第一个问题有想法,我不知道如何实现时间线。
我描述的所有功能都是可行的,因为它可以在语音备忘录应用程序中看到。任何帮助总是感激。
我就是这么做的。我这样做的方法是创建一个数据结构来保存音频的不同 "zoom levels" 数据。除非您以每 1 像素显示 1 个样本的分辨率显示音频,否则您不需要从磁盘读取每个样本,因此您要做的是将样本下采样到可以存储在内存中的更小的数组提前时间。一个天真的例子是,如果您的波形以每像素 64 个样本的比率显示音频。假设您有一组 65536 个立体声样本,您会将每 L/R 对样本平均为正单声道值,然后将 64 个正单声道值平均为一个浮点数。然后,您的 65536 个音频样本数组可以用 512 "visual samples" 个数组可视化。我的现实世界实现变得比这复杂得多,因为我有办法显示所有缩放级别和实时重采样等,但这是基本思想。它本质上是一个 Mip map 的音频。