diff --git a/src/main/base/store.ts b/src/main/base/store.ts index a1f067b6..55d00f53 100644 --- a/src/main/base/store.ts +++ b/src/main/base/store.ts @@ -62,8 +62,15 @@ export class ConfigStore { 'Q' : [1,1,1,1,1,1,1,1,1,1], 'preamp' : 0, 'mix' : 1, + 'vibrantBass' : 0, 'presets': [], 'userGenerated': false + }, + "vibrantBass": { // Hard coded into the app. Don't include any of this config into exporting presets in store.ts + 'multiplier': 0, + 'frequencies': [17.182, 42.169, 53.763, 112.69, 119.65, 264.59, 336.57, 400.65, 505.48, 612.7, 838.7, 1155.3, 1175.6, 3406.8, 5158.6, 5968.1, 6999.9, 7468.6, 8862.9, 9666, 10109], + 'Q': [2.5, 0.388, 5, 5, 2.5, 7.071, 14.14, 10, 7.071, 14.14, 8.409, 0.372, 7.071, 10, 16.82, 7.071, 28.28, 20, 8.409, 40, 40], + 'gain': [-0.34, 2.49, 0.23, -0.49, 0.23, -0.12, 0.32, -0.29, 0.33, 0.19, -0.18, -1.27, -0.11, 0.25, -0.18, -0.53, 0.34, 1.32, 1.78, 0.41, -0.28] } }, "visual": { diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index 948a4d7a..c5c10da1 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -7,6 +7,7 @@ var CiderAudio = { spatialInput: null, audioBands : null, preampNode : null, + vibrantbassNode: null, }, init: function (cb = function () { }) { //AudioOutputs.fInit = true; @@ -28,6 +29,7 @@ var CiderAudio = { try{ CiderAudio.audioNodes.spatialNode.disconnect();} catch(e){} try{ CiderAudio.audioNodes.preampNode.disconnect(); + CiderAudio.audioNodes.vibrantbassNode.disconnect(); CiderAudio.audioNodes.audioBands[0].disconnect(); CiderAudio.audioNodes.audioBands[9].disconnect(); } catch(e){} @@ -104,7 +106,10 @@ var CiderAudio = { let BANDS = app.cfg.audio.equalizer.frequencies; let GAIN = app.cfg.audio.equalizer.gain; let Q = app.cfg.audio.equalizer.Q; - CiderAudio.audioNodes.audioBands = []; + let VIBRANTBASSBANDS = app.cfg.audio.vibrantBass.frequencies; + let VIBRANTBASSGAIN = app.cfg.audio.vibrantBass.gain; + let VIBRANTBASSQ = app.cfg.audio.vibrantBass.Q; + CiderAudio.audioNodes.audioBands = []; CiderAudio.audioNodes.vibrantbassNode = []; for (i = 0; i < BANDS.length; i++) { CiderAudio.audioNodes.audioBands[i] = CiderAudio.context.createBiquadFilter(); @@ -119,6 +124,14 @@ var CiderAudio = { CiderAudio.audioNodes.preampNode.frequency.value = 0; // allow all CiderAudio.audioNodes.preampNode.gain.value = app.cfg.audio.equalizer.preamp; + for (i = 0; i < VIBRANTBASSBANDS.length; i++) { + CiderAudio.audioNodes.vibrantbassNode[i] = CiderAudio.context.createBiquadFilter(); + CiderAudio.audioNodes.vibrantbassNode[i].type = 'peaking'; // 'peaking'; + CiderAudio.audioNodes.vibrantbassNode[i].frequency.value = VIBRANTBASSBANDS[i]; + CiderAudio.audioNodes.vibrantbassNode[i].Q.value = VIBRANTBASSQ[i]; + CiderAudio.audioNodes.vibrantbassNode[i].gain.value = VIBRANTBASSGAIN[i] * app.cfg.audio.vibrantBass.multiplier; + } + if (app.cfg.audio.spatial) { try{ CiderAudio.audioNodes.spatialNode.output.disconnect(CiderAudio.context.destination); } catch(e){} @@ -129,7 +142,13 @@ var CiderAudio = { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.preampNode); } - CiderAudio.audioNodes.preampNode.connect(CiderAudio.audioNodes.audioBands[0]); + CiderAudio.audioNodes.preampNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); + CiderAudio.audioNodes.vibrantbassNode.connect(CiderAudio.audioNodes.audioBands[0]); + + for (i = 1; i < VIBRANTBASSBANDS.length; i ++) { + CiderAudio.audioNodes.vibrantbassNode[i-1].connect(CiderAudio.audioNodes.vibrantbassNode[i]); + } + CiderAudio.audioNodes.vibrantbassNode[VIBRANTBASSBANDS.length-1].connect(CiderAudio.audioNodes.audioBands[0]); for (i = 1; i < BANDS.length; i ++) { CiderAudio.audioNodes.audioBands[i-1].connect(CiderAudio.audioNodes.audioBands[i]); diff --git a/src/renderer/views/components/equalizer.ejs b/src/renderer/views/components/equalizer.ejs index 793d3d3b..9323cbe4 100644 --- a/src/renderer/views/components/equalizer.ejs +++ b/src/renderer/views/components/equalizer.ejs @@ -19,9 +19,9 @@