gpt4 book ai didi

java - 在 Java 中使用 AudioPlayer

转载 作者:行者123 更新时间:2023-11-30 06:35:38 24 4
gpt4 key购买 nike

在我的 swing 应用程序中,我使用类在单击鼠标时播放声音。我遇到的问题是,当我调用类(class)时,声音只播放一次,而当突然单击另一个按钮时,它不会播放声音。我尝试在我的代码中延迟,但 id 仍然无法按预期工作。这与线程有关吗?我不擅长线程,所以请告诉我该怎么做。我使用的代码如下,

package utilities;  
import java.applet.AudioClip;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import sun.audio.AudioData;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;
public class Tone {`

File wavFile = new File("sounds/Windows Default.wav");
URL urlClick = Tone.class.getResource("/sounds/WindowsDefault.wav");
AudioClip sound;
public void sound() {
AudioStream as = null;
try {

InputStream in = this.getClass().getResourceAsStream("/sounds/WindowsDefault.wav");
as = new AudioStream(in);
AudioData data = as.getData();
// Create ContinuousAudioDataStream.
ContinuousAudioDataStream cas = new ContinuousAudioDataStream (data);
//System.out.println(as.getLength());
AudioPlayer.player.start(cas);

//System.out.println(urlClick);
//sound = Applet.newAudioClip(urlClick);
//this.wait(1000);
for(int i =0;i<100000;i++){
double k = Math.pow(i, 5);
if(i==99999){
AudioPlayer.player.stop(cas);
return;
}
}
// sound.play();
String relativeDirectory = System.getProperty("user.dir");
System.out.println(relativeDirectory);

} catch (IOException ex) {
Logger.getLogger(Tone.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
as.close();
} catch (IOException ex) {
Logger.getLogger(Tone.class.getName()).log(Level.SEVERE, null, ex);
}

}

}

public static void main(String[] args) {
Tone tone = new Tone();
tone.sound();
System.out.println("done");

}
}

--编辑--我使用 continuousaudiostream 的原因是因为当我使用这个至少听到一些声音时,声音根本没有发生。即使当我使用 AudioStream 时,问题仍然存在..

最佳答案

1) 最好不要使用隐藏类/api - 因为您已经阅读了您在其他问题中获得的链接:-)

2) 在重新启动/重新打开之前停止/关闭已经运行的声音,在公共(public) api 中类似于:

Clip clip;

private void doPlay(final String url) {
try {
stopPlay();
AudioInputStream inputStream = AudioSystem
.getAudioInputStream(getClass().getResourceAsStream(url));
clip = AudioSystem.getClip();
clip.open(inputStream);
clip.start();
} catch (Exception e) {
stopPlay();
System.err.println(e.getMessage());
}
}

private void stopPlay() {
if (clip != null) {
clip.stop();
clip.close();
clip = null;
}
}

(注:完全关闭仅供说明,细化逻辑加载一次然后停止/重新启动)

关于java - 在 Java 中使用 AudioPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5804811/

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