From 3305ed67200e7cd32a0410ec877c7e7e8b594a34 Mon Sep 17 00:00:00 2001 From: p6xlcrq3f <2020134472@qq.com> Date: Sun, 6 Apr 2025 21:22:16 +0800 Subject: [PATCH] ADD file via upload --- MusicPlayer.java | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 MusicPlayer.java diff --git a/MusicPlayer.java b/MusicPlayer.java new file mode 100644 index 0000000..df33804 --- /dev/null +++ b/MusicPlayer.java @@ -0,0 +1,69 @@ +package cn.edu.caztc.sokobangame; + +import javax.sound.sampled.*; +import java.io.File; + +public class MusicPlayer { + private static MusicPlayer instance; + private Clip clip; + private int currentTrackIndex = -1; + private boolean isMuted = true; + + public int getCurrentTrackIndex() { + return currentTrackIndex; + } + + private MusicPlayer() {} + + public static synchronized MusicPlayer getInstance() { + if (instance == null) { + instance = new MusicPlayer(); + } + return instance; + } + + public void playMusic(int index) { + if (index < 0 || index >= MapConfig.MUSIC_FILES.length) return; + + stopMusic(); + currentTrackIndex = index; + isMuted = false; + + try { + AudioInputStream audioInput = AudioSystem.getAudioInputStream( + new File(MapConfig.MUSIC_PATH + MapConfig.MUSIC_FILES[index])); + clip = AudioSystem.getClip(); + clip.open(audioInput); + clip.loop(Clip.LOOP_CONTINUOUSLY); + clip.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void stopMusic() { + if (clip != null && clip.isRunning()) { + clip.stop(); + clip.close(); + } + isMuted = true; + } + + public void toggleMute() { + if (isMuted) { + playMusic(currentTrackIndex); + } else { + stopMusic(); + } + } + + public void nextTrack() { + if (currentTrackIndex == -1) return; + int newIndex = (currentTrackIndex + 1) % MapConfig.MUSIC_FILES.length; + playMusic(newIndex); + } + + public boolean isMuted() { + return isMuted; + } +} \ No newline at end of file