我正在使用tarsos DSP java API。有人能告诉我为什么float pitchInHz不会被以下代码中的方法freq()更新吗?有人可以告诉我要改变什么来让它发挥作用,因为我不明白为什么它不是。谢谢
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();
}
}
});
}
}
答案 0 :(得分:0)
大概是因为pitchInHz = result.getPitch();
在执行pitch.getPitch()
时尚未执行。这是完全可能的,因为这段代码在新线程中同时执行,并且在该线程启动后立即调用pitch.getPitch()
,而不是让库随时执行回调。
方法返回0,因为float pitchInHz;
与float pitchInHz = 0.0f;