gpt4 book ai didi

Java 声音在我停止后不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:51:04 24 4
gpt4 key购买 nike

这只是测试文件,我有我的 Sound 类,我从另一个主类调用它。它播放了 3 秒,然后停止,然后不再播放。可能是什么问题?

这让我发疯。

声级

public class Sound {

private static URL url1, url2, url3, url4;
private static AudioClip gun, boom;
private static Clip menuClip, gameClip;
private static AudioInputStream menu, game;

public static boolean menuPlaying, gamePlaying, explosionOn;

public Sound() {
menuPlaying = false;
gamePlaying = false;
url1 = Sound.class.getResource("/laserSound.wav");

url2 = Sound.class.getResource("/boom.wav");

url3 = Sound.class.getResource("/adventure.wav");

url4 = Sound.class.getResource("/adventure.wav");

gun = Applet.newAudioClip(url1);

boom = Applet.newAudioClip(url2);

try {
game = AudioSystem.getAudioInputStream(url4);
//menu = AudioSystem.getAudioInputStream(url3);
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void playGunSound() {
gun.play();
}

public void stopGunSound() {
gun.stop();
}

public void playExplosion() {
boom.stop();
boom.play();
}

public void stopExplosion() {
boom.stop();
}
public void playGameMusic() throws LineUnavailableException {
if (gamePlaying == false) {
gameClip = AudioSystem.getClip();
try {
gameClip.open(game);
} catch (
LineUnavailableException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
gameClip.start();
gameClip.loop(Clip.LOOP_CONTINUOUSLY);
gamePlaying = true;
}
}

public void stopGameMusic() {
gameClip.stop();
gamePlaying = false;

}

}

主要方法

public static void main(String[] args) throws LineUnavailableException, InterruptedException {
Sound sound = new Sound();
sound.playGameMusic();
TimeUnit.SECONDS.sleep(3);
sound.stopGameMusic();
TimeUnit.SECONDS.sleep(3);
sound.playGameMusic();
}

最佳答案

代码现在的样子,有一些奇怪的东西需要清理。

首先,最好将 gameClip.open 放在一个单独的方法中。您只需打开一次 Clip。只要不关闭,就可以随意启动和停止。就目前而言,每次播放都会打开剪辑,每次执行此操作时,都必须在播放剪辑之前将整个声音文件加载到内存中。这违背了 Clip 对象的目的。

其次,开始后跟循环是多余的。两者都会播放剪辑。如果想连续循环播放,直接调用loop方法即可,不用start。

清理完这两件事后,让我们重新访问代码,看看问题是否已经消失。我不清楚发生的问题是由于特定错误还是您的两个冗余代码操作之一造成了未定义/意外情况。

您看过 Clip API 了吗?

我对 AudioClip 没有经验。但是我已经成功地使用了 Clip。

关于Java 声音在我停止后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42430550/

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