gpt4 book ai didi

audio - 从mp3格式提取10频段均衡信息的方法

转载 作者:行者123 更新时间:2023-12-02 22:44:34 28 4
gpt4 key购买 nike

我想为我的mp3播放器制作一个16段的图形均衡器。

但是,我不知道从哪里开始,因为我没有音频处理方面的经验。

因此,我真的不知道从哪里开始从mp3格式中提取频段(?)。

有人可以建议我一个简单的解决方案来做到这一点吗?

嗯,还有,任何易于修改和构建为Windows应用程序的开源mp3播放器?

最佳答案

我认为您正在寻找的是频谱分析仪。它显示了整个音频频谱中各个频率范围的瞬时能级。对于大多数人来说,它基本上是糖果。它不会修改信号。

另一方面,图形均衡器使您可以增强或衰减各个频带上的音频能量。它肯定会修改信号。大多数人使用图形均衡器来增强频谱的一部分效果,例如增强低音。

发烧友通常使用连接到麦克风(而不是放大器)的频谱分析仪来监视通过图形均衡器播放白噪声的房间的响应。然后,他们调整均衡器以平坦化频率响应,从而补偿房间的声音,使您可以更纯净地听到录制的音频。如果您然后弄混他们的均衡器设置,这些人通常会非常不高兴。 :)

您可以查看RhythmBox,Banshee,VLC甚至Audacity等流行的Linux mp3播放器。如果您想自己编写,请按照以下说明进行操作。假设您知道如何在Windows上编写GUI程序,并且只想要一个好的频谱分析仪,那么您真正需要做的是:

  • 在解码阶段之后接入信号路径。
  • 将音频缩混为单声道,这通常意味着仅将左右采样加在一起。小心使用音频浮点数(应将其缩放至+/- 1),或在添加之前将(大概16位)样本转换为32位整数,以免在添加短裤时发生溢出。
  • 测量出一些样本(称为窗口),通常为512、1024或2048(始终选择2的幂)。在分辨率(更大的窗口具有更高的分辨率),成本(更多的样品需要更多的时间来处理)和响应性(更大的窗口需要更多的时间来累积,降低分析仪的帧速率)之间进行权衡。
  • 通过快速傅立叶变换(FFT)运行这些样本。请查阅所用FFT库的文档(FFTW是一个很好的库),但是输出通常是一个复数数组,中间对称。
  • 如果输出是对称的,则仅使用前半部分。如果不是对称的,则使用整个东西。从头到尾(或中间)的每个复数以从0 Hz到音频采样率的一半的线性间隔频率编码正弦波的能量和相位。如果音频为44.1 kHz,并且您在FFT中选择了1024个采样,则每个数字代表22050 Hz / 512 = 43 Hz。
  • 取每个复数并平方其实部和虚部,然后将这些数字相加。您最终将获得每个bin中的功率(即能量平方),这是一个实数和正数。
  • 通过将FFT频段加起来将其分组为频带。例如,如果您在上面的示例中使用了512个bin,然后将它们按51分组,则将有10个2196 Hz频段。这在低频下提供的分辨率太低,因此人们通常使用对数间隔的频段:0(0-43 Hz),1(43-86 Hz),2-3(86-172 Hz),4-7(172- 344 Hz),8-15(344-688 Hz)等
  • 现在,您可以直接显示功率总和,或计算每个频带的平均值,然后取其平方根(RMS能量)并将其绘制出来。要以分贝为单位显示值,请计算RMS能量,然后绘制:20 * log10(RMS / 32768)。对于16位音频,值从0 dB(满量程)到-90 dB(无声)。
  • 连续重复步骤2-8,每次更新显示。
  • 去打动你的 friend 。

  • 祝你好运。而且,如果您在16 kHz以上看不到太多能量,也不要惊慌。 mp3编码算法会过滤掉16 kHz以上的所有内容,以帮助压缩。

    ps如果您确实不错,并且有解码器的来源,则可以在音频仍处于解码器的频域中时访问音频,并将其用于频谱分析仪。您必须采用解码器为您提供的窗口大小,但是您的计算成本几乎为零。并且请注意,mp3使用离散余弦变换(而不是傅立叶变换)在频域之间来回移动音频,因此您的能量值将与适当的FFT不同。

    关于audio - 从mp3格式提取10频段均衡信息的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10160439/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com