音高检测 - 计算音符

时间:2015-05-10 00:16:52

标签: javascript pitch-detection

我正在使用自相关算法对单声道声音进行音高检测(哼唱,吹口哨),我得到的结果足以满足我的目的。 但如果我用音符 G F#D#吹口音并记录结果,我会得到这个序列:

2x F#
3x G
14x F#
54x G
14x G#
2x D < 52x F#
6x G
14x F#
3x G
2x G
28x D#
2x D
33x D#
4x D
16x D#
2x E
2x D
2x D#

我们可以看到正确的音符被识别出来并且它们是重复次数较多的音符,我怎么知道它是真正的音符还是只是过渡?是否有任何类型的过滤器可以应用于该数组并仅获得真实的音符G F#和D#?

我正在使用这个javascript代码:https://github.com/cwilso/pitchdetect来执行音高检测,我想知道是否有一些后期处理算法可以应用于我的结果来过滤音符,或者我是否必须增加关于自相关算法的窗口。

在信号处理(https://dsp.stackexchange.com/questions/16753/how-to-get-the-melody-from-a-signal)上的那个帖子中,接受的答案提到了一些简单的后处理,在我的结果序列上应用模式过滤器。什么是这种模式过滤器?

1 个答案:

答案 0 :(得分:0)

在模式过滤器中,您可以看到哪些音符最常出现并丢弃其余音符。例如如果您要做一个简单的模式过滤器并丢弃任何值小于20的东西,那么你会获得54x G,52x F#,28x D#,33x D#

但是你必须计算要使用的模式值,因为它取决于音符的速度。