【问题标题】:Audio bars visualizer in iOSiOS 中的音频条可视化工具
【发布时间】:2015-11-07 17:04:06
【问题描述】:

我正在寻找一种在 iOS 中创建类似于此的音频条可视化器的方法。

每个白条都会根据音频波上下移动。我真的很迷茫,因为在 Objective-c 中处理音频的经验并不多。

编辑:我正在寻找的是 Overcast's app 在其可视化器上所做的(播客图像下部的一组垂直橙色条)

有人可以帮忙吗? 谢谢

编辑:感谢 Tomer 的回答,我终于成功了。首先,我做了this tutorial 以说明一切。然后我为我的项目创建了自己的 VisualizerView,你可以在this gist 中找到它。也许并不完美,但它做了我需要做的事情。

【问题讨论】:

标签: ios objective-c


【解决方案1】:

一般来说,如果您想了解 iOS 中的声音是什么样的,您有几个选择:

  • 使用简单的AVAudioPlayer音频播放器,然后使用[audioPlayer averagePowerForChannel:]方法获取当前时刻的平均音频电平。查看this tutorial
  • 使用Audio Queue API,它可以让您向扬声器发送您想要的任何音频:您将从源中读取音频并每次都用它填充缓冲区。 (如果您正在从文件中读取,请使用AVAssetReader)这样您就可以始终准确地知道您正在播放的波形,因此您可以计算其平均功率或以其他方式(如 FFT)对其进行处理。然后你会相应地更新条形图。

编辑:做这种事情的标准方法是使用快速傅里叶变换 (FFT) - 它从声音中提取频率信息。 Here's 在 iOS 上使用它的一个很好的例子 (Apple's guide here)。但是,当然,要使用它,您必须确切知道每次播放的是什么波形,因此您可能希望使用较低级别的 API,例如 Audio Queue。

【讨论】:

  • 我用 averagePowerFor Channel 做了一个小测试:但它只显示两个通道,因为是立体声音频。怎么会变成多条显示呢?
  • @WedgeSparda 使用 SpriteKit 并将 yScale 设置为声音幅度的 float 值。
  • @WedgeSparda 如果您真的希望每个条完全独立于其他条,您可以使用 FFT。这将为您提供声音的频率分量。只需在谷歌上搜索“fft ios”,您就会发现很多好材料。否则,您必须根据平均功率制定一些算法来更改条形。
  • WedgeSparda,你用什么来播放音频?这与答案相关,如果您正在播放音频文件(本地或远程)并打算使用 AVPlayer,您将需要一种不同的方法(是的,您可以从 AVPlayer 提取原始音频数据)。请扩展您的预期用途,我会为您获取一些代码。顺便说一句,在@Tomer 建议的代码中,使用的 Hann 窗口在消除更广谱的泄漏方面效果不佳(您不会显示 128 条,试试吧,一半将是 -128 ) Blackman 窗口在这个实例。
  • 朋友们为什么这个类对 CPU 如此强大...70% iPhone 6 难以置信!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
相关资源
最近更新 更多