Java 为什么吹口哨能更好地进行检测?

Java 为什么吹口哨能更好地进行检测?,java,signal-processing,tarsosdsp,Java,Signal Processing,Tarsosdsp,我正在玩TarsosDSP附带的UtterAsterisk示例程序。这个程序的目标是显示水平条,指示用户应该做的注释。垂直条从左向右移动,以向用户指示何时执行哪些注释的正确时间。根据用户是否在正确的持续时间内做了正确的笔记,用户将获得分数 链接到应用程序的屏幕截图: 本程序分为三个部分: 选择音频输入 选择检测算法 预期注释与实际生成注释的视觉表示:每X毫秒生成一个小的黑色正方形,表示用户所做的注释。在本节的标题中(在最新版本的节目中),它说“吹口哨效果最好” 我想知道为什么这个代码最适合吹口哨

我正在玩TarsosDSP附带的UtterAsterisk示例程序。这个程序的目标是显示水平条,指示用户应该做的注释。垂直条从左向右移动,以向用户指示何时执行哪些注释的正确时间。根据用户是否在正确的持续时间内做了正确的笔记,用户将获得分数

链接到应用程序的屏幕截图:

本程序分为三个部分:

  • 选择音频输入
  • 选择检测算法
  • 预期注释与实际生成注释的视觉表示:每X毫秒生成一个小的黑色正方形,表示用户所做的注释。在本节的标题中(在最新版本的节目中),它说“吹口哨效果最好”
  • 我想知道为什么这个代码最适合吹口哨

    作为背景信息,我正在尝试为一个类似的程序制作一个快速原型,但用户将产生非口哨、非声音(无语音)声音(如动物声音),并且需要匹配以确保正确性

    我已经试着吹了吹节目上的口哨,效果很好(除了我吹口哨很差!)

    我尝试过选择不同的检测算法,但当我发出非口哨声时,声音发出的音符并不总是在第三部分中记录

    我有一种感觉,吹口哨只产生一个音符,而发出嘎嘎声(像鸭子一样)实际上是一种和声(希望我说得对:几个音符混合在一起产生一个声音)

    第151行,第152行:

    我相信PitchProcessor只会处理一个峰值,因为它返回pitchDetectionResult,其中只包含一个频率(第59行):

    不幸的是,我主要是从数字信号处理领域开始的,我需要一些帮助来理解口哨在这个特殊的应用中是如何更好的。如果我的直觉是正确的(口哨=单音符),人们怎么能做这个程序所做的相同的基本事情(将用户制作的动物声音与比赛录音进行比较)


    谢谢你的意见

    答案似乎就在这里

    用户将产生非口哨、非人声(无语音)声音(如动物声音),并且需要匹配以确保正确性

    这些“声音”似乎是多重音调的结果, 口哨声(人类口哨声)可能产生单一音调

    作为比较,, 测试在钢琴上弹奏的单个音符(或键)的声音与在钢琴上弹奏的和弦(多个音符)的声音之间的差异

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

    我投票结束这个问题,因为它是关于音调检测、音频谐波和口哨声的,而不是关于编程。公平点。是否有办法将我的问题转移到DSP/TarsosDSP部分?我以为这只是由我添加的标签控制的,但似乎我错了。你是对的DwB。看来,仅仅是把我所知道的关于这个主题的一切都写在一个冗长的问题上,就能清楚地找到答案。谢谢你指给我看!我会接受你的正确答案。
    // add a processor, handle percussion event.
    dispatcher.addAudioProcessor(new PitchProcessor(algo, sampleRate, bufferSize, this));