From baa7b36725ad4274c53a636b7157774ce1d394e5 Mon Sep 17 00:00:00 2001 From: Tuukka Ojala Date: Thu, 16 Jan 2025 20:12:42 +0200 Subject: [PATCH] Add keyboard shortcuts for adjusting volume * Ctrl + Down decreases, Ctrl + Up increases in 5 % increments. * The volume slider value gets rounded up / down to the nearest increment if it isn't exactly at one of the increments. --- README.md | 3 +++ docroot/js/mediaplayer.js | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/README.md b/README.md index 2cec2aca..a6dbca37 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,9 @@ _LMS_ supports lyrics in `lrc` files, `txt` files, and embedded track metadata. * Play/pause: Space * Previous track: Ctrl + Left * Next track: Ctrl + Right +* Decrease volume: Ctrl + Down +* Increase volume: Ctrl + Up + ## Installation See [INSTALL.md](INSTALL.md) file. diff --git a/docroot/js/mediaplayer.js b/docroot/js/mediaplayer.js index f966e446..d926c5aa 100644 --- a/docroot/js/mediaplayer.js +++ b/docroot/js/mediaplayer.js @@ -15,6 +15,9 @@ const Mode = { } Object.freeze(Mode); +// How much to increase / decrease volume when adjusting it with keyboard shortcuts +const volumeStepAmount = 0.05; + LMS.mediaplayer = function () { let _root = {}; let _elems = {}; @@ -199,6 +202,20 @@ LMS.mediaplayer = function () { } } + let _stepVolumeDown = function() { + let currentVolume = _elems.audio.volume; + let remainder = (currentVolume * 10) % (volumeStepAmount * 10); + let newVolume = remainder === 0 ? currentVolume - volumeStepAmount : currentVolume - (remainder / 10); + _setVolume(Math.max(newVolume, 0)); + } + + let _stepVolumeUp = function() { + let currentVolume = _elems.audio.volume; + let remainder = (currentVolume * 10) % (volumeStepAmount * 10); + let newVolume = remainder === 0 ? currentVolume + volumeStepAmount : currentVolume + (volumeStepAmount - (remainder / 10)); + _setVolume(Math.min(newVolume, 1)); + } + let _setReplayGain = function (replayGain) { _gainNode.gain.value = Math.pow(10, (_settings.replayGain.preAmpGain + replayGain) / 20); } @@ -337,6 +354,14 @@ LMS.mediaplayer = function () { _playNext(); handled = true; } + else if (event.ctrlKey && event.keyCode == 40) { + _stepVolumeDown(); + handled = true; + } + else if (event.ctrlKey && event.keyCode == 38) { + _stepVolumeUp(); + handled = true; + } if (handled) event.preventDefault();