8

サウンド ファイルのピッチを分析するプログラムを使用しています。さまざまなピッチ分析を提供する「TarsosDSP」という非常に優れた API に出会いました。しかし、私はそれを設定するのに多くの問題を経験しています。この API (特に PitchProcessor クラス) の使用方法を簡単に教えてもらえますか? 私はサウンド分析が本当に初めてなので、いくつかのコードのスニペットは非常に高く評価されます。

ありがとう

編集: http://husk.eecs.berkeley.edu/courses/cs160-sp14/index.php/Sound_Programmingで、PitchProcessor のセットアップ方法を示すサンプル コードが 記載されているドキュメントを見つけました…</p>

int bufferReadResult = mRecorder.read(mBuffer, 0, mBufferSize);
// (note: this is NOT android.media.AudioFormat)
be.hogent.tarsos.dsp.AudioFormat mTarsosFormat = new be.hogent.tarsos.dsp.AudioFormat(SAMPLE_RATE, 16, 1, true, false);
AudioEvent audioEvent = new AudioEvent(mTarsosFormat, bufferReadResult);
audioEvent.setFloatBufferWithByteBuffer(mBuffer);
pitchProcessor.process(audioEvent);

…私はかなり迷っています。mBuffer と mBufferSize とは正確には何ですか? これらの値を見つけるにはどうすればよいですか? また、オーディオ ファイルはどこに入力すればよいですか?

4

1 に答える 1

10

TarsosDSP フレームワークでの音声の基本的な流れは次のとおりです。音声ファイルまたはマイクから発信された着信音声ストリームが読み取られ、たとえば 1024 サンプルのフレームに分割されます。各フレームは、それを変更または分析 (ピッチ分析など) するパイプラインを通過します。

TarsosDSP では、AudioDispatcherがオーディオをフレーム単位でチョップする役割を果たします。また、オーディオ フレームをAudioEventオブジェクトにラップします。このAudioEventオブジェクトは のチェーンを通じて送信されますAudioProcessors

したがって、引用したコードでは、mBuffer はオーディオ フレームであり、mBufferSize はサンプル単位のバッファのサイズです。バッファ サイズは自分で選択できますが、ピッチ検出には 2048 サンプルが妥当です。

ピッチ検出の場合、TarsosDSP ライブラリを使用して次のようなことができます。

   PitchDetectionHandler handler = new PitchDetectionHandler() {
        @Override
        public void handlePitch(PitchDetectionResult pitchDetectionResult,
                AudioEvent audioEvent) {
            System.out.println(audioEvent.getTimeStamp() + " " pitchDetectionResult.getPitch());
        }
    };
    AudioDispatcher adp = AudioDispatcherFactory.fromDefaultMicrophone(2048, 0);
    adp.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.YIN, 44100, 2048, handler));
    adp.run();

このコードでは、最初に、検出されたピッチを単純に出力するハンドラーが作成されます。はAudioDispatcherデフォルトのマイクに接続されており、バッファ サイズは 2048 です。ピッチを検出するオーディオ プロセッサが に追加されていAudioDispatcherます。ハンドラーはそこでも使用されます。

最後の行でプロセスが開始されます。

于 2015-07-06T14:38:10.263 に答える