Skip to content

Commit

Permalink
Merge pull request #101 from einaskoi/einar/Audio
Browse files Browse the repository at this point in the history
add working audio system and weekend and work themes
  • Loading branch information
peretr authored May 14, 2026
2 parents e3fcf48 + 199bfd8 commit 3c2fe1b
Show file tree
Hide file tree
Showing 14 changed files with 97 additions and 41 deletions.
24 changes: 24 additions & 0 deletions src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Audio/Audio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package edu.ntnu.idi.idatt2003.gruppe42.Audio;

public enum Audio {

// Sound effects
OPEN_APP("/Audio/open_app.wav"),
CLOSE_APP("/Audio/close_app.wav"),
CLOCK("/Audio/clock.wav"),
TRANSACTION("/Audio/transaction.wav"),

// Background music
WORK_THEME("/Audio/work_theme.mp3"),
WEEKEND_THEME("/Audio/weekend_theme.mp3");

private String path;

Audio(String path) {
this.path = path;
}

public String getPath() {
return path;
}
}
Original file line number Diff line number Diff line change
@@ -1,39 +1,60 @@
package edu.ntnu.idi.idatt2003.gruppe42.Audio;

import javafx.scene.media.AudioClip;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

import java.util.EnumMap;
import java.util.Map;

public class AudioManager {

private static AudioManager instance = new AudioManager();
private Map<SoundEffect, AudioClip> sounds = new EnumMap<>(SoundEffect.class);
private double volume = 1.0;
private static final AudioManager instance = new AudioManager();
private final Map<Audio, String> urlCache = new EnumMap<>(Audio.class);
private MediaPlayer bgPlayer;

public AudioManager() {
private AudioManager() {
for (Audio audio : Audio.values()) {
var url = getClass().getResource(audio.getPath());
urlCache.put(audio, url.toExternalForm());
}
}

for (SoundEffect effect : SoundEffect.values()) {
public static AudioManager getInstance() { return instance; }

AudioClip clip = new AudioClip(
getClass()
.getResource(effect.getPath())
.toExternalForm()
);
public void playSFX(Audio audio) {
String url = urlCache.get(audio);

sounds.put(effect, clip);
if (url == null) {
return;
}
}

public static AudioManager getInstance() {
return instance;
MediaPlayer sfxPlayer = new MediaPlayer(new Media(url));
sfxPlayer.setOnEndOfMedia(() -> {
sfxPlayer.stop();
sfxPlayer.dispose();
});

sfxPlayer.play();
}

public void play(SoundEffect sound) {
AudioClip audioClip = sounds.get(sound);
public void playBgMusic(Audio audio) {
stopBgMusic();

String url = urlCache.get(audio);
if (url == null) {
return;
}

bgPlayer = new MediaPlayer(new Media(url));
bgPlayer.setVolume(1);
bgPlayer.play();
}

if (audioClip != null) {
audioClip.play(volume);
public void stopBgMusic() {
if (bgPlayer != null) {
bgPlayer.stop();
bgPlayer.dispose();
bgPlayer = null;
}
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package edu.ntnu.idi.idatt2003.gruppe42.Controller.AppControllers;

import edu.ntnu.idi.idatt2003.gruppe42.Audio.AudioManager;
import edu.ntnu.idi.idatt2003.gruppe42.Audio.Audio;
import edu.ntnu.idi.idatt2003.gruppe42.Controller.MarketController;
import edu.ntnu.idi.idatt2003.gruppe42.Model.Player;
import edu.ntnu.idi.idatt2003.gruppe42.Model.Stock;
Expand Down Expand Up @@ -27,6 +29,7 @@ public final class StockAppController implements AppController {
private final StockApp stockApp;
private final Player player;
private Stock currentStock;
private AudioManager audioManager = AudioManager.getInstance();

/**
* Constructs a new StockAppController.
Expand Down Expand Up @@ -65,7 +68,10 @@ public StockAppController(
}
});

stockApp.getConfirmButton().setOnAction(e -> handleTransaction());
stockApp.getConfirmButton().setOnAction(e -> {
audioManager.playSFX(Audio.TRANSACTION);
handleTransaction();
});
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package edu.ntnu.idi.idatt2003.gruppe42.Controller;

import edu.ntnu.idi.idatt2003.gruppe42.Audio.Audio;
import edu.ntnu.idi.idatt2003.gruppe42.Audio.AudioManager;
import edu.ntnu.idi.idatt2003.gruppe42.Controller.AppControllers.AppController;
import edu.ntnu.idi.idatt2003.gruppe42.Model.GameState;

Expand All @@ -15,6 +17,9 @@ public final class GameController {
private final List<AppController> appControllers = new ArrayList<>();
private Timer timer;
private GameState gameState;
private AudioManager audioManager = AudioManager.getInstance();
private boolean workMusicPlaying = false;
private boolean weekendMusicPlaying = false;

/**
* Adds an application controller to the list of controllers to be updated.
Expand All @@ -28,6 +33,17 @@ public void addAppController(final AppController appController) {
public void setGameState(GameState gameState) {
this.gameState = gameState;

if (gameState == GameState.WORKDAY && !workMusicPlaying) {
audioManager.playBgMusic(Audio.WORK_THEME);
workMusicPlaying = true;
weekendMusicPlaying = false;
}

if ((gameState == GameState.RENTDAY || gameState == GameState.FREEDAY) && !weekendMusicPlaying) {
audioManager.playBgMusic(Audio.WEEKEND_THEME);
weekendMusicPlaying = true;
workMusicPlaying = false;
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package edu.ntnu.idi.idatt2003.gruppe42.Controller;

import edu.ntnu.idi.idatt2003.gruppe42.Audio.AudioManager;
import edu.ntnu.idi.idatt2003.gruppe42.Audio.SoundEffect;
import edu.ntnu.idi.idatt2003.gruppe42.Audio.Audio;
import edu.ntnu.idi.idatt2003.gruppe42.Model.App;
import edu.ntnu.idi.idatt2003.gruppe42.View.Popup;
import java.util.List;
Expand Down Expand Up @@ -38,7 +38,7 @@ public boolean show(App type) {
popup.getRoot().autosize();
popup.getRoot().toFront();
});
audioManager.play(SoundEffect.OPEN_APP);
audioManager.playSFX(Audio.OPEN_APP);
return true;
}

Expand All @@ -47,7 +47,7 @@ public boolean hide(Popup popup) {
return false;
}
popup.getRoot().setVisible(false);
audioManager.play(SoundEffect.CLOSE_APP);
audioManager.playSFX(Audio.CLOSE_APP);
return true;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package edu.ntnu.idi.idatt2003.gruppe42.Controller;

import edu.ntnu.idi.idatt2003.gruppe42.Audio.AudioManager;
import edu.ntnu.idi.idatt2003.gruppe42.Audio.Audio;
import edu.ntnu.idi.idatt2003.gruppe42.Controller.AppControllers.AppController;
import edu.ntnu.idi.idatt2003.gruppe42.Model.Day;
import edu.ntnu.idi.idatt2003.gruppe42.Model.GameState;
import java.util.Random;

import javafx.application.Platform;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
Expand All @@ -21,6 +25,7 @@ public class TimeAndWeatherController implements AppController {
private final StringProperty weather = new SimpleStringProperty("Sunny");
private final Random random = new Random();
private final GameController gameController;
private AudioManager audioManager = AudioManager.getInstance();

private static final Day[] DAYS = {Day.SUN, Day.MON, Day.TUE, Day.WED, Day.THU, Day.FRI, Day.SAT};

Expand All @@ -40,6 +45,7 @@ public void nextTick() {
updateGameState();
updateWeather();
hour.set(0);
Platform.runLater(() -> audioManager.playSFX(Audio.CLOCK));
} else {
hour.set(nextHour);
}
Expand Down
Binary file added src/main/resources/Audio/clock.wav
Binary file not shown.
Binary file modified src/main/resources/Audio/close_app.wav
Binary file not shown.
Binary file removed src/main/resources/Audio/mouse_click.wav
Binary file not shown.
Binary file modified src/main/resources/Audio/open_app.wav
Binary file not shown.
Binary file added src/main/resources/Audio/transaction.wav
Binary file not shown.
Binary file added src/main/resources/Audio/weekend_theme.mp3
Binary file not shown.
Binary file added src/main/resources/Audio/work_theme.mp3
Binary file not shown.

0 comments on commit 3c2fe1b

Please sign in to comment.