【发布时间】:2015-05-10 00:16:52
【问题描述】:
我正在使用自相关算法对单声道声音(嗡嗡声、口哨声)执行音高检测,并且我得到的结果足以满足我正在尝试做的事情。 但是,如果我用音符 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) 的那个线程中,接受的答案提到了一个简单的后处理,在我的音高结果序列上应用模式过滤器。这个模式过滤器是什么?
【问题讨论】:
-
看来你需要磨练你的吹口哨技巧了。
-
你用什么语言编程?你能给我们一个演示问题的代码示例吗?请在您的问题中添加这些详细信息
-
@TonyK 似乎即使是完美的正弦波也有这些音高变化。
-
@Dijkgraaf 我希望添加到问题中的信息有助于理解我正在尝试做的事情。
-
模式过滤器是您查看出现次数最多的音符并丢弃其余音符的地方。例如如果你要做一个简单的模式过滤器并丢弃任何值小于 20 的东西,那么你会得到 54x G、52x F#、28x D#、33x D# 但是你必须计算要使用的模式值,因为它取决于音符的节奏。
标签: javascript pitch-detection