gpt4 book ai didi

java - 在 Java 中启动和停止音乐文件?

转载 作者:行者123 更新时间:2023-11-30 08:12:45 26 4
gpt4 key购买 nike

这是我的声音课。

public class Sounds extends Thread { 

private String filename;
private Position curPosition;
private final int EXTERNAL_BUFFER_SIZE = 524288;

enum Position {
LEFT, RIGHT, NORMAL
};

public Sounds(String wavFile) {
filename = wavFile;
curPosition = Position.NORMAL;
}

public Sounds(String wavfile, Position p) {
filename = wavfile;
curPosition = p;
}

public void run() {

File soundFile = new File(filename);
if (!soundFile.exists()) {
System.err.println(".wav file not found: " + filename);
return;
}

AudioInputStream audioInputStream = null;
try {
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
} catch (UnsupportedAudioFileException e1) {
e1.printStackTrace();
return;
} catch (IOException e1) {
e1.printStackTrace();
return;
}

AudioFormat format = audioInputStream.getFormat();
SourceDataLine auline = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

try {
auline = (SourceDataLine) AudioSystem.getLine(info);
auline.open(format);
} catch (LineUnavailableException e) {
e.printStackTrace();
return;
} catch (Exception e) {
e.printStackTrace();
return;
}

if (auline.isControlSupported(FloatControl.Type.PAN)) {
FloatControl pan = (FloatControl) auline
.getControl(FloatControl.Type.PAN);
if (curPosition == Position.RIGHT)
pan.setValue(1.0f);
else if (curPosition == Position.LEFT)
pan.setValue(-1.0f);
}

auline.start();
int nBytesRead = 0;
byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];

try {
while (nBytesRead != -1) {
nBytesRead = audioInputStream.read(abData, 0, abData.length);
if (nBytesRead >= 0)
auline.write(abData, 0, nBytesRead);
}
} catch (IOException e) {
e.printStackTrace();
return;
} finally {
auline.drain();
auline.close();
}
}
}

这是我的 ActionListener,我想在用户单击按钮时停止音乐。启动时播放音乐。

btnSound.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
btnSound.setVisible(false);
btnNoSound.setVisible(true);
new Sounds("Sounds/MenuMusic.wav").end();
}
});

我可以让音乐正常播放,但我不知道如何停止它。我尝试使用 .stop() 和 .end() 但我被告知它们已被弃用。有人知道我该怎么做吗?谢谢。

最佳答案

您可以使用剪辑类。这是我读取 .wav 文件并播放它的代码:

try {
File file = new File(src); // src is the location of the file
AudioInputStream stream = AudioSystem.getAudioInputStream(file);
Clip clip = AudioSystem.getClip();
clip.open(stream);
clip.start();
} catch (Exception e) {
e.printStackTrace();
}

那就是,clip.stop()将停止剪辑。要重置剪辑,请使用 clip.setFramePosition(0) 。请注意clip不需要关闭,因为如果 clip.close()clip.start() 之后调用,该剪辑将不会播放。

希望这就是您正在寻找的!

编辑:范围界定

使用 Java 中的作用域,如果在方法中声明局部变量,则无法在方法外部访问它。如果您想在主方法之外访问该剪辑,请将其提取到字段中:

class Main {
static Clip clip;
public static void main (String... args) {
try {
File file...
clip = AudioSystem.getClip();
...
} catch...
}
}

关于java - 在 Java 中启动和停止音乐文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30145570/

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