gpt4 book ai didi

java - JAVA中.wav文件的声音随机停止

转载 作者:行者123 更新时间:2023-12-01 14:00:15 25 4
gpt4 key购买 nike

我试图在java中创建一个播放某些声音的类,但是声音在随机时刻停止而不是在结束时停止。它为什么要这么做?预先感谢!

这是我的代码:

import java.io.File;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
import javax.swing.JDialog;
import javax.swing.JFileChooser;

public class CoreJavaSound extends Object implements LineListener {
File soundFile;

JDialog playingDialog;

Clip clip;

public static void main(String[] args) throws Exception {
PlayBow();

}

public CoreJavaSound(String fileName) throws Exception {
JFileChooser chooser = new JFileChooser();

soundFile = new File(fileName);


System.out.println("Playing " + soundFile.getName());

Line.Info linfo = new Line.Info(Clip.class);
Line line = AudioSystem.getLine(linfo);
clip = (Clip) line;
clip.addLineListener(this);
AudioInputStream ais = AudioSystem.getAudioInputStream(soundFile);
clip.open(ais);
clip.start();
}

@Override
public void update(LineEvent le) {
LineEvent.Type type = le.getType();
if (type == LineEvent.Type.OPEN) {
System.out.println("OPEN");
} else if (type == LineEvent.Type.CLOSE) {
System.out.println("CLOSE");
System.exit(0);
} else if (type == LineEvent.Type.START) {
System.out.println("START");
playingDialog.setVisible(true);
} else if (type == LineEvent.Type.STOP) {
System.out.println("STOP");
playingDialog.setVisible(false);
clip.close();
}
}

public static void PlayBow() throws Exception
{
CoreJavaSound s = new CoreJavaSound("Bow.wav");
}
}

一切正常,除了声音在大约 1 秒后停止工作(而文件为 5 秒)...

最佳答案

剪辑在后台线程上启动,不是阻塞调用。它在后台播放。因此程序终止,而剪辑未完成播放。

尝试这样的事情:

  ...
static boolean running = false;

public static void main(String[] args) throws Exception {
playBow();
while(running) {
Thread.sleep(200);
}
}
...
@Override
public void update(LineEvent le) {
LineEvent.Type type = le.getType();
if (type == LineEvent.Type.OPEN) {
running = true;
System.out.println("OPEN");
} else if (type == LineEvent.Type.CLOSE) {
System.out.println("CLOSE");
} else if (type == LineEvent.Type.START) {
System.out.println("START");
playingDialog.setVisible(true);
} else if (type == LineEvent.Type.STOP) {
System.out.println("STOP");
playingDialog.setVisible(false);
clip.close();
running = false;
}
}

请注意,此示例并不是此问题的最佳解决方案。这只是一个例子。

关于java - JAVA中.wav文件的声音随机停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389628/

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