0

TarsosDSP ライブラリを使用して .wav ファイルからピッチを検出しようとしていますが、周波数の結果は常に半分未満です。

これが私のコードです。

    public class Main {

public static void main(String[] args){
    try{
        float sampleRate = 44100;
        int audioBufferSize = 2048;
        int bufferOverlap = 0;

        //Create an AudioInputStream from my .wav file
        URL soundURL = Main.class.getResource("/DetectPicthFromWav/329.wav");
        AudioInputStream stream = AudioSystem.getAudioInputStream(soundURL);

        //Convert into TarsosDSP API
        JVMAudioInputStream audioStream = new JVMAudioInputStream(stream);
        AudioDispatcher dispatcher = new AudioDispatcher(audioStream, audioBufferSize, bufferOverlap);
        MyPitchDetector myPitchDetector = new MyPitchDetector();
        dispatcher.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.YIN, sampleRate, audioBufferSize, myPitchDetector));
        dispatcher.run();


    }
    catch(FileNotFoundException fne){fne.printStackTrace();}
    catch(UnsupportedAudioFileException uafe){uafe.printStackTrace();}
    catch(IOException ie){ie.printStackTrace();}
}
}

    class  MyPitchDetector implements PitchDetectionHandler{

//Here the result of pitch is always less than half.
@Override
public void handlePitch(PitchDetectionResult pitchDetectionResult,
        AudioEvent audioEvent) {
    if(pitchDetectionResult.getPitch() != -1){
        double timeStamp = audioEvent.getTimeStamp();
        float pitch = pitchDetectionResult.getPitch();
        float probability = pitchDetectionResult.getProbability();
        double rms = audioEvent.getRMS() * 100;
        String message = String.format("Pitch detected at %.2fs: %.2fHz ( %.2f probability, RMS: %.5f )\n", timeStamp,pitch,probability,rms);
        System.out.println(message);
    }
}
}

329.wav ファイルは、http://onlinetonegenerator.com/ Web サイトから 329Hz で生成されます。結果のピッチが常に 164.5Hz になる理由がわかりません。私のコードに問題はありますか?

4

2 に答える 2

0

どのような方法を使用しているかはわかりませんが、周波数が正確に半分になっていることを確認すると、間違ったサンプルレートが設定されている可能性がありますか?

ほとんどの操作は、信号がサンプリングされたときの初期サンプル レートを想定しています。おそらく、引数として渡した (またはデフォルト値は) その半分ですか?

于 2016-04-04T16:22:33.710 に答える