Javascript:如何确定mp3文件的音调

问题描述 投票:0回答:2

我已经进行了大量的 Google 搜索,但未能找到有关如何确定 mp3 文件的音符的示例。

到目前为止,我已经阅读了一些有关 FFT(快速傅立叶变换)的内容,从中可以计算音频文件的音高,并根据音高符号导出音符。

但是后来我读到mp3文件格式位于时域中,由于有损压缩格式不包含频率分析所需的样本值...这是否意味着您必须转换mp3到 wav 文件以便计算密钥?

我发现了几个用于视觉目的的实时音调检测的示例,但不是用于分析整个 mp3 文件并输出音乐调。

我希望有人能指出我正确的方向。

谢谢。

javascript audio mp3 fft pitch-tracking
2个回答
6
投票

我创建了一个应用程序,PitchScope Player,它可以实时对 MP3 文件进行音高检测,其完整的源代码发布在 GitHub 上,但它是用 C++ 编写的。音调检测和音乐调检测,尤其是实时检测,要求极高,并且可能需要 C++ 的速度才能在此时执行。您刚刚开始探索一项非常困难的音频工程任务,并且确实需要首先了解一些关于我们如何感知“音高”的物理背景,什么是“谐波”,并探索如何选择频率-来自原始信号的域变换(参见下面的维基百科链接)。

当在钢琴上按下单个琴键时,我们听到的不仅仅是一种声音振动频率,而是在不同数学相关频率下发生的多种声音振动的“复合”。这种不同频率的振动组合的元素被称为“谐波”或分音。例如,如果我们按钢琴上的中间 C 键,复合谐波的各个频率将从 261.6 Hz 作为基频开始,523 Hz 将是第二谐波,785 Hz 将是第三谐波,1046 Hz 将是是第 4 次谐波,依此类推。后面的谐波是基频 261.6 Hz 的整数倍(例如:2 x 261.6 = 523、3 x 261.6 = 785、4 x 261.6 = 1046)。我们通过查找在频率间隔中具有数学关系的谐波组来检测音高 我没有使用 FFT,而是使用改进的对数 DFT 变换,以便其频道可以与音乐信号中谐波的位置对齐。对数 DFT 变换还在执行中提供了明显的速度优势。 一旦您检测到音乐信号中的多个音高,您就可以通过根据该音乐信号中成员音符的数量对 12 个不同的候选调进行评分来检测音乐调。我的另一个应用程序 PitchScope Navigator 也可以实时检测音调。

您可能想要获取一个 C++ 编译器并重新编译我的源代码,以便您可以逐步执行它以了解我的算法是如何工作的。它还可以解码 MP3 文件。您还可以从网络上的许多地方下载该应用程序的可执行文件 PitchScope Player,以便查看它在带有您选择的 MP3 文件的 Windows 计算机上的执行情况。

https://github.com/CreativeDetectors/PitchScope_Player

https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection

下面是复调 mp3 录音中 3 秒吉他独奏的对数 DFT(由我的 C++ 软件创建)的图像。它显示了在演奏独奏时吉他上各个音符的和声如何出现。对于这个对数 DFT 上的每个音符,我们可以看到它的多个谐波垂直延伸,因为每个谐波将具有相同的时间宽度。

这个人写了一个令人难以置信的库,对我来说非常有效,但其他人告诉我,它对他们来说不是开箱即用的:他们给了我另一个链接。


0
投票

无论如何,这对我来说非常有用!

这是我更喜欢的带有教程的:

https://alexanderell.is/posts/tuner/

这是我的一个人推荐的一个,他的教程不起作用——找不到教程,但它就在那里:

https://harald.ist.org/tools/spectrum_analysisr.html

© www.soinside.com 2019 - 2024. All rights reserved.