繁体   English   中英

为什么方法不更新变量值?

[英]Why is method not updating variable value?

我正在使用tarsos DSP Java API。 有人可以告诉我为什么以下代码中的freq()方法未更新float pitchInHz吗? 有人可以告诉我要进行哪些更改才能使它正常工作,因为我不明白为什么不这样做。

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();
            }
        }
    });
}

}

大概是因为pitchInHz = result.getPitch(); 在您执行pitch.getPitch()时尚未执行。 这是完全可能的,因为这段代码是在新线程中并发执行的,并且在该线程启动后立即调用pitch.getPitch() ,而不给库任何时间执行回调。

由于float pitchInHz;该方法返回0 float pitchInHz;返回0 float pitchInHz; 等于float pitchInHz = 0.0f;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM