diff --git a/src/main/base/store.ts b/src/main/base/store.ts index da89a70a..1ed7d9d9 100644 --- a/src/main/base/store.ts +++ b/src/main/base/store.ts @@ -12,7 +12,7 @@ export class Store { "discord_rpc_clear_on_pause": true, "language": "en_US", // electron.app.getLocale().replace('-', '_') this can be used in future "playbackNotifications": true, - "update_branch": "main" + "update_branch": "innolab" }, "home": { "followedArtists": [], @@ -36,6 +36,8 @@ export class Store { "normalization": false, "ciderPPE": false, "ciderPPE_value": 0.5, + "analogWarmth": false, + "analogWarmth_value": 0.75, "spatial": false, "spatial_properties": { "presets": [], diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 407c32c5..9e553123 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -113,6 +113,44 @@ var CiderAudio = { ); } }, + analogWarmth_h2_3: function (status, hierarchy){ + if (status === true) { // 23 Band Adjustment + let WARMTH_FREQUENCIES = [10.513, 15.756, 224.01, 677.77, 1245.4, 2326.8, 2847.3, 4215.3, 11057, 12793, 16235, 16235, 17838, 18112, 18112, 19326, 19372, 19372, 20061, 20280, 20280, 20853, 22276]; + let WARMTH_GAIN = [-4.81, 0.74, 0.55, -0.84, -1.52, 0.84, 0.66, -0.29, 0.29, 0.94, 1.67, 1.62, -0.53, -0.81, -4.98, 1.43, 0.86, 1.13, -1.06, -0.95, -1.13, 1.78, -3.86]; + let WARMTH_Q = [0.442, 3.536, 2.102, 8.409, 0.625, 16.82, 5, 2.973, 3.536, 2.5, 2.5, 11.89, 0.625, 1.487, 1.153, 5, 5.453, 5, 2.973, 3.386, 3.386, 14.14, 8.409]; + CiderAudio.audioNodes.analogWarmth = [] + + + for (i = 0; i < WARMTH_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter(); + CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking'; + CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i]; + CiderAudio.audioNodes.analogWarmth[i].Q.value = WARMTH_Q[i]; + CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * app.cfg.audio.analogWarmth_value; + } + + for (i = 1; i < WARMTH_FREQUENCIES.length; i ++) { + CiderAudio.audioNodes.analogWarmth[i-1].connect(CiderAudio.audioNodes.analogWarmth[i]); + } + + switch (hierarchy) { + case 3: + try{ + CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.llpw[0]);} catch(e){} + break; + case 2: + try{ + CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){} + break; + case 1: + try{ + CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} + break; + } + + + } + }, llpw_h2_2: function (status, hierarchy){ if (status === true) { // 23 Band Adjustment let LLPW_Q = [5, 1, 3.536, 1.25, 8.409, 1.25, 14.14, 7.071, 5, 0.625, 16.82, 20, 20, 20, 28.28, 28.28, 28.28, 20, 33.64, 33.64, 10, 28.28, 7.071, 3.856]; @@ -132,13 +170,17 @@ var CiderAudio = { for (i = 1; i < LLPW_FREQUENCIES.length; i ++) { CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]); } - if (hierarchy === 2) { - try{ - CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){}} - else if (hierarchy === 1) { - try{ - CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){}} + switch (hierarchy) { + case 2: + try{ + CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){} + break; + case 1: + try{CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} + break; + + } } }, @@ -168,6 +210,7 @@ var CiderAudio = { hierarchical_unloading: function (){ try {CiderAudio.audioNodes.spatialNode.output.disconnect();} catch(e){} try {CiderAudio.audioNodes.gainNode.disconnect();} catch(e){} + try {for (var i of CiderAudio.audioNodes.analogWarmth){i.disconnect();} CiderAudio.audioNodes.analogWarmth = []} catch(e){} try {for (var i of CiderAudio.audioNodes.llpw){i.disconnect();} CiderAudio.audioNodes.llpw = []} catch(e){} try {for (var i of CiderAudio.audioNodes.vibrantbassNode){i.disconnect();} CiderAudio.audioNodes.vibrantbassNode = []} catch(e){} @@ -176,45 +219,103 @@ var CiderAudio = { }, hierarchical_loading: function (){ CiderAudio.hierarchical_unloading(); - if (app.cfg.audio.vibrantBass.multiplier !== 0) { // If vibrant bass is enabled - if (app.cfg.advanced.ciderPPE) { // If CAP & vibrant bass is enabled - CiderAudio.vibrantbass_h2_1(true) - if (app.cfg.audio.spatial) { - app.cfg.advanced.ciderPPE = false; - notyf.error(app.getLz('settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility')); - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]); - } - else {CiderAudio.llpw_h2_2(true, 2); CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);} + + // Compatibility Check + if (app.cfg.audio.spatial === true && app.cfg.advanced.ciderPPE === true || app.cfg.audio.spatial === true && app.cfg.advanced.analogWarmth === true) { + app.cfg.advanced.analogWarmth = false; + app.cfg.advanced.ciderPPE = false; + notyf.error(app.getLz('settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility')); + this.hierarchical_loading(); } - else { // If only vibrant bass is enabled - CiderAudio.vibrantbass_h2_1(true) - //CiderAudio.llpw_h2_2(false, 0) - if (app.cfg.audio.spatial) { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]);} - else {CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);} - } + + // Vibrant Bass, CAP, Analog Warmth + if (app.cfg.audio.vibrantBass.multiplier !== 0 && + app.cfg.advanced.ciderPPE === true && + app.cfg.audio.spatial === true && + app.cfg.audio.analogWarmth === true) { + + CiderAudio.vibrantbass_h2_1(true) + CiderAudio.llpw_h2_2(true, 2); + CiderAudio.analogWarmth_h2_3(true, 3); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); } - else { // If vibrant bass is disabled - if (app.cfg.advanced.ciderPPE) { // If CAP is enabled & vibrant bass is disabled - //CiderAudio.vibrantbass_h2_1(false) - if (app.cfg.audio.spatial) { - app.cfg.advanced.ciderPPE = false; - notyf.error(app.getLz('settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility')); - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]); - } - else {CiderAudio.llpw_h2_2(true, 1); CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);} - } - else { // If CAP & vibrant bass is disabled - //CiderAudio.vibrantbass_h2_1(false) - //CiderAudio.llpw_h2_2(false, 0) - if (app.cfg.audio.spatial) { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); - CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]);} - else {CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]);} - } + // CAP, Analog Warmth + else if (app.cfg.audio.vibrantBass.multiplier === 0 && + app.cfg.advanced.ciderPPE === true && + app.cfg.audio.spatial === false && + app.cfg.audio.analogWarmth === true) { + + CiderAudio.llpw_h2_2(true, 1); + CiderAudio.analogWarmth_h2_3(true, 2); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + } + // Vibrant Bass, Analog Warmth + else if (app.cfg.audio.vibrantBass.multiplier !== 0 && + app.cfg.advanced.ciderPPE === false && + app.cfg.audio.spatial === false && + app.cfg.audio.analogWarmth === true) { + + CiderAudio.vibrantbass_h2_1(true) + CiderAudio.analogWarmth_h2_3(true, 2); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + } + + // Vibrant Bass, CAP + else if (app.cfg.audio.vibrantBass.multiplier !== 0 && + app.cfg.advanced.ciderPPE === true && + app.cfg.audio.spatial === false && + app.cfg.audio.analogWarmth === false) { + + CiderAudio.vibrantbass_h2_1(true) + CiderAudio.llpw_h2_2(true, 2); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]); + } + // Vibrant Bass, Spatial + else if (app.cfg.audio.vibrantBass.multiplier !== 0 && + app.cfg.advanced.ciderPPE === false && + app.cfg.audio.spatial === true && + app.cfg.audio.analogWarmth === false) { + + CiderAudio.vibrantbass_h2_1(true) + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]); + } + // Vibrant Bass + else if (app.cfg.audio.vibrantBass.multiplier !== 0 && + app.cfg.advanced.ciderPPE === false && + app.cfg.audio.spatial === false && + app.cfg.audio.analogWarmth === false) { + CiderAudio.vibrantbass_h2_1(true) + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); + } + // CAP + else if (app.cfg.audio.vibrantBass.multiplier === 0 && + app.cfg.advanced.ciderPPE === true && + app.cfg.audio.spatial === false && + app.cfg.audio.analogWarmth === false) { + CiderAudio.llpw_h2_2(true, 1); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]); + } + // Analog Warmth + else if (app.cfg.audio.vibrantBass.multiplier === 0 && + app.cfg.advanced.ciderPPE === false && + app.cfg.audio.spatial === false && + app.cfg.audio.analogWarmth === true) { + CiderAudio.analogWarmth_h2_2(true, 1); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + } + // Spatial + else if (app.cfg.audio.vibrantBass.multiplier === 0 && + app.cfg.advanced.ciderPPE === false && + app.cfg.audio.spatial === true && + app.cfg.audio.analogWarmth === false){ + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); + CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]); + + } + // Nothing + else { + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]); // If CAP & vibrant bass is disabled } console.log("[Cider][Audio] Finished hierarchical loading"); diff --git a/src/renderer/views/pages/settings.ejs b/src/renderer/views/pages/settings.ejs index ae4101b5..31708e81 100644 --- a/src/renderer/views/pages/settings.ejs +++ b/src/renderer/views/pages/settings.ejs @@ -86,6 +86,31 @@ +