diff --git a/src/i18n/en_US.jsonc b/src/i18n/en_US.jsonc
index cffdda4a..fa095aff 100644
--- a/src/i18n/en_US.jsonc
+++ b/src/i18n/en_US.jsonc
@@ -98,6 +98,8 @@
"term.developer": "Developer",
"term.socialTeam": "Social Team",
"term.contributors": "Contributors",
+ "term.equalizer": "Equalizer",
+ "term.reset": "Reset",
// Home
"home.title": "Home",
diff --git a/src/main/base/store.ts b/src/main/base/store.ts
index bc495822..cd7fe219 100644
--- a/src/main/base/store.ts
+++ b/src/main/base/store.ts
@@ -49,6 +49,18 @@ export class ConfigStore {
"down": 'acoustic-ceiling-tiles',
"up": 'acoustic-ceiling-tiles',
}
+ },
+ "equalizer": {
+ '60' : 0,
+ '170': 0 ,
+ '310': 0 ,
+ '600': 0 ,
+ '1000': 0 ,
+ '3000': 0 ,
+ '6000': 0 ,
+ '12000': 0 ,
+ '14000': 0 ,
+ '16000': 0 ,
}
},
"visual": {
diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js
index 64118b7c..6697d908 100644
--- a/src/renderer/audio/audio.js
+++ b/src/renderer/audio/audio.js
@@ -5,6 +5,7 @@ var CiderAudio = {
gainNode : null,
spatialNode : null,
spatialInput: null,
+ audioBands : null,
},
init: function (cb = function () { }) {
//AudioOutputs.fInit = true;
@@ -42,6 +43,7 @@ var CiderAudio = {
if (app.cfg.audio.spatial){
CiderAudio.spatialOn()
}
+ CiderAudio.equalizer()
},
normalizerOn: function (){},
normalizerOff: function (){
@@ -49,7 +51,7 @@ var CiderAudio = {
},
spatialOn: function (){
try{
- CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination);} catch(e){}
+ CiderAudio.audioNodes.gainNode.disconnect(CiderAudio.context.destination);} catch(e){}
CiderAudio.audioNodes.spatialNode = new ResonanceAudio(CiderAudio.context);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.context.destination);
let roomDimensions = {
@@ -90,6 +92,43 @@ var CiderAudio = {
}
);
}
+ },
+ equalizer: function (){
+ const BANDS = [60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000];
+ CiderAudio.audioNodes.audioBands = {};
+
+ BANDS.forEach((band, i) => {
+ const filter = CiderAudio.context.createBiquadFilter();
+
+ CiderAudio.audioNodes.audioBands[band] = filter;
+
+ if (i === 0) {
+ // The first filter, includes all lower frequencies
+ filter.type = "lowshelf";
+ } else if (i === BANDS.length - 1) {
+ // The last filter, includes all higher frequencies
+ filter.type = "highshelf";
+ } else {
+ filter.type = "peaking";
+ }
+ filter.frequency.value = band;
+ filter.gain.value = 0;
+ if (i == 0){
+ if (app.cfg.audio.spatial) {
+ CiderAudio.audioNodes.spatialNode.output.disconnect(CiderAudio.context.destination);
+ CiderAudio.audioNodes.spatialNode.output.connect(filter);
+ } else {
+ CiderAudio.audioNodes.gainNode.disconnect(CiderAudio.context.destination);
+ CiderAudio.audioNodes.gainNode.connect(filter);
+ }
+ } else if (i === BANDS.length - 1) {
+ CiderAudio.audioNodes.audioBands[BANDS[i - 1]].connect(filter);
+ } else {
+ CiderAudio.audioNodes.audioBands[BANDS[i - 1]].connect(filter);
+ filter.connect(CiderAudio.context.destination);
+ }
+
+ });
}
}
diff --git a/src/renderer/index.js b/src/renderer/index.js
index 1c470073..13168409 100644
--- a/src/renderer/index.js
+++ b/src/renderer/index.js
@@ -297,7 +297,8 @@ const app = new Vue({
modals: {
addToPlaylist: false,
spatialProperties: false,
- qrcode: false
+ qrcode: false,
+ equalizer: false,
},
socialBadges: {
badgeMap: {},
diff --git a/src/renderer/style.less b/src/renderer/style.less
index 8ceefcb2..934c1330 100644
--- a/src/renderer/style.less
+++ b/src/renderer/style.less
@@ -5699,4 +5699,72 @@ body.no-gpu {
overflow-y: hidden;
}
+.equalizer-panel {
+ .modal-window {
+ height: 300px;
+ max-height: 300px;
+ width: 400px;
+ max-width: 400px;
+ overflow: hidden;
+
+ .info-header {
+ padding-left: 12px;
+ }
+
+ .visual-container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ overflow: hidden;
+ }
+
+
+ .modal-header {
+ padding: 16px;
+ position: relative;
+ overflow: hidden;
+
+ .modal-title {
+ text-align: center;
+ }
+
+ .close-btn {
+ width: 50px;
+ height: 100%;
+ background-image: var(--gfx-closeBtn);
+ background-position: center;
+ background-repeat: no-repeat;
+ -webkit-app-region: no-drag;
+ appearance: none;
+ border: 0;
+ background-color: transparent;
+ position: absolute;
+ top: 0;
+ right: 0;
+
+ &:hover {
+ background-color: rgb(196, 43, 28)
+ }
+ }
+ }
+ .modal-content{
+ display: block;
+ .input-container{
+ display: inline-grid;
+ width: 35px;
+ justify-items: center;
+ font-size: 0.7em;
+ }
+ .reset-button{
+ width: 50%;
+ margin-left: 25%;
+ }
+ }
+ }
+}
+input.eq-slider {
+ -webkit-appearance: slider-vertical;
+ width: 5%;
+}
+
@import url("less/compact.less");
diff --git a/src/renderer/views/components/equalizer.ejs b/src/renderer/views/components/equalizer.ejs
new file mode 100644
index 00000000..5ae27962
--- /dev/null
+++ b/src/renderer/views/components/equalizer.ejs
@@ -0,0 +1,108 @@
+
+
+
\ No newline at end of file
diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs
index 5337cb17..5b2f56dd 100644
--- a/src/renderer/views/main.ejs
+++ b/src/renderer/views/main.ejs
@@ -264,6 +264,10 @@
+