为什么PitchDetection在吹口哨时效果更好?

时间:2019-01-07 20:42:06

标签: java signal-processing tarsosdsp

我正在玩TarsosDSP附带的UtterAsterisk示例程序。该程序的目标是显示水平条,以指示用户应做的笔记。垂直条从左向右移动,以向用户指示何时执行哪些音符的正确时间。用户会根据用户是否在正确的时间内记下了正确的笔记而获得积分。

链接到应用程序的屏幕截图:https://0110.be/files/photos/392/UtterAsterisk.png

此程序包含3个部分:

  1. 选择音频输入
  2. 选择检测算法
  3. 预期音符与实际产生的音符的
  4. 可视表示形式:每X毫秒会出现一个黑色小方块,代表用户制作的音符。在本节的标题(在该程序的最新版本中)中,它表示“耳语效果最佳”。

我想知道为什么这段代码在吹口哨时效果最好?

作为背景信息,我试图为类似的程序制作一个快速的原型,但是用户将产生非啸叫,无声(无言语)的声音(如动物的声音),并且需要与之匹配正确性。

我尝试吹哨程序中指示的注释,它确实运行得很好(除了我吹哨的感觉真糟糕!)。

我尝试选择不同的检测算法,但是当我不发出声音时,声音产生的注释并不总是记录在第三部分。

我感觉吹口哨会产生一个音符,而发出嘎嘎声(像鸭子一样)实际上是一种谐音(希望我没错:几个音符混合在一起会产生声音)。

第151、152行:https://github.com/JorenSix/TarsosDSP/blob/master/src/examples/be/tarsos/dsp/example/UtterAsterisk.java

// add a processor, handle percussion event.
dispatcher.addAudioProcessor(new PitchProcessor(algo, sampleRate, bufferSize, this));

我相信PitchProcessor仅会处理一个峰值,因为它返回的pitchDetectionResult仅包含一个频率(第59行): https://github.com/JorenSix/TarsosDSP/blob/master/src/core/be/tarsos/dsp/pitch/PitchDetectionResult.java

不幸的是,我主要是在数字信号处理领域起步,可以借助一些帮助来了解在这种特定应用中口哨效果如何。如果我的直觉指向正确(吹口哨=单音),一个人怎么能做与该程序相同的基本操作(将用户发出的动物声音与比赛录音进行比较)?

谢谢您的输入!

1 个答案:

答案 0 :(得分:0)

答案似乎就在这里。

  

用户将产生无须回声,无声音(无语音)的声音(如动物的声音),并且需要进行匹配以确保正确性。

这些“声音”似乎是多种音调的结果, 吹口哨(人吹口哨)很可能会产生单一音调。

为进行比较, 测试钢琴弹奏的单个音符(或键)和钢琴弹奏的和弦(多个音符)的声音之间的差异。

另一种选择是使用电话来产生拨号音(例如,按7)而不是吹口哨。 电话会产生DTMF(双音等等)声音。