diff --git a/src/main/base/store.ts b/src/main/base/store.ts index 4b2bbcc1..b703ff3e 100644 --- a/src/main/base/store.ts +++ b/src/main/base/store.ts @@ -55,7 +55,7 @@ export class Store { "normalization": false, "maikiwiAudio": { "ciderPPE": false, - "ciderPPE_value": 0.5, + "ciderPPE_value": "NATURAL", "analogWarmth": false, "analogWarmth_value": 1.25, "spatial": false, diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 6907ec28..2ea0877d 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -332,66 +332,110 @@ const CiderAudio = { let LLPW_FREQUENCIES = [16.452, 24.636, 37.134, 74.483, 159.54, 308.18, 670.21, 915.81, 1200.7, 2766.4, 2930.6, 4050.6, 4409.1, 5395.2, 5901.6, 6455.5, 7164.1, 7724.1, 8449, 10573, 12368, 14198, 17910, 18916]; CiderAudio.audioNodes.llpw = [] - if (app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.55) { - for (let i = 0; i < c_LLPW_FREQUENCIES.length; i++) { - CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); - CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.llpw[i].frequency.value = c_LLPW_FREQUENCIES[i]; - CiderAudio.audioNodes.llpw[i].Q.value = c_LLPW_Q[i]; - CiderAudio.audioNodes.llpw[i].gain.value = c_LLPW_GAIN[i]; - } + switch (app.cfg.audio.maikiwiAudio.ciderPPE_value) { + case "NATURAL": + CiderAudio.audioNodes.llpw[0] = CiderAudio.context.createConvolver(); + CiderAudio.audioNodes.llpw[0].normalize = false; + fetch('./audio/impulses/CAP_Natural.wav').then(async (impulseData) => { + let bufferedImpulse = await impulseData.arrayBuffer(); + CiderAudio.audioNodes.llpw[0].buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);}); + + switch (hierarchy) { + case 2: + try{CiderAudio.audioNodes.llpw[0].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){} + break; + case 1: + try{CiderAudio.audioNodes.llpw[0].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} + break; + case 0: + try{CiderAudio.audioNodes.llpw[0].connect(CiderAudio.context.destination);} catch(e){} + break; + } - for (let i = 1; i < c_LLPW_FREQUENCIES.length; i ++) { - CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]); - } + console.debug("[Cider][Audio] CAP - Natural Mode"); + break; - switch (hierarchy) { - case 2: - try{ - CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){} + case "STANDARD": // Standard + for (let i = 0; i < LLPW_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); + CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; + CiderAudio.audioNodes.llpw[i].frequency.value = LLPW_FREQUENCIES[i]; + CiderAudio.audioNodes.llpw[i].Q.value = LLPW_Q[i]; + CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i]; + } + for (let i = 1; i < LLPW_FREQUENCIES.length; i ++) { + CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]); + } + + 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; + case 0: + try{CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.context.destination);} catch(e){} + break; + + } + + console.debug("[Cider][Audio] CAP - Classic Mode"); break; - case 1: - try{CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} + + case "AGGRESSIVE": // Aggressive + for (let i = 0; i < c_LLPW_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); + CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; + CiderAudio.audioNodes.llpw[i].frequency.value = c_LLPW_FREQUENCIES[i]; + CiderAudio.audioNodes.llpw[i].Q.value = c_LLPW_Q[i]; + CiderAudio.audioNodes.llpw[i].gain.value = c_LLPW_GAIN[i]; + } + for (let i = 1; i < c_LLPW_FREQUENCIES.length; i ++) { + CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]); + } + + switch (hierarchy) { + case 2: + try{CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){} + break; + case 1: + try{CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} + break; + case 0: + try{CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length-1].connect(CiderAudio.context.destination);} catch(e){} + break; + + } + + console.debug("[Cider][Audio] CAP - Clarity Mode"); break; - case 0: - try{CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length-1].connect(CiderAudio.context.destination);} catch(e){} + + default: + CiderAudio.audioNodes.llpw[0] = CiderAudio.context.createConvolver(); + CiderAudio.audioNodes.llpw[0].normalize = false; + fetch('./audio/impulses/CAP_Natural.wav').then(async (impulseData) => { + let bufferedImpulse = await impulseData.arrayBuffer(); + CiderAudio.audioNodes.llpw[0].buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);}); + + switch (hierarchy) { + case 2: + try{CiderAudio.audioNodes.llpw[0].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){} + break; + case 1: + try{CiderAudio.audioNodes.llpw[0].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} + break; + case 0: + try{CiderAudio.audioNodes.llpw[0].connect(CiderAudio.context.destination);} catch(e){} + break; + + } + app.cfg.audio.maikiwiAudio.ciderPPE_value = "NATURAL"; + console.debug("[Cider][Audio] CAP - Natural Mode (Defaulted from broki config)"); break; - } - - console.debug("[Cider][Audio] CAP - Clarity Mode"); - } - - else if (app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.5) { - for (let i = 0; i < LLPW_FREQUENCIES.length; i++) { - CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); - CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.llpw[i].frequency.value = LLPW_FREQUENCIES[i]; - CiderAudio.audioNodes.llpw[i].Q.value = LLPW_Q[i]; - CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i]; - } - - - for (let i = 1; i < LLPW_FREQUENCIES.length; i ++) { - CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]); - } - - 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; - case 0: - try{CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.context.destination);} catch(e){} - break; - - } - console.debug("[Cider][Audio] CAP - Classic Mode"); - } - } + } }, vibrantbass_h2_1: function (status, hierarchy){ diff --git a/src/renderer/audio/impulses/CAP_Natural.wav b/src/renderer/audio/impulses/CAP_Natural.wav new file mode 100644 index 00000000..2da16c5c Binary files /dev/null and b/src/renderer/audio/impulses/CAP_Natural.wav differ diff --git a/src/renderer/views/pages/audiolabs.ejs b/src/renderer/views/pages/audiolabs.ejs index 11ab894f..9c1da93a 100644 --- a/src/renderer/views/pages/audiolabs.ejs +++ b/src/renderer/views/pages/audiolabs.ejs @@ -30,12 +30,12 @@ {{$root.getLz('settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description')}}
- - +
@@ -192,20 +192,6 @@ CiderAudio.hierarchical_loading(); } }, - ciderPPEStandard: function () { - app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.5; - let LLPW_GAIN = [0.38, -1.81, -0.23, -0.51, 0.4, 0.84, 0.36, -0.34, 0.27, -1.2, -0.42, -0.67, 0.81, 1.31, -0.71, 0.68, -1.04, 0.79, -0.73, -1.33, 1.17, 0.57, 0.35, 6.33]; - for (let i = 0; i < 24; i++) { - CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i]; - } - }, - ciderPPEClarity: function () { - app.cfg.audio.maikiwiAudio.ciderPPE_value = 0.55; - let c_LLPW_GAIN = [-0.11, 0.27, -0.8, 0.57, 1.84, -0.38, 0.47, -1.56, 0.83, 1.58, -1.79, -0.45, 0.48, 1.22, -1.58, -1.59, -2.03, 2.56, -2.2, -2.48, 4.75, 10.5, 1.43, 3.76]; - for (let i = 0; i < 24; i++) { - CiderAudio.audioNodes.llpw[i].gain.value = c_LLPW_GAIN[i]; - } - }, ChangeanalogWarmth: function (multiplier) { app.cfg.audio.maikiwiAudio.analogWarmth_value = multiplier 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];