TarsosDSP に付属している UtterAsterisk サンプル プログラムをいじっています。このプログラムの目的は、ユーザーが作成する必要があるメモを示す水平バーを表示することです。垂直バーが左から右に移動して、どのノートを実行するかの正しいタイミングをユーザーに示します。ユーザーが正しい時間に正しいメモを作成したかどうかに応じて、ユーザーはポイントを獲得します。
アプリケーションのスクリーンショットへのリンク: https://0110.be/files/photos/392/UtterAsterisk.png
このプログラムには 3 つのセクションがあります。
- 音声入力を選択
- 検出アルゴリズムを選択
- 予想されるメモと生成される実際のメモの視覚的表現: X ミリ秒ごとに小さな黒い四角形が作成され、ユーザーが作成したメモを表します。このセクションのタイトル (プログラムの最新バージョン) には、「口笛が最も効果的」と書かれています。
このコードが口笛で最もうまく機能するのはなぜでしょうか?
背景情報として、私は同様のプログラムの簡単なプロトタイプを作成しようとしていますが、ユーザーが口笛を吹かず、非ボーカル (スピーチなし) の音 (動物の音など) を生成し、正確さを一致させる必要があります。
私はプログラムに示されている音符を口笛で吹いてみましたが、かなりうまく機能します (私が口笛を吹くのが苦手であるという事実を除けば!)。
さまざまな検出アルゴリズムを選択してみましたが、口笛以外の音を出すと、音の音は必ずしも 3 番目のセクションに登録されません。
口笛を吹くと単一の音が出るように感じますが、(アヒルのような)鳴き声を出すことは実際にはハーモニクスです(これが正しいことを願っています:いくつかの音を混ぜて音を生成します)。
// 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
残念ながら、私は主にデジタル信号処理の分野を始めたばかりであり、この特定のアプリケーションで口笛がどのように優れているかを理解するのに役立つかもしれません. 私の直感が正しいことを示している場合 (口笛 = 単音)、このプログラムと同じ基本的なことをどのように行うことができるでしょうか (ユーザーが作った動物の音と試合の録音を比較します)。
ご意見ありがとうございます。