This commit is contained in:
Maikiwi 2022-08-04 00:08:30 -07:00
parent 0f61cd5796
commit ba06badf86

View file

@ -1,27 +1,28 @@
const CiderAudio = { const CiderAudio = {
context: null, context: null,
source: null, source: null,
audioNodes: { audioNodes: {
gainNode: null, gainNode: null,
spatialNode: null, spatialNode: null,
audioBands: null, audioBands: null,
vibrantbassNode: null, vibrantbassNode: null,
llpw: null, llpw: null,
recorderNode: null, recorderNode: null,
intelliGainComp: null, intelliGainComp: null,
atmosphereRealizer2: null, atmosphereRealizer2: null,
atmosphereRealizer1: null, atmosphereRealizer1: null,
opportunisticCorrection: null, opportunisticCorrection: null,
}, optimizedNode: null,
ccON: false, },
mediaRecorder: null, ccON: false,
init: function (cb = function () {}) { mediaRecorder: null,
//AudioOutputs.fInit = true; init: function (cb = function () { }) {
let searchInt = setInterval(function () { //AudioOutputs.fInit = true;
if (document.getElementById("apple-music-player")) { let searchInt = setInterval(function () {
//AudioOutputs.eqReady = true; if (document.getElementById("apple-music-player")) {
document.getElementById("apple-music-player").crossOrigin = "anonymous"; //AudioOutputs.eqReady = true;
CiderAudio.connectContext(document.getElementById("apple-music-player"), 0); document.getElementById("apple-music-player").crossOrigin = "anonymous";
CiderAudio.connectContext(document.getElementById("apple-music-player"), 0);
cb(); cb();
clearInterval(searchInt); clearInterval(searchInt);
@ -904,146 +905,190 @@ const CiderAudio = {
CiderAudio.audioNodes.vibrantbassNode[i - 1].connect(CiderAudio.audioNodes.vibrantbassNode[i]); CiderAudio.audioNodes.vibrantbassNode[i - 1].connect(CiderAudio.audioNodes.vibrantbassNode[i]);
} }
switch (destination) { switch (destination) {
case "spatial": case "spatial":
try { try { CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.spatialNode); console.debug("[Cider][Audio] vibrantbass_n4 -> Spatial");} catch (e) { }
CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.spatialNode); break;
console.debug("[Cider][Audio] vibrantbass_n4 -> Spatial");
} catch (e) {}
break;
case "n6": case "n6":
try { try {
CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer2); CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer2);
console.debug("[Cider][Audio] vibrantbass_n4 -> atmosphereRealizer2"); console.debug("[Cider][Audio] vibrantbass_n4 -> atmosphereRealizer2");
} catch (e) {} } catch (e) { }
break; break;
case "n5": case 'n5':
try { try {
CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer1); CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.atmosphereRealizer1);
console.debug("[Cider][Audio] vibrantbass_n4 -> atmosphereRealizer1"); console.debug("[Cider][Audio] vibrantbass_n4 -> atmosphereRealizer1");
} catch (e) {} } catch (e) { }
break; break;
case "n4": case 'n4':
try { try {
CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.vibrantbassNode[0]); CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug("[Cider][Audio] vibrantbass_n4 -> vibrantbassNode"); console.debug("[Cider][Audio] vibrantbass_n4 -> vibrantbassNode");
} catch (e) {} } catch (e) { }
break; break;
case "n3": case 'n3':
try { try {
CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.audioBands[0]); CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.audioBands[0]);
console.debug("[Cider][Audio] vibrantbass_n4 -> audioBands"); console.debug("[Cider][Audio] vibrantbass_n4 -> audioBands");
} catch (e) {} } catch (e) { }
break; break;
case "n2": case 'n2':
try { try {
CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.opportunisticCorrection); CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.opportunisticCorrection);
console.debug("[Cider][Audio] vibrantbass_n4 -> opportunisticCorrection"); console.debug("[Cider][Audio] vibrantbass_n4 -> opportunisticCorrection");
} catch (e) {} } catch (e) { }
break; break;
case "n1": case 'n1':
try { try {
CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.llpw[0]); CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.audioNodes.llpw[0]);
console.debug("[Cider][Audio] vibrantbass_n4 -> llpw"); console.debug("[Cider][Audio] vibrantbass_n4 -> llpw");
} catch (e) {} } catch (e) { }
break; break;
case "n0": case 'n0':
try { try { CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.context.destination); console.debug("[Cider][Audio] vibrantbass_n4 -> destination");} catch (e) { }
CiderAudio.audioNodes.vibrantbassNode.at(-1).connect(CiderAudio.context.destination); break;
console.debug("[Cider][Audio] vibrantbass_n4 -> destination"); }
} catch (e) {} }
break; },
} hierarchical_optimizer: function () {
} const lastNode = app.cfg.audio.maikiwiAudio.lastNode; // Load from cfg
}, const firstNode = app.cfg.audio.maikiwiAudio.firstNode;
hierarchical_unloading: function () {
try {
CiderAudio.audioNodes.spatialNode.disconnect();
CiderAudio.audioNodes.spatialNode = null;
} catch (e) {}
try {
CiderAudio.audioNodes.gainNode.disconnect();
} catch (e) {}
try {
CiderAudio.audioNodes.atmosphereRealizer2.disconnect();
CiderAudio.audioNodes.atmosphereRealizer2 = null;
} catch (e) {}
try {
CiderAudio.audioNodes.atmosphereRealizer1.disconnect();
CiderAudio.audioNodes.atmosphereRealizer1 = null;
} catch (e) {}
try {
for (var i of CiderAudio.audioNodes.llpw) {
i.disconnect();
}
CiderAudio.audioNodes.llpw = null;
} catch (e) {}
try {
for (var i of CiderAudio.audioNodes.vibrantbassNode) {
i.disconnect();
}
CiderAudio.audioNodes.vibrantbassNode = null;
} catch (e) {}
try {
for (var i of CiderAudio.audioNodes.audioBands) {
i.disconnect();
}
CiderAudio.audioNodes.vibrantbassNode = null;
} catch (e) {}
try {
CiderAudio.audioNodes.opportunisticCorrection.disconnect();
CiderAudio.audioNodes.opportunisticCorrection = null;
} catch (e) {}
console.debug("[Cider][Audio] Finished hierarchical unloading");
},
hierarchical_loading: async function () {
const configMap = new Map([
["spatial", app.cfg.audio.maikiwiAudio.spatial === true],
["n6", app.cfg.audio.maikiwiAudio.atmosphereRealizer2 === true],
["n5", app.cfg.audio.maikiwiAudio.atmosphereRealizer1 === true],
["n4", app.cfg.audio.equalizer.vibrantBass != 0],
["n3", Math.max(...app.cfg.audio.equalizer.gain) != 0],
["n2", app.cfg.audio.maikiwiAudio.opportunisticCorrection_state !== "OFF"],
["n1", app.cfg.audio.maikiwiAudio.ciderPPE === true],
]);
CiderAudio.hierarchical_unloading(); if (lastNode === "n0") { return } // do nothing if there's no processing lmao
let lastNode = "n0";
for (let [tier, value] of configMap.entries()) { app.cfg.audio.maikiwiAudio.staticOptimizer.lock = true // Lock CiderAudio from performing hierarchical loading.
if (value === true) {
switch (tier) { CiderAudioRenderer.init();
case "spatial":
CiderAudio.spatial_ninf(); if (MusicKit.getInstance().isPlaying) {
lastNode = "spatial"; MusicKit.getInstance().pause(); // Pause first
break; }
case "n6":
app.cfg.audio.normalization = true; const res = CiderAudioRenderer.hierarchical_optimizer();
CiderAudio.atmosphereRealizer2_n6(true, lastNode);
lastNode = "n6"; CiderAudioRenderer.off(); // Clean up IMMEDIATELY
break;
case "n5": CiderAudio.audioNodes.optimizedNode = CiderAudio.context.createConvolver(); CiderAudio.audioNodes.optimizedNode.normalize = false;
app.cfg.audio.normalization = true;
CiderAudio.atmosphereRealizer1_n5(true, lastNode); CiderAudio.audioNodes.optimizedNode.buffer = res; // Load the sucker up
lastNode = "n5";
break; CiderAudio.hierarchical_unloading();
case "n4": CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.optimizedNode)
CiderAudio.vibrantbass_n4(true, lastNode); CiderAudio.audioNodes.optimizedNode.connect(CiderAudio.context.destination)
lastNode = "n4";
break; console.debug('[Cider][Audio]\n' + [...configMap.entries()] + '\n lastNode: ' + lastNode);
case "n3": console.debug("[Cider][Audio] Finished hierarchical loading + Optimizing");
CiderAudio.equalizer(true, lastNode);
lastNode = "n3"; if (MusicKit.getInstance().nowPlayingItem != null) { // Restore playback
break; MusicKit.getInstance().play().catch(console.error);
case "n2": }
CiderAudio.opportunisticCorrection_n2(true, lastNode); },
lastNode = "n2"; hierarchical_unloading: function () {
break; try { CiderAudio.audioNodes.spatialNode.disconnect(); CiderAudio.audioNodes.spatialNode = null} catch (e) { }
case "n1": try { CiderAudio.audioNodes.gainNode.disconnect(); } catch (e) { }
app.cfg.audio.normalization = true; try { CiderAudio.audioNodes.atmosphereRealizer2.disconnect(); CiderAudio.audioNodes.atmosphereRealizer2 = null } catch (e) { }
CiderAudio.llpw_n1(true, lastNode); try { CiderAudio.audioNodes.atmosphereRealizer1.disconnect(); CiderAudio.audioNodes.atmosphereRealizer1 = null } catch (e) { }
lastNode = "n1"; try { for (var i of CiderAudio.audioNodes.llpw) { i.disconnect(); } CiderAudio.audioNodes.llpw = null } catch (e) { }
break; try { for (var i of CiderAudio.audioNodes.vibrantbassNode) { i.disconnect(); } CiderAudio.audioNodes.vibrantbassNode = null } catch (e) { }
try { for (var i of CiderAudio.audioNodes.audioBands) { i.disconnect(); } CiderAudio.audioNodes.vibrantbassNode = null} catch (e) { };
try {CiderAudio.audioNodes.opportunisticCorrection.disconnect(); CiderAudio.audioNodes.opportunisticCorrection = null } catch (e) { };
console.debug("[Cider][Audio] Finished hierarchical unloading")
},
hierarchical_loading: async function () {
if (app.cfg.audio.maikiwiAudio.staticOptimizer.lock === true) { return } // Do nothing if locked by optimizer.
const configMap = new Map([
['spatial', app.cfg.audio.maikiwiAudio.spatial === true],
['n6', app.cfg.audio.maikiwiAudio.atmosphereRealizer2 === true],
['n5', app.cfg.audio.maikiwiAudio.atmosphereRealizer1 === true],
['n4', app.cfg.audio.equalizer.vibrantBass != 0],
['n3', Math.max(...app.cfg.audio.equalizer.gain) != 0],
['n2', app.cfg.audio.maikiwiAudio.opportunisticCorrection_state !== "OFF"],
['n1', app.cfg.audio.maikiwiAudio.ciderPPE === true]
]);
CiderAudio.hierarchical_unloading();
let lastNode = 'n0'; let index = 0; let firstNode = 'n0'
for (let [tier, value] of configMap.entries()) {
if (value === true) {
if (index === 0) {firstNode = tier}
switch (tier) {
case 'spatial':
CiderAudio.spatial_ninf();
lastNode = 'spatial';
break;
case 'n6':
app.cfg.audio.normalization = true;
CiderAudio.atmosphereRealizer2_n6(true, lastNode);
lastNode = 'n6';
break;
case 'n5':
app.cfg.audio.normalization = true;
CiderAudio.atmosphereRealizer1_n5(true, lastNode);
lastNode = 'n5';
break;
case 'n4':
CiderAudio.vibrantbass_n4(true, lastNode);
lastNode = 'n4';
break;
case 'n3':
CiderAudio.equalizer(true, lastNode);
lastNode = 'n3';
break;
case 'n2':
CiderAudio.opportunisticCorrection_n2(true, lastNode);
lastNode = 'n2';
break;
case 'n1':
app.cfg.audio.normalization = true;
CiderAudio.llpw_n1(true, lastNode);
lastNode = 'n1';
break;
}
}
}
app.cfg.audio.maikiwiAudio.lastNode = lastNode; app.cfg.audio.maikiwiAudio.firstNode = firstNode; // Sync last node & first
switch (lastNode) {
case 'spatial':
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
console.debug("[Cider][Audio] gainNode -> Spatial");
break;
case 'n6':
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.atmosphereRealizer2);
console.debug("[Cider][Audio] gainNode -> atmosphereRealizer2");
break;
case 'n5':
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.atmosphereRealizer1);
console.debug("[Cider][Audio] gainNode -> atmosphereRealizer1");
break;
case 'n4':
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug("[Cider][Audio] gainNode -> vibrantbass");
break;
case 'n3':
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]);
console.debug("[Cider][Audio] gainNode -> audioBands");
break;
case 'n2':
try {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.opportunisticCorrection);
console.debug("[Cider][Audio] gainNode -> opportunisticCorrection");
} catch (e) { }
break;
case 'n1':
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
console.debug("[Cider][Audio] gainNode -> llpw");
break;
case 'n0':
CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination);
console.debug("[Cider][Audio] gainNode -> destination");
break;
} }
} }
} }