From e4664e43ef246f1657fd706ac230d2619e28cfe3 Mon Sep 17 00:00:00 2001 From: jg175 <jg175@hdm-stuttgart.de> Date: Thu, 18 Jan 2024 14:42:06 +0100 Subject: [PATCH] UPDATE: Code CleanUp SoundManager (Now called MusicPlayer), Deleted Interface --- .../hdm_stuttgart/battlearena/Main/Main.java | 9 +-- .../Model/Sound/ISoundManager.java | 16 ----- .../{SoundManager.java => MusicPlayer.java} | 68 +++++++++---------- 3 files changed, 37 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/ISoundManager.java rename src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/{SoundManager.java => MusicPlayer.java} (53%) diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java b/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java index dd93c237..96aa7223 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Main.java @@ -1,9 +1,6 @@ package de.hdm_stuttgart.battlearena.Main; -import de.hdm_stuttgart.battlearena.Model.Sound.MusicType; -import de.hdm_stuttgart.battlearena.Model.Sound.SFX; -import de.hdm_stuttgart.battlearena.Model.Sound.SoundManager; import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler; import javafx.application.Application; @@ -60,15 +57,15 @@ public class Main extends Application { stage.setScene(scene); - SoundManager soundManager = new SoundManager(); + // SoundManager soundManager = new SoundManager(); - stage.setOnCloseRequest(event -> { + /*stage.setOnCloseRequest(event -> { if (soundManager != null) { soundManager.stopMusic(); } }); - soundManager.playMusic(MusicType.GAME); + soundManager.playMusic(MusicType.GAME);*/ stage.show(); log.debug("Project started successfully!"); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/ISoundManager.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/ISoundManager.java deleted file mode 100644 index 7f31c780..00000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/ISoundManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.hdm_stuttgart.battlearena.Model.Sound; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.nio.file.Path; -import java.util.List; - -public interface ISoundManager { - - - - void playSoundEffect() throws InterruptedException, MalformedURLException; //plays sound effects only - - List<Path> getFilePathsFromResources(Path folderPath) throws IOException; // gets file-paths in a Folder as a list - -} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundManager.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java similarity index 53% rename from src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundManager.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java index 41af9877..7a8c9f1f 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/SoundManager.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java @@ -6,74 +6,60 @@ import javafx.scene.media.MediaPlayer; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; -import javafx.scene.media.AudioClip; - import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.List; -import java.util.Objects; import java.util.Random; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; import java.util.stream.Stream; -public class SoundManager implements ISoundManager { - private static final Logger log = LogManager.getLogger(SoundManager.class); +public class MusicPlayer { + private static final Logger log = LogManager.getLogger(MusicPlayer.class); - private final ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5); - private final List<SFX> soundEffectsRunning = new ArrayList<>(); private MediaPlayer mediaPlayer; - private final boolean stopLoop = false; - private List<Path> walkingSFXPaths; + //Todo Make music play - public void playMusic(MusicType musicType) throws IOException { + public void playGameMusic(MusicType musicType) throws IOException { Path pathTypeOfMusic = Paths.get(musicType.getPath()); List<Path> musicPaths = getFilePathsFromResources(pathTypeOfMusic); - Random random = new Random(); - int min = 0; - int max = musicPaths.size() - 1; - int randomIndex = random.nextInt(max - min + 1 ) + min; - String randomMusic = musicPaths.get(randomIndex).toString(); - String normalizedPath = Paths.get(randomMusic).toString().replace('\\', '/'); - String resource = normalizedPath.substring(18); - log.info(resource); + String randomPath = getRandomFilePath(musicPaths); + String resource = convertPathToResourcePath(randomPath); + playMusicLoop(resource); + } + + protected void playMusicLoop(String path ){ Thread thread = new Thread(() -> { - Media media = new Media(getClass().getResource(resource).toExternalForm()); + Media media = new Media(getClass().getResource(path).toExternalForm()); mediaPlayer = new MediaPlayer(media); mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE); mediaPlayer.play(); log.info("Music is playing"); - }); thread.setDaemon(true); thread.start(); } + public void setVolume(int volume){ + mediaPlayer.setVolume(volume / 100); + } + + public int getVolume(){ + return (int) mediaPlayer.getVolume() * 100; + } + public void stopMusic(){ if (mediaPlayer != null) { mediaPlayer.dispose(); // Dispose of the MediaPlayer instance } } - @Override - public void playSoundEffect() throws InterruptedException, MalformedURLException { - - } - - - - public List<Path> getFilePathsFromResources(Path folderPath) throws IOException { + protected List<Path> getFilePathsFromResources(Path folderPath) throws IOException { List<Path> result; try (Stream<Path> walk = Files.walk(folderPath)) { result = walk.filter(Files::isRegularFile) @@ -82,4 +68,18 @@ public class SoundManager implements ISoundManager { return result; } + protected String getRandomFilePath(List<Path> paths){ + Random random = new Random(); + int min = 0; + int max = paths.size() - 1; + int randomIndex = random.nextInt(max - min + 1 ) + min; + String randomPath = paths.get(randomIndex).toString(); + return randomPath; + } + protected String convertPathToResourcePath(String randomPath){ + String normalizedPath = Paths.get(randomPath).toString().replace('\\', '/'); + String resource = normalizedPath.substring(18); //18 = Begins at a at resourceFolder Level + return resource; + } + } -- GitLab