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

Ace*_*Ace 2 javascript audio mp3 fft pitch-tracking

我已经做了很多谷歌搜索,但还没有找到一个关于如何确定 mp3 文件音符的例子。

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

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

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

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

谢谢。

Jam*_*ard 5

我创建了一个应用程序 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

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