如何找到一首歌的音阶

时间:2014-06-14 08:33:51

标签: python matlab fft frequency

歌曲的缩放 - 歌曲的音阶是根据信号中存在的一组和弦来确定的。

请参阅http://songkeyfinder.com/以找出不同音阶的和弦组。

歌曲的音阶也可以从信号中最常出现的给定频率组中确定。

我已经在MATLAB中编写了这段代码,它显示了频率与其出现的关系。

[wave,freq]  = audioread('Our_song.wav');
dt  = 1/ freq;
Stoptime = 1;
t = (0:dt:Stoptime-dt);
n = length(wave)-1;
df = freq/n;
figure;
f = 0:freq/n:99999*freq/n;
ff=abs(fft(wave))/n;
fflength= length(ff);
ffpart=ff(1:100000);
plot(f,ffpart);

如何存储信号的前n个频率最高?

1 个答案:

答案 0 :(得分:3)

通过对整个信号应用fft,您将丢失时间信息。 你可能对音频处理并不熟悉,但是如果你对它有些好奇的话,这种练习似乎很有趣。 信号的公共时频表示是STFT,请查看关于频谱图的Matlab帮助。

然而,STFT不是最好的突出音乐结构,您可能希望使用色度功能来表示音频信号。它将产生一个带有12" bins"对应于半音阶的12个音符。

here描述了如何实现此色度分析的示例。 从色度表示中,您可以尝试识别随时间播放的音符。

但是,这不是一项简单的任务。我强烈建议开始使用只包含一种乐器的录音。首先,没有任何和弦(例如钢琴上的旋律),如果您设法正确地获得音符序列,请尝试使用和弦的相同乐器。 不同工具的混合将更具挑战性。