0

tarsos DSP Java API を使用しています。次のコードでメソッド freq() によって浮動小数点の pitchInHz が更新されない理由を誰か教えてもらえますか? なぜそうでないのかわかりません.Thanks

public class trial extends JFrame{
File f = new File("RecordAudio.wav");
static JLabel lblNewLabel = new JLabel("New label");
float pitchInHz;
public trial(){
    getContentPane().setLayout(new GridLayout(1, 0, 0, 0));
    getContentPane().add(lblNewLabel);
    run();
    freq();
    float values = freq();
    System.out.print(values);

}
public void run(){
    AudioDispatcher dispatcher = null;
    try {
        dispatcher = AudioDispatcherFactory.fromFile(f, 1024, 0);
    } catch (UnsupportedAudioFileException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    AudioProcessor p = new PitchProcessor(PitchEstimationAlgorithm.FFT_YIN, 48000, 1024, pdh);
    dispatcher.addAudioProcessor(p);
    new Thread(dispatcher,"Audio Dispatcher").start();


}
public float freq(){
    return pitchInHz;
}

PitchDetectionHandler pdh = new PitchDetectionHandler() {

    public void handlePitch(PitchDetectionResult result,AudioEvent e) {

                float pitchInHz = result.getPitch();
                lblNewLabel.setText("" + pitchInHz);
                //System.out.print(pitchInHz);  
    }

};


public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                trial frame = new trial();
                frame.setVisible(true);
                frame.setSize(500, 500);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

}

4

1 に答える 1

0

おそらく、pitchInHz = result.getPitch();実行するまでに が実行されていないためpitch.getPitch()です。そのコードの一部は新しいスレッドで同時に実行され、pitch.getPitch()そのスレッドが開始された直後に呼び出され、ライブラリにコールバックを実行する時間を与えないため、これは完全に可能です。

float pitchInHz;と同じであるため、メソッドは 0 を返しました。float pitchInHz = 0.0f;

于 2016-03-29T11:59:39.553 に答える