gpt4 book ai didi

java - 在 Java 中播放 .wav 歌曲?

转载 作者:行者123 更新时间:2023-11-30 09:06:25 37 4
gpt4 key购买 nike

我想在我的 Java 游戏中播放 .wav 格式的歌曲,下面是 SoundPlayer 类的一些代码:

private static HashMap<String, Clip> clips;
private static int gap;

public static void init() {
clips = new HashMap<String, Clip>();
gap = 0;
}

public static void load(String s, String n) {
if(clips.get(n) != null) return;
Clip clip;
try {
InputStream in = SoundPlayer.class.getResourceAsStream(s);
InputStream bin = new BufferedInputStream(in);
AudioInputStream ais = AudioSystem.getAudioInputStream(bin);
AudioFormat baseFormat = ais.getFormat();
AudioFormat decodeFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);
AudioInputStream dais = AudioSystem.getAudioInputStream(decodeFormat, ais);
clip = AudioSystem.getClip();
clip.open(dais);
clips.put(n, clip);
} catch(Exception e) {
e.printStackTrace();
}
}

当我调用 load() 方法时,它在 clip.open(dais) 行崩溃,我得到了这个错误:javax.sound.sampled.LineUnavailableException:分配剪辑数据失败:请求的缓冲区太大。

这适用于短音效,所以我猜这是因为文件超过一分钟长。有没有更好的方法来做到这一点?

谢谢!

最佳答案

过去我在让声音在 Java 中工作时遇到过一些麻烦。这是加载 .wav 声音片段的好方法。

private Clip clip;

public Sound(String fileName)
{
try
{
File file = new File(fileName);
if (file.exists())
{
AudioInputStream sound = AudioSystem.getAudioInputStream(file);
clip = AudioSystem.getClip();
clip.open(sound);
}
else
{
throw new RuntimeException("Sound: file not found: " + fileName);
}
}
catch (UnsupportedAudioFileException e)
{
e.printStackTrace();
throw new RuntimeException("Sound: Unsupported Audio File: " + e);
}
catch (IOException e)
{
e.printStackTrace();
throw new RuntimeException("Sound: Input/Output Error: " + e);
}
}

public void play()
{
clip.setFramePosition(0);
clip.start();
}
public void loop()
{
clip.loop(Clip.LOOP_CONTINUOUSLY);
}
public void stop()
{
clip.stop();
}

我发现这很好用!如果您愿意,也可以添加更多异常,例如 LineUnavailableException 和 MalformedURLException。要创建声音剪辑,您可以这样制作:

private Sound sound = new Sound("/sounds/sound.wav");

然后做

sound.play();

关于java - 在 Java 中播放 .wav 歌曲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481887/

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