【发布时间】:2016-09-09 12:11:27
【问题描述】:
我在 Google 上进行了很多搜索,但无法找到有关如何确定 mp3 文件的音符的示例。
到目前为止,我已经阅读了一些关于 FFT(快速傅立叶变换)的内容,可以从中计算音频文件的音高,并根据音高符号导出音符。
但后来我读到the mp3 file format is in the time domain,由于有损压缩格式不包含频率分析所需的样本值...这是否意味着您必须将 mp3 转换为 wav 文件以便要计算密钥吗?
我发现了几个用于视觉目的的实时音高检测示例,但不适用于分析整个 mp3 文件并输出音调。
我希望有人能指出我正确的方向。
谢谢。
【问题讨论】:
-
“mp3 文件格式在时域中”——嗯,不完全是。它是未压缩文件的编码(数据压缩)版本,例如WAV PCM,它又是时域信号的表示。
-
MP3 是一种有损格式,可以改变和过滤频率。你无法恢复不存在的东西。但是阅读您提供的信息,您可以看到转换确实应该/可能会有所帮助,因为 FFT 适用于“原始”数据。我只是不知道这与 JavaScript 有什么关系?尤其是在客户端上,我不太确定您是否能够读取此类数据。
-
这是一个非常复杂的问题,许多研究人员仍在研究,没有简单的一刀切解决方案。不过,忘记 MP3 与 WAV,这不是问题。你需要得到信号,然后用它做很多复杂的事情来估计密钥。
-
好的,但是不能根据时域中的幅度来确定音高符号吗?
-
这是一个有关实时音高检测(在 C# 中)和我的少数音高估计器(谐波积谱、韦尔奇谱图、布莱克曼图基谱估计器)的 Python 实现的相关问题:gist.github.com/fasiha/957035272009eb1c9eb370936a6af2eb你关于音乐调的更广泛的问题是一个超出我对音乐非常有限的理解的问题——你能解释一下,如果你有一个音高序列(以赫兹为单位),你将如何从中获得音乐调?
标签: javascript audio mp3 fft pitch-tracking