Java-在背景音乐上播放声音

Java-在背景音乐上播放声音,java,audio,javasound,Java,Audio,Javasound,这是我第一次发帖,希望我发帖正确 我正在为我的项目播放一首背景曲,当按下背景曲上方的一个按钮时,我正在尝试播放音效。但是,声音不会播放,bgm只会继续。请看下面我的音频课程(忽略不好的评论),并提前感谢您的帮助 package pro; import java.io.IOException; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sou

这是我第一次发帖,希望我发帖正确

我正在为我的项目播放一首背景曲,当按下背景曲上方的一个按钮时,我正在尝试播放音效。但是,声音不会播放,bgm只会继续。请看下面我的音频课程(忽略不好的评论),并提前感谢您的帮助

package pro;

import java.io.IOException;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;

public class Audio
{
    private boolean loop = false;
    private AudioInputStream ais = null;
    private static Clip clip = null;
    //declaration of variables

    public Audio (String fileName, boolean loop)
    //Constructor for the class which fileName and accepts whether the clip needs to loop or not
    {
        this.loop = loop;
        //sets the variable within the class as constructor 

        try {
            clip = AudioSystem.getClip();
            ais = AudioSystem.getAudioInputStream(Audio.class.getResource(fileName));
            clip.open(ais);

        } catch (IOException | UnsupportedAudioFileException | LineUnavailableException e) {
            e.printStackTrace();
        }
        //tries to load file into java's built in audio player, else prints the error to console
    }

    public void musicStart ()
    //starts music
    {
        if (loop)
        {
            clip.loop(Clip.LOOP_CONTINUOUSLY);
            //starts music on loop if loop is requested
        }
        else
        {
            clip.start();
            //starts music as not on loop
        }

    }


    public void musicStop ()
    //stops the music
    {
        clip.stop();
    }

}

编辑:多亏了MadProgrammer,我找到了解决问题的方法,只需从剪辑中删除静态。

摆脱
剪辑的
静态声明。
Audio
的每个实例都应该是自包含的,并指向它自己的
Clip


基本上,
static
将使
Clip
始终指向加载的最后一个声音文件,这并不是您真正想要的,因为当您调用
stopMusic
时,你不知道你真的在停止哪个剪辑,或者你是否真的在停止任何东西

我建议在
clip
变量上使用
static
,即使使用可疑的
static
clip
引用,也无助于测试你的
Audio
类,它仍然可以播放两种声音…非常感谢,显然这有助于解决问题。只是出于好奇,你知道为什么会这样吗?(我希望我能投你一票,但我认为我的排名太低)再次感谢你的帮助@qwertyderp音乐/声音很有趣…尤其是在凌晨2点!