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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +