Как остановить звук (во время его воспроизведения) другим способом

У меня в программе играет музыка. Я хочу, чтобы он переключал музыку в зависимости от определенных действий и т. д. Проблема в том, что моя музыка начинает воспроизводиться с одного метода, и я пытаюсь остановить ее с помощью другого метода или события действия. Другой метод не может найти мой объект клипа, потому что он не является общедоступным. Можно ли сделать этот объект клипа общедоступным для всего моего класса? Я попытался создать еще один класс только для музыки. Может ли кто-нибудь направить меня? Спасибо,

public void playsound(String filepath){
    try {
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(filepath));
            Clip clip = AudioSystem.getClip( );
            clip.open(audioInputStream);
            clip.start( );    
            }

        catch(Exception e)  {
            e.printStackTrace( );
        }
}


 public void dummyMethod(){

//when this method is call make the clip stop
}

person Cameron Roberson    schedule 26.01.2014    source источник


Ответы (3)


Почему бы вам не сделать объект Clip переменной уровня экземпляра/класса, а не просто локальной переменной, чтобы вы могли вызывать метод clip.stop() или clip.pause(), когда хотите его отключить или приостановить?

ИЗМЕНИТЬ

// declare as an instance variable
private Clip clip; 

public void playsound(String filepath){
    try {
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(filepath));
            // NOTICE: I am only initializing and NOT declaring (no capital Clip)
            clip = AudioSystem.getClip( );
            clip.open(audioInputStream);
            clip.start( );    
            }

        catch(Exception e)  {
            e.printStackTrace( );
        }
}

 // call stop method to stop clip form playing
 public void dummyMethod(){
    clip.stop();
 }
person corgichu    schedule 26.01.2014
comment
Как мне это сделать? Если я напишу Clip clip = AudioSystem.getClip(); Он не распознает его как объект. Как объявляется объект? - person Cameron Roberson; 27.01.2014
comment
Смотрите мою правку. Вы просто объявляете clip вне своего метода, а затем инициализируете его, как делали раньше. - person corgichu; 27.01.2014

Сделайте Clip clip переменной класса, затем вызовите clip.Stop() из dummyMethod

person Oleksiy Martynov    schedule 26.01.2014
comment
Что может быть примером клипа в качестве переменной класса? Клип клип = новый клип(); ? - person Cameron Roberson; 27.01.2014

Объявите переменную Clip вне методов,
просто напишите Clip clip над своими методами,

person java-love    schedule 26.01.2014