diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Audio/Audio.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Audio/Audio.java index f280ae0..46ec455 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Audio/Audio.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Audio/Audio.java @@ -3,22 +3,28 @@ public enum Audio { // Sound effects - OPEN_APP("/Audio/open_app.mp3"), - CLOSE_APP("/Audio/close_app.mp3"), - WARNING("/Audio/warning.mp3"), - CLOCK("/Audio/clock.mp3"), + OPEN_APP("/Audio/open_app.wav", true), + CLOSE_APP("/Audio/close_app.wav", true), + WARNING("/Audio/warning.wav", true), + CLOCK("/Audio/clock.wav", true), // Background music - WEEKEND_THEME("/Audio/weekend_theme.mp3"), - GAME_OVER_THEME("/Audio/game_over_theme.mp3"); + WEEKEND_THEME("/Audio/weekend_theme.mp3", false), + GAME_OVER_THEME("/Audio/game_over_theme.mp3", false); private String path; + private boolean isSFX; - Audio(String path) { + Audio(String path, boolean isSFX) { this.path = path; + this.isSFX = isSFX; } public String getPath() { return path; } + + public boolean isSFX() { + return isSFX; + } } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Audio/AudioManager.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Audio/AudioManager.java index 1d1bca0..df32d89 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Audio/AudioManager.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Audio/AudioManager.java @@ -1,52 +1,58 @@ package edu.ntnu.idi.idatt2003.gruppe42.Audio; +import javax.sound.sampled.*; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; - +import java.io.IOException; import java.util.EnumMap; import java.util.Map; public class AudioManager { private static final AudioManager instance = new AudioManager(); - private final Map urlCache = new EnumMap<>(Audio.class); + private final Map sfxCache = new EnumMap<>(Audio.class); private MediaPlayer bgPlayer; private AudioManager() { for (Audio audio : Audio.values()) { - var url = getClass().getResource(audio.getPath()); - urlCache.put(audio, url.toExternalForm()); + if (audio.isSFX()) { + try (var stream = getClass().getResourceAsStream(audio.getPath())) { + sfxCache.put(audio, stream.readAllBytes()); + } catch (IOException e) { + e.printStackTrace(); + } + } } } public static AudioManager getInstance() { return instance; } public void playSFX(Audio audio) { - String url = urlCache.get(audio); - - if (url == null) { - return; - } - - MediaPlayer sfxPlayer = new MediaPlayer(new Media(url)); - sfxPlayer.setOnEndOfMedia(() -> { - sfxPlayer.stop(); - sfxPlayer.dispose(); - }); + byte[] data = sfxCache.get(audio); + if (data == null) return; - sfxPlayer.play(); + new Thread(() -> { + try { + var stream = AudioSystem.getAudioInputStream( + new java.io.ByteArrayInputStream(data)); + Clip clip = AudioSystem.getClip(); + clip.open(stream); + clip.addLineListener(e -> { + if (e.getType() == LineEvent.Type.STOP) clip.close(); + }); + clip.start(); + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); } public void playBgMusic(Audio audio) { stopBgMusic(); - - String url = urlCache.get(audio); - if (url == null) { - return; - } - + var url = getClass().getResource(audio.getPath()).toExternalForm(); bgPlayer = new MediaPlayer(new Media(url)); - bgPlayer.setVolume(1); + bgPlayer.setCycleCount(MediaPlayer.INDEFINITE); + bgPlayer.setVolume(0.5); bgPlayer.play(); } diff --git a/src/main/resources/Audio/clock.mp3 b/src/main/resources/Audio/clock.mp3 deleted file mode 100644 index a0394a0..0000000 Binary files a/src/main/resources/Audio/clock.mp3 and /dev/null differ diff --git a/src/main/resources/Audio/clock.wav b/src/main/resources/Audio/clock.wav new file mode 100644 index 0000000..a8557c6 Binary files /dev/null and b/src/main/resources/Audio/clock.wav differ diff --git a/src/main/resources/Audio/close_app.mp3 b/src/main/resources/Audio/close_app.mp3 deleted file mode 100644 index a351672..0000000 Binary files a/src/main/resources/Audio/close_app.mp3 and /dev/null differ diff --git a/src/main/resources/Audio/close_app.wav b/src/main/resources/Audio/close_app.wav new file mode 100644 index 0000000..b1742fb Binary files /dev/null and b/src/main/resources/Audio/close_app.wav differ diff --git a/src/main/resources/Audio/open_app.mp3 b/src/main/resources/Audio/open_app.mp3 deleted file mode 100644 index 9a64c82..0000000 Binary files a/src/main/resources/Audio/open_app.mp3 and /dev/null differ diff --git a/src/main/resources/Audio/open_app.wav b/src/main/resources/Audio/open_app.wav new file mode 100644 index 0000000..be445ff Binary files /dev/null and b/src/main/resources/Audio/open_app.wav differ diff --git a/src/main/resources/Audio/warning.mp3 b/src/main/resources/Audio/warning.mp3 deleted file mode 100644 index 5a3ee73..0000000 Binary files a/src/main/resources/Audio/warning.mp3 and /dev/null differ diff --git a/src/main/resources/Audio/warning.wav b/src/main/resources/Audio/warning.wav new file mode 100644 index 0000000..7d7d3cf Binary files /dev/null and b/src/main/resources/Audio/warning.wav differ