如何以不同于制作音频的方法暂停和恢复音频?

时间:2019-03-30 02:21:19

标签: java audio

我正在尝试制作游戏,并试图制作“静音”和“取消静音”按钮,但是我无法弄清楚如何制作,因此,当您按下该按钮时,它会停止在程序的开始。 (当然使用不同的方法)。 我试图将剪辑和音频公开,但是我不断收到错误消息,我不确定为什么。

public class TowerDefense 
{
    String filepath = "MenuTheme.wav";
    private Clip clip;
void playMusic(String musicLocation) 
{
    try{
        File musicPath = new File(musicLocation);

        if(musicPath.exists())
        {
        AudioInputStream audioInput = AudioSystem.getAudioInputStream(musicPath);
        clip = AudioSystem.getClip();
        clip.open(audioInput);
        clip.start();
        clip.loop(Clip.`LOOP_CONTINUOUSLY`);
        }
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
}
void pauseMusic(String musicLocation2)
{
long clipTimePosition = clip.getMicrosecondPosition();
clip.stop();    
}
==============
//this is in a different private method called Options
panel.setButtonsActionListener2(**new** ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e){
    frame.dispose();
        TowerDefense musicObject = new TowerDefense();
        musicObject.pauseMusic(filepath);
    Options();
        }
    });

我期望剪辑的输出停止,然后您可以使其再次播放或保持静音。在这种情况下,当我按下“静音”按钮时,它只是说错误。

1 个答案:

答案 0 :(得分:0)

因此,在单击静音按钮时运行的代码中,您正在创建一个新的TowerDefense对象,该对象提供了音乐的文件路径。这就是问题所在。程序中已经存在正在播放的剪辑。创建新的TowerDefense对象不会自动为您提供正在播放的剪辑的访问权限。

请确保在调用playMusic方法的同一对象上调用pauseMusic方法。

因此,如果您已经在程序中创建了一个TowerDefense对象并调用了playMusic,则为操作侦听器提供对该对象的访问权限,并使用现有的对象来调用pauseMusic。