diff --git a/src/main/java/com/codedead/opal/controller/MainWindowController.java b/src/main/java/com/codedead/opal/controller/MainWindowController.java
index 68d0c5d..9016f7e 100644
--- a/src/main/java/com/codedead/opal/controller/MainWindowController.java
+++ b/src/main/java/com/codedead/opal/controller/MainWindowController.java
@@ -129,6 +129,8 @@ public void setControllers(final SettingsController settingsController, final Up
if (shouldUpdate) {
checkForUpdates(false, false);
}
+
+ setAudioBalance(Double.parseDouble(properties.getProperty("audioBalance", "0.0")));
}
/**
@@ -654,6 +656,15 @@ public void run() {
timer.schedule(timerTask, delay);
}
+ /**
+ * Set the audio balance
+ *
+ * @param audioBalance The audio balance
+ */
+ public void setAudioBalance(final double audioBalance) {
+ getAllSoundPanes(grpControls).forEach(s -> s.setBalance(audioBalance));
+ }
+
/**
* Method that is called when the Window should be hidden or shown
*/
diff --git a/src/main/java/com/codedead/opal/controller/SettingsWindowController.java b/src/main/java/com/codedead/opal/controller/SettingsWindowController.java
index 4c8fa03..0bbf152 100644
--- a/src/main/java/com/codedead/opal/controller/SettingsWindowController.java
+++ b/src/main/java/com/codedead/opal/controller/SettingsWindowController.java
@@ -15,6 +15,7 @@
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
+import javafx.scene.control.Slider;
import javafx.stage.Stage;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
@@ -30,6 +31,8 @@
public final class SettingsWindowController {
+ @FXML
+ private Slider sldAudioBalance;
@FXML
private CheckBox chbTimerComputerShutdown;
@FXML
@@ -186,6 +189,8 @@ private void loadSettings() {
cboTheme.getSelectionModel().select(themeIndex);
numDelay.setText(String.valueOf(correctDelay));
chbTimerComputerShutdown.setSelected(Boolean.parseBoolean(settingsController.getProperties().getProperty("timerComputerShutdown", "false")));
+
+ sldAudioBalance.setValue(Double.parseDouble(settingsController.getProperties().getProperty("audioBalance", "0.0")));
}
/**
@@ -201,7 +206,10 @@ private void resetSettingsAction() {
try {
settingsController.createDefaultProperties();
settingsController.setProperties(settingsController.readPropertiesFile());
+
mainWindowController.loadMediaButtonVisibility(Boolean.parseBoolean(settingsController.getProperties().getProperty("mediaButtons", "true")));
+ mainWindowController.setAudioBalance(Double.parseDouble(settingsController.getProperties().getProperty("audioBalance", "0.0")));
+
trayIconController.hideTrayIcon();
loadSettings();
@@ -282,6 +290,9 @@ private void saveSettingsAction() {
settingsController.getProperties().setProperty("timerApplicationShutdown", String.valueOf(chbTimerApplicationShutdown.isSelected()));
settingsController.getProperties().setProperty("timerComputerShutdown", String.valueOf(chbTimerComputerShutdown.isSelected()));
+ settingsController.getProperties().setProperty("audioBalance", String.valueOf(sldAudioBalance.getValue()));
+ mainWindowController.setAudioBalance(sldAudioBalance.getValue());
+
Configurator.setAllLevels(LogManager.getRootLogger().getName(), level);
try {
settingsController.saveProperties();
diff --git a/src/main/java/com/codedead/opal/domain/SoundPane.java b/src/main/java/com/codedead/opal/domain/SoundPane.java
index d7d9fb1..4c7e75f 100644
--- a/src/main/java/com/codedead/opal/domain/SoundPane.java
+++ b/src/main/java/com/codedead/opal/domain/SoundPane.java
@@ -39,6 +39,7 @@ public final class SoundPane extends GridPane {
private String mediaPath;
@FXML
private String mediaKey;
+ private double balance;
private MediaPlayer mediaPlayer;
private final Logger logger;
@@ -104,6 +105,7 @@ private void initializeMediaPlayer(final String value) throws URISyntaxException
imgMediaButton.setImage(new Image(Objects.requireNonNull(getClass().getResourceAsStream("/images/play.png"))));
}
});
+ mediaPlayer.setBalance(balance);
}
/**
@@ -287,4 +289,28 @@ private void disposeMediaPlayer() {
mediaPlayer = null;
}
}
+
+ /**
+ * Get the audio balance
+ *
+ * @return The audio balance
+ */
+ public double getBalance() {
+ return balance;
+ }
+
+ /**
+ * Set the audio balance
+ *
+ * @param balance The audio balance
+ */
+ public void setBalance(final double balance) {
+ if (balance < -1.0 || balance > 1.0)
+ throw new IllegalArgumentException("Balance must be between -1.0 and 1.0!");
+
+ this.balance = balance;
+ if (mediaPlayer != null) {
+ mediaPlayer.setBalance(balance);
+ }
+ }
}
diff --git a/src/main/resources/default.properties b/src/main/resources/default.properties
index deedd6e..e0bae84 100644
--- a/src/main/resources/default.properties
+++ b/src/main/resources/default.properties
@@ -10,3 +10,4 @@ mediaButtons=true
dragDrop=true
theme=light
trayIcon=false
+audioBalance=0.0
diff --git a/src/main/resources/images/advanced.png b/src/main/resources/images/advanced.png
new file mode 100644
index 0000000..0a24229
Binary files /dev/null and b/src/main/resources/images/advanced.png differ
diff --git a/src/main/resources/translations/OpalApplication.properties b/src/main/resources/translations/OpalApplication.properties
index 7cef089..3b4d244 100644
--- a/src/main/resources/translations/OpalApplication.properties
+++ b/src/main/resources/translations/OpalApplication.properties
@@ -90,3 +90,5 @@ RadioFrequencyStatic=Radio frequency static
PinkNoise=Pink noise
BrownNoise=Brown noise
TimerComputerShutdown=Shutdown computer
+AudioBalance=Audio balance
+Advanced=Advanced
diff --git a/src/main/resources/translations/OpalApplication_de_DE.properties b/src/main/resources/translations/OpalApplication_de_DE.properties
index a732795..2f0c1b1 100644
--- a/src/main/resources/translations/OpalApplication_de_DE.properties
+++ b/src/main/resources/translations/OpalApplication_de_DE.properties
@@ -90,3 +90,5 @@ RadioFrequencyStatic=Radiofrequenzstörung
PinkNoise=Pinkes Rauschen
BrownNoise=Braunes Rauschen
TimerComputerShutdown=Computer herunterfahren
+AudioBalance=Audiobalance
+Advanced=Erweitert
diff --git a/src/main/resources/translations/OpalApplication_en_US.properties b/src/main/resources/translations/OpalApplication_en_US.properties
index 7cef089..3b4d244 100644
--- a/src/main/resources/translations/OpalApplication_en_US.properties
+++ b/src/main/resources/translations/OpalApplication_en_US.properties
@@ -90,3 +90,5 @@ RadioFrequencyStatic=Radio frequency static
PinkNoise=Pink noise
BrownNoise=Brown noise
TimerComputerShutdown=Shutdown computer
+AudioBalance=Audio balance
+Advanced=Advanced
diff --git a/src/main/resources/translations/OpalApplication_es_ES.properties b/src/main/resources/translations/OpalApplication_es_ES.properties
index c442ac8..b109a01 100644
--- a/src/main/resources/translations/OpalApplication_es_ES.properties
+++ b/src/main/resources/translations/OpalApplication_es_ES.properties
@@ -90,3 +90,5 @@ RadioFrequencyStatic=Estático de frecuencia de radio
PinkNoise=Ruido rosa
BrownNoise=Ruido marrón
TimerComputerShutdown=Apagar la computadora
+AudioBalance=Balance de audio
+Advanced=Avanzado
diff --git a/src/main/resources/translations/OpalApplication_fr_FR.properties b/src/main/resources/translations/OpalApplication_fr_FR.properties
index 1bdc971..3c7306d 100644
--- a/src/main/resources/translations/OpalApplication_fr_FR.properties
+++ b/src/main/resources/translations/OpalApplication_fr_FR.properties
@@ -90,3 +90,5 @@ RadioFrequencyStatic=Bruit blanc de fréquence radio
PinkNoise=Bruit rose
BrownNoise=Bruit brun
TimerComputerShutdown=Éteindre l'ordinateur
+AudioBalance=Balance audio
+Advanced=Avancé
diff --git a/src/main/resources/translations/OpalApplication_jp_JP.properties b/src/main/resources/translations/OpalApplication_jp_JP.properties
index bb88602..825ceb3 100644
--- a/src/main/resources/translations/OpalApplication_jp_JP.properties
+++ b/src/main/resources/translations/OpalApplication_jp_JP.properties
@@ -90,3 +90,5 @@ RadioFrequencyStatic=ラジオ周波数の静電気
PinkNoise=ピンクノイズ
BrownNoise=ブラウンノイズ
TimerComputerShutdown=コンピューターをシャットダウン
+AudioBalance=オーディオ バランス
+Advanced=高度な
diff --git a/src/main/resources/translations/OpalApplication_nl_NL.properties b/src/main/resources/translations/OpalApplication_nl_NL.properties
index 2406f2d..bfe58e2 100644
--- a/src/main/resources/translations/OpalApplication_nl_NL.properties
+++ b/src/main/resources/translations/OpalApplication_nl_NL.properties
@@ -90,3 +90,5 @@ RadioFrequencyStatic=Radiofrequentie ruis
PinkNoise=Roze geluid
BrownNoise=Bruin geluid
TimerComputerShutdown=Computer afsluiten
+AudioBalance=Audio balans
+Advanced=Geavanceerd
diff --git a/src/main/resources/translations/OpalApplication_ru_RU.properties b/src/main/resources/translations/OpalApplication_ru_RU.properties
index a775ac7..20eb060 100644
--- a/src/main/resources/translations/OpalApplication_ru_RU.properties
+++ b/src/main/resources/translations/OpalApplication_ru_RU.properties
@@ -90,3 +90,5 @@ RadioFrequencyStatic=Радиочастотный статический
PinkNoise=Розовый шум
BrownNoise=Коричневый шум
TimerComputerShutdown=Выключение компьютера
+AudioBalance=Баланс аудио
+Advanced=Дополнительно
diff --git a/src/main/resources/windows/SettingsWindow.fxml b/src/main/resources/windows/SettingsWindow.fxml
index cdde92e..dd125ab 100644
--- a/src/main/resources/windows/SettingsWindow.fxml
+++ b/src/main/resources/windows/SettingsWindow.fxml
@@ -15,10 +15,11 @@
+
+ prefHeight="320.0" prefWidth="450.0">
@@ -43,7 +44,6 @@
-
@@ -115,29 +115,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -191,6 +168,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+