[英]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.