orchard/src/renderer/audio/audio.js
2021-12-29 20:48:28 +07:00

63 lines
No EOL
2.3 KiB
JavaScript

var CiderAudio = {
context : null,
source : null,
audioNodes : {
gainNode : null,
compressorNode : null,
},
init: function (cb = function () { }) {
//AudioOutputs.fInit = true;
searchInt = setInterval(function () {
if (document.getElementById("apple-music-player")) {
//AudioOutputs.eqReady = true;
document.getElementById("apple-music-player").crossOrigin = "anonymous";
CiderAudio.connectContext(document.getElementById("apple-music-player"), 0);
cb();
clearInterval(searchInt);
}
}, 1000);
},
connectContext: function (mediaElem){
CiderAudio.context = new (window.AudioContext || window.webkitAudioContext);
CiderAudio.source = CiderAudio.context.createMediaElementSource(mediaElem);
CiderAudio.audioNodes.gainNode = CiderAudio.context.createGain()
CiderAudio.source.connect(CiderAudio.audioNodes.gainNode);
CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination);
if(app.cfg.audio.normalization){
CiderAudio.normalizerOn()
}
},
normalizerOn: function (){
let tuna = Tuna(CiderAudio.context)
if (!CiderAudio.audioNodes.compressorNode){
CiderAudio.audioNodes.compressorNode = new tuna.Compressor({
threshold: -80, //-100 to 0
makeupGain: 5, //0 and up (in decibels)
attack: 2, //0 to 1000
release: 200, //0 to 3000
ratio: 8, //1 to 20
knee: 0, //0 to 40
automakeup: false, //true/false
bypass: 0
});
}
try{
CiderAudio.audioNodes.gainNode.disconnect(CiderAudio.context.destination);
} catch (e){}
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.compressorNode);
CiderAudio.audioNodes.compressorNode.connect(CiderAudio.context.destination);
},
normalizerOff: function (){
try{
CiderAudio.audioNodes.compressorNode.disconnect();
CiderAudio.audioNodes.compressorNode = null
} catch (e){}
CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination);
}
}
if (app.cfg.advanced.AudioContext){
CiderAudio.init()
}