如何在 iPhone 音频播放器中实现均衡器设置

4

我该如何在我的iPhone应用程序中以编程方式设置低音或其他类型的均衡器?是否有现成的框架或方法可用?请提供参考。


是的,我尝试在谷歌上搜索了一下...但我只找到了默认设置的参考资料...我想通过编程来设置均衡器。 - DShah
4个回答

4
如果您将音频播放构建为AudioUnit图形,则应该能够使用内置的iPod EQ AudioUnit,其中包含与iPod应用程序中相似的预设。请查看this example,希望可以帮助您了解如何实现此操作。
在阅读代码时,请确保理解Audio Units是图形中的节点,其中音频信号通过回调流经图形,并且每个节点都可以修改信号以便传送到输出节点(基本上是扬声器)。因此,您需要将文件加载到内存中,然后在指定的回调中向音频单元提供PCM(声音样本)数据。当缓冲区为空时,回调将被调用,您可以填充它。
链接的示例设置了一个混音器节点、一个输出节点和均衡器节点,将它们连接在一起,并在将它们加载到内存后开始播放多个声音文件。
如果iPod EQ AU不能满足您的需求,您可以构建自己的AudioUnit并稍后替换它,但这需要一些DSP知识。您还可以找到一些开源均衡器,这些均衡器已实现为Audio Units(在Mac平台上用于音乐制作工具中使用的效果的常见格式)。

我建议您查看NVDSP:https://github.com/bartolsthoorn/NVDSP 它允许您在没有DSP知识的情况下对原始样本进行双二次滤波器处理。(不需要Novocaine,但建议使用) - sougonde
嗨@richardolsson,我已经尝试了这种方法,并且它适用于本地歌曲,但对于流媒体歌曲不起作用。我的问题是我们不能使用相同的方法来获得iPod EQ效果吗? - Infaz

1

很抱歉,您无法在AVAudio Player中直接获取设置/均衡器设置。

这是由苹果提供的框架,因此您可以访问的只有类参考中提供的内容。

因此,我建议您查看类参考,但没有任何地方说明您可以访问均衡器设置。

以下是相关链接。

http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html

希望这能帮到你。

编辑-1:

如果你想使用其他库,该库可以让你广泛地访问设置,并且甚至可以提供连DJ都会满意的声音效果,那么你可以使用

BASS音频库

这是一个付费库,但如果你真的想要好的和有效的声音效果以及对所有设置的访问权限,那么购买它是值得的。


谢谢Parth Bhatt,你能帮我提供“获取可用于播放级别计量的数据”的示例代码吗?如链接中所述。或者提供使用“AVSampleRateKey”或“AVEncoderBitRateKey”的示例代码,以便我可以分析音频速率吗? - DShah
1
@DShah:所有这些方法都是用于使用音频电平计。因此,它获取有限的设置。以下是您可以在链接中参考的这些方法:meteringEnabled属性-averagePowerForChannel:-peakPowerForChannel:-updateMeters - Parth Bhatt

1
如果您正在使用音频队列或远程IO音频单元进行音频处理,您可以编写和使用自己的DSP滤波器来处理和均衡化音频样本数组或缓冲区。串联或并联IIR滤波器是一种可能性。FFT重叠添加/保存滤波是另一种可能的DSP技术,它将允许自定义均衡曲线。

这是因为它是一个“复杂”的主题。你要么学习大量的DSP(数学和编码),要么雇用专家,或者在某个地方找到一个库(可能是商业许可)。没有内置的公共API。 - hotpaw2

0

对于这个问题,目前没有可用的框架。我认为不提供这样的框架的原因是均衡和设置音效模式(如低音、经典等)并不是所有使用音频服务的应用程序都需要的通用功能。那些需要这些功能的人需要自己实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接