ios - 在 iOS 中实现音频波形 View 和音频时间轴 View ?

标签 ios objective-c audio uiview audiounit

我正在开发一款允许用户通过麦克风录音的应用程序,为此我正在使用音频单元。我弄清楚了音频后端并开始工作,我开始处理 View /控件等。 有两件事我还没有实现:

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

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

我描述的所有功能都是可行的,因为它可以在语音备忘录应用程序中看到。我们将不胜感激任何帮助。

Here's an image the displays the question better.

最佳答案

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

关于ios - 在 iOS 中实现音频波形 View 和音频时间轴 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31733462/

相关文章:

objective-c - @private - 使用与否?

bash - 如何使用 sox 获取音频文件总和的长度?

javascript - 在javascript中单击按钮时添加声音

ios - iOS使用多线程保存数据

ios - 如何在没有库存邮件应用程序的情况下发送电子邮件?

ios - 如何比较数组与嵌套数组并打印匹配对,而不是匹配的值列表? (代码有助于说明)

objective-c - Objective-C Cocoa 中的 ListView

ios - 主应用程序目标和应用程序的扩展版本号应该相同吗?

objective-c - 当数据为空时使用 Storyboard 在导航 Controller 上显示不同的 View

winapi - 列出音频输入设备 - VBA