#java #audio
#java #Аудио
Вопрос:
Я пытаюсь создать игру и пытаюсь сделать кнопки «отключить звук» и «включить звук», но я не могу понять, как сделать так, чтобы при нажатии кнопки останавливался тот же клип, который воспроизводится в начале программы. (используя другие методы, конечно). Я попытался сделать клип и аудио общедоступными, но я продолжаю получать сообщение об ошибке, и я не уверен, почему.
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. хорошо, одну секунду, это новая java?? я пропустил большую революцию?? /**long**/
2. извините, я избавился от них сейчас
Ответ №1:
Итак, в коде, который запускается при нажатии кнопки отключения звука, вы создаете новый объект TowerDefense, которому предоставляется путь к файлу музыки. Вот в чем проблема с этим. Клип, который уже воспроизводится, существует в программе. Создание нового объекта TowerDefense автоматически не предоставит вам доступ к воспроизводимому клипу.
Убедитесь, что вы вызываете метод pauseMusic для того же объекта, где вы вызывали метод PlayMusic.
Таким образом, если вы уже создали объект TowerDefense в программе и вызвали PlayMusic, то предоставьте вашему action listener доступ к этому объекту и используйте существующий объект для вызова pauseMusic.