From 144e2209deaa711520e661c61ca513532cbbebee Mon Sep 17 00:00:00 2001 From: Telepathic Walrus Date: Sun, 29 Jan 2023 20:19:20 +0000 Subject: [PATCH 01/20] Added basic code for audio gian --- src/plugins/htmlAudioPlayer/plugin.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index b5d3c8bd02..627ab5d6ec 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -113,6 +113,20 @@ class HtmlAudioPlayer { val += '#t=' + seconds; } + const audioCtx = new AudioContext(); + const myAudio = document.querySelector('.mediaPlayerAudio'); + + const source = audioCtx.createMediaElementSource(myAudio); + + const gainNode = audioCtx.createGain(); + const dbGain = -1; + console.debug(options.item); + console.debug("before" + dbGain); + gainNode.gain.value = Math.pow(10, (dbGain/20)); + source.connect(gainNode); + gainNode.connect(audioCtx.destination); + console.debug('gain:' + gainNode.gain.value); + htmlMediaHelper.destroyHlsPlayer(self); self._currentPlayOptions = options; From 5edebd9070b0a8b8b2392513f560eca0dc1d9dfc Mon Sep 17 00:00:00 2001 From: Telepathic Walrus Date: Mon, 30 Jan 2023 18:47:38 +0000 Subject: [PATCH 02/20] Use normalization value from server --- src/plugins/htmlAudioPlayer/plugin.js | 36 ++++++++++++++++++--------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index 627ab5d6ec..45142b8735 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -97,6 +97,7 @@ class HtmlAudioPlayer { self._currentTime = null; const elem = createMediaElement(); + return setCurrentSrc(elem, options); }; @@ -107,25 +108,21 @@ class HtmlAudioPlayer { let val = options.url; console.debug('playing url: ' + val); + const dbGain = -18 - options.item.Normalization; + console.debug(options.item); + self.gainNode.gain.value = Math.pow(10, (dbGain/20)); + + + console.debug('gain:' + self.gainNode.gain.value); + + // Convert to seconds const seconds = (options.playerStartPositionTicks || 0) / 10000000; if (seconds) { val += '#t=' + seconds; } - const audioCtx = new AudioContext(); - const myAudio = document.querySelector('.mediaPlayerAudio'); - const source = audioCtx.createMediaElementSource(myAudio); - - const gainNode = audioCtx.createGain(); - const dbGain = -1; - console.debug(options.item); - console.debug("before" + dbGain); - gainNode.gain.value = Math.pow(10, (dbGain/20)); - source.connect(gainNode); - gainNode.connect(audioCtx.destination); - console.debug('gain:' + gainNode.gain.value); htmlMediaHelper.destroyHlsPlayer(self); @@ -255,9 +252,24 @@ class HtmlAudioPlayer { self._mediaElement = elem; + addGainElement(elem); + return elem; } + function addGainElement(elem) { + const audioCtx = new AudioContext(); + + const source = audioCtx.createMediaElementSource(elem); + + const gainNode = audioCtx.createGain(); + + source.connect(gainNode); + gainNode.connect(audioCtx.destination); + + self.gainNode = gainNode + } + function onEnded() { htmlMediaHelper.onEndedInternal(self, this, onError); } From de09fd4d363f0aee447ac1815a801b65adf9e8c5 Mon Sep 17 00:00:00 2001 From: Telepathic Walrus Date: Mon, 30 Jan 2023 20:36:11 +0000 Subject: [PATCH 03/20] Add option to enable/disable normalization --- .../playbackSettings/playbackSettings.js | 3 +++ .../playbackSettings.template.html | 10 +++++++++- src/plugins/htmlAudioPlayer/plugin.js | 15 ++++++++++----- src/scripts/settings/userSettings.js | 14 ++++++++++++++ src/strings/en-us.json | 2 ++ 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index 1969d478c1..9f69acb797 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -185,6 +185,7 @@ import template from './playbackSettings.template.html'; context.querySelector('.chkPlayDefaultAudioTrack').checked = user.Configuration.PlayDefaultAudioTrack || false; context.querySelector('.chkPreferFmp4HlsContainer').checked = userSettings.preferFmp4HlsContainer(); context.querySelector('.chkEnableCinemaMode').checked = userSettings.enableCinemaMode(); + context.querySelector('.chkEnableAudioNormalization').checked = userSettings.enableAudioNormalization(); context.querySelector('.chkEnableNextVideoOverlay').checked = userSettings.enableNextVideoInfoOverlay(); context.querySelector('.chkRememberAudioSelections').checked = user.Configuration.RememberAudioSelections || false; context.querySelector('.chkRememberSubtitleSelections').checked = user.Configuration.RememberSubtitleSelections || false; @@ -231,6 +232,8 @@ import template from './playbackSettings.template.html'; user.Configuration.EnableNextEpisodeAutoPlay = context.querySelector('.chkEpisodeAutoPlay').checked; userSettingsInstance.preferFmp4HlsContainer(context.querySelector('.chkPreferFmp4HlsContainer').checked); userSettingsInstance.enableCinemaMode(context.querySelector('.chkEnableCinemaMode').checked); + userSettingsInstance.enableAudioNormalization(context.querySelector('.chkEnableAudioNormalization').checked); + userSettingsInstance.enableNextVideoInfoOverlay(context.querySelector('.chkEnableNextVideoOverlay').checked); user.Configuration.RememberAudioSelections = context.querySelector('.chkRememberAudioSelections').checked; diff --git a/src/components/playbackSettings/playbackSettings.template.html b/src/components/playbackSettings/playbackSettings.template.html index 82c7483b9b..ba1c999b38 100644 --- a/src/components/playbackSettings/playbackSettings.template.html +++ b/src/components/playbackSettings/playbackSettings.template.html @@ -64,6 +64,14 @@
+ +
+ +
${EnableAudioNormalizationHelp}
+
@@ -102,7 +110,7 @@
${RememberAudioSelectionsHelp}
- +
@@ -80,6 +72,14 @@ ${TabAdvanced} +
+ +
${EnableAudioNormalizationHelp}
+
+
+
+ +
${LabelEnableLUFSScanHelp}
+
+