gpt4 book ai didi

Java TargetDataLine 和 SourceDataLine 重新打开不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:43 25 4
gpt4 key购买 nike

我的设置如下:

我有一个在浏览器中运行的 Java 小程序,用于录制和播放音频。

我的问题是:

当我刷新浏览器时,SourceDataLine 会在刷新后正确重新打开,而 TargetDataLine 不会自行重新打开。

public void init() {
try {
DataLine.Info sourceDataLineInfo = new DataLine.Info(
SourceDataLine.class, audioFormat);
DataLine.Info targetDataLineInfo = new DataLine.Info(
TargetDataLine.class, audioFormat);

// Setup a Line.Info instance specifically of the TargetDataLine class.
Line.Info targetDLInfo = new Line.Info(TargetDataLine.class);
Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
Mixer currentMixer = null;

try {

for(int cnt = 0; cnt < mixerInfo.length; cnt++) {
// Get a temporary instance of the current mixer
currentMixer = AudioSystem.getMixer(mixerInfo[cnt]);

if( currentMixer.isLineSupported(targetDLInfo) ) {
Log.log("Found mixer:" + mixerInfo[cnt].getName());
System.out.println(mixerInfo[cnt].getName());
break;
}

//currentMixer = null;

}
} catch(Exception e) {
Log.log("Found no mixer");
}

if(!Client.refresh) {

try {
sourceDataLine = (SourceDataLine) AudioSystem
.getLine(sourceDataLineInfo);
}catch(Exception e){
Log.log("Unable to stream audio not starting playthread");
}

play = new PlayThread();

if(sourceDataLine != null) {
sourceDataLine.open(audioFormat);
sourceDataLine.start();

play.start();
}


try {
targetDataLine = (TargetDataLine) currentMixer.getLine(targetDataLineInfo);
}catch(Exception e) {
connection.addMessage("[WARNING] Your microphone is not working.");
}


capture = new CaptureThread();

if(currentMixer != null) {
if(targetDataLine != null) {

targetDataLine.open(audioFormat);
targetDataLine.start();
capture.start();
}
}else {
connection.addMessage("[WARNING] No compatible microphone found.");
Log.log("Not able to record data since no mixer was found");
}

} else {
sourceDataLine.open(audioFormat);
sourceDataLine.start();
targetDataLine.open(audioFormat);
targetDataLine.start();
}

} catch (Exception e) {
Log.log("An exception occured when trying to startup the audio");
}

}

我的代码有什么问题吗?

最佳答案

正如Andrew所说,您需要关闭打开的sourceDataline和TargetData线。当您刷新浏览器时,init() 会再次被调用,因为它是小程序的新实例。如果数据线已经打开并且您尝试再次打开它,它会抛出异常“不支持线路:audioFormat”。由于每次结束小程序实例时都会调用 destroy(),因此您需要处理其中打开的数据行的关闭。

关于Java TargetDataLine 和 SourceDataLine 重新打开不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13511419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com