1
我已經可以得到操作系統標準輸入設備的字節流。我現在想在程序已經運行時更改輸入設備。如何在Java程序執行時更改音頻輸入設備?
也就是說代碼即可獲得標準輸入設備的TargetDataLine的/輸入流(它的工作原理):
dataLineInfo = new DataLine.Info(TargetDataLine.class , getAudioFormat()) ;
targetDataLine = (TargetDataLine)AudioSystem.getLine(dataLineInfo ) ;
targetDataLine.open(getAudioFormat());
targetDataLine.start();
我還可以得到所有可用的輸入設備的列表,並給他們出的組合框選擇其它輸入設備(它的工作原理):
Mixer.Info[] mixerInfo;
mixerInfo = AudioSystem.getMixerInfo();
Line.Info targetDLInfo = new Line.Info(TargetDataLine.class);
for(int cnt = 0; cnt < mixerInfo.length; cnt++) {
Mixer currentMixer = AudioSystem.getMixer(mixerInfo[cnt]);
if(currentMixer.isLineSupported(targetDLInfo)) {
combo1.addItem(mixerInfo[cnt].getName());
}
}
這就是我如何改變輸入設備(它不工作)的代碼
if(e.getSource() == combo1){
System.out.println("Gewählter Input: " + combo1.getSelectedItem());
Mixer.Info[] mixerInfo;
mixerInfo = AudioSystem.getMixerInfo();
Line.Info targetDLInfo = new Line.Info(TargetDataLine.class);
for(int cnt = 0; cnt < mixerInfo.length; cnt++) {
Mixer currentMixer = AudioSystem.getMixer(mixerInfo[cnt]);
if(mixerInfo[cnt].getName() == combo1.getSelectedItem().toString()) {
System.out.println("Gewählter Input gefunden");
targetDataLine.close();
dataLineInfo = new DataLine.Info(TargetDataLine.class , getAudioFormat()) ;
try {
targetDataLine = (TargetDataLine) currentMixer.getLine(dataLineInfo) ;
targetDataLine.open(getAudioFormat());
targetDataLine.start();
} catch (LineUnavailableException e1) {
e1.printStackTrace();
}
}}
}
事實上,我認爲我只是在最後一部分犯了一個小錯誤,但我不知道是什麼錯誤。如果我切換到另一個音頻輸入設備,我只聽到一聲小小的嘟嘟聲,然後什麼都沒有。如果我切換回主音頻設備,我可以再次聽到輸入。我沒有得到任何錯誤。
我做錯了什麼?