Select Git revision
FTPException.java
-
fabiovandewaeter authoredfabiovandewaeter authored
content.min.js 9.69 KiB
var audioContext=null,meter=null,analyser=null,rafID=null,buflen=1024,buf=new Float32Array(buflen),audio=!1,midi=!1,audioSample=[0,0,0,0,0,0,0,0,0,0],parameterSave={};function range(e,t){return e.options.includes("i")?(increment=parseInt(e.options.split(":")[1]),e.name in parameterSave?""!=e.array?(parameterSave[e.name]=parameterSave[e.name]+increment>e.array.length?0:parameterSave[e.name]+increment,e.array[parameterSave[e.name]]):(increment>0?parameterSave[e.name]=parameterSave[e.name]+increment>parseInt(e.max)?parseInt(e.min):parameterSave[e.name]+increment:parameterSave[e.name]=parameterSave[e.name]+increment<parseInt(e.min)?parseInt(e.max):parameterSave[e.name]+increment,parameterSave[e.name]):(parameterSave[e.name]=parseInt(e.min),parseInt(e.min))):"r"==e.options?""!=e.array?e.array[Math.floor(Math.random()*e.array.length)]:"#"==e.min[0]?(e.min=parseInt(e.min.replace("#",""),16),e.max=parseInt(e.max.replace("#",""),16),"#"+(Math.random()*(e.max-e.min)+e.min).toString(16).split(".")[0]):Math.random()*(parseInt(e.max)-parseInt(e.min))+parseInt(e.min):"d"==e.options?"#"==e.min[0]?(e.min=parseInt(e.min.replace("#",""),16),e.max=parseInt(e.max.replace("#",""),16),"#"+(e.min+Math.round(e.max-e.min)*t).toString(16).split(".")[0]):parseInt(e.min)+Math.round(parseInt(e.max)-parseInt(e.min))*t:void 0}function midiApi(){chrome.storage.sync.get(["midiI","activate"],(function(e){midi=e.midiI,activate=e.activate,midi&&activate?WebMidi.enable().then(launchMidi).catch(e=>alert(e)):(WebMidi.disable(),chrome.runtime.sendMessage({type:"updateUi",data:!1}))}))}function launchMidi(){if(WebMidi.inputs.length<1)chrome.storage.sync.set({midiI:!1}),chrome.runtime.sendMessage({type:"updateUi",data:!1}),chrome.runtime.sendMessage({type:"midiDevices",data:"Pas d'appareil trouvé."});else{chrome.storage.sync.set({midiI:!0}),chrome.runtime.sendMessage({type:"updateUi",data:!0}),devices="",WebMidi.inputs.forEach((e,t)=>{devices+=t+" : "+e.name+e.manufacturer+"<br>"}),chrome.runtime.sendMessage({type:"midiDevices",data:devices});const e=WebMidi.inputs[0];e.addListener("noteon",e=>{midiEvent("noteon",e)},{channels:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}),e.addListener("controlchange",e=>{midiEvent("controlchange",e)},{channels:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]})}}function midiEvent(e,t){if(chrome.storage.sync.get(["popup"],(function(a){if(a.popup)switch(e){case"noteon":chrome.runtime.sendMessage({type:"midiEvent",data:t.note.number});break;case"controlchange":chrome.runtime.sendMessage({type:"midiEvent",data:t.controller.number});break;case"pitchbend":chrome.runtime.sendMessage({type:"midiEvent",data:t.type})}})),chrome.storage.sync.get(["all"],(function(a){a.all.forEach(a=>{if(value=a.value,midiValue=t.value,eventIn=!1,a.templates.forEach(n=>{"midi"==n.type&&(midiValue=range(n,midiValue),"noteon"==e&&"note"==n.eventType&&n.eventName==t.note.number&&(value=a.value.replace("["+n.templateFull+"]",midiValue),eventIn=!0),"controlchange"==e&&"cc"==n.eventType&&n.eventName==t.controller.number&&(value=a.value.replace("["+n.templateFull+"]",midiValue),eventIn=!0),"pitchbend"==e&&"pb"==n.eventType&&(value=a.value.replace("["+n.templateFull+"]",midiValue),eventIn=!0))}),eventIn){document.querySelectorAll(a.element).forEach(e=>{e.style[a.property]=value})}})})),"noteon"==e)for(let e=0;e<INFOLOOP.length;e++){const a=INFOLOOP[e];a.controllerPlayPause==t.note.number?loop(e):a.controllerRecord==t.note.number&&(INFOLOOP[e].isRecording=!INFOLOOP[e].isRecording,record(INFOLOOP[e].isRecording,e))}if(isRecording){const a=Math.floor(performance.now()-recordingTime);RECORDED[recordCount].push({type:e,data:t,time:a})}}function createAudioMeter(e,t,a,n){var o=e.createScriptProcessor(512);return o.onaudioprocess=volumeAudioProcess,o.clipping=!1,o.lastClip=0,o.volume=0,o.clipLevel=t||.98,o.averaging=a||.95,o.clipLag=n||750,o.connect(e.destination),o.checkClipping=function(){return!!this.clipping&&(this.lastClip+this.clipLag<window.performance.now()&&(this.clipping=!1),this.clipping)},o.shutdown=function(){this.disconnect(),this.onaudioprocess=null},o}function volumeAudioProcess(e){for(var t,a=e.inputBuffer.getChannelData(0),n=a.length,o=0,r=0;r<n;r++)t=a[r],Math.abs(t)>=this.clipLevel&&(this.clipping=!0,this.lastClip=window.performance.now()),o+=t*t;var i=Math.sqrt(o/n);this.volume=Math.max(i,this.volume*this.averaging)}function audioApi(){chrome.storage.sync.get(["audioI","activate"],(function(e){if(audio=e.audioI,activate=e.activate,audio&&activate){window.AudioContext=window.AudioContext||window.webkitAudioContext,audioContext=new AudioContext;try{navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia,navigator.getUserMedia({audio:{mandatory:{googEchoCancellation:"false",googAutoGainControl:"false",googNoiseSuppression:"false",googHighpassFilter:"false"},optional:[]}},gotStream,didntGetStream)}catch(e){alert("getUserMedia threw exception :"+e)}}else console.info("Audio suspend"),audioContext.suspend(),chrome.storage.sync.set({audioI:!1}),audio=!1,chrome.runtime.sendMessage({type:"updateUi",data:!1})}))}function didntGetStream(){chrome.storage.sync.set({audioI:!1}),audio=!1,chrome.runtime.sendMessage({type:"updateUi",data:!1}),console.error("Stream generation failed.")}var mediaStreamSource=null;function gotStream(e){mediaStreamSource=audioContext.createMediaStreamSource(e),(analyser=audioContext.createAnalyser()).fftSize=2048,analyser.maxDecibels=-25,analyser.minDecibels=-85,mediaStreamSource.connect(analyser),meter=createAudioMeter(audioContext),mediaStreamSource.connect(meter),audioContext.resume(),console.info("Audio start"),chrome.storage.sync.set({audioI:!0}),chrome.runtime.sendMessage({type:"updateUi",data:!0}),audioEvent()}var noteStrings=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"];function noteFromPitch(e){var t=Math.log(e/440)/Math.log(2)*12;return Math.round(t)+69}function frequencyFromNoteNumber(e){return 440*Math.pow(2,(e-69)/12)}function centsOffFromPitch(e,t){return Math.floor(1200*Math.log(e/frequencyFromNoteNumber(t))/Math.log(2))}var MIN_SAMPLES=0;function autoCorrelate(e,t){for(var a=e.length,n=Math.floor(a/2),o=-1,r=0,i=0,s=!1,c=new Array(n),l=0;l<a;l++){var m=e[l];i+=m*m}if((i=Math.sqrt(i/a))<.01)return-1;for(var u=1,d=MIN_SAMPLES;d<n;d++){var p=0;for(l=0;l<n;l++)p+=Math.abs(e[l]-e[l+d]);if(p=1-p/n,c[d]=p,p>.9&&p>u)s=!0,p>r&&(r=p,o=d);else if(s){return t/(o+8*((c[o+1]-c[o-1])/c[o]))}u=p}return r>.01?t/o:-1}function freqToBin(e,t="round"){const a=analyser.frequencyBinCount-1,n=Math[t](256*e/audioContext.sampleRate);return n<a?n:a}chrome.storage.sync.get(["records"],(function(e){RECORDED=e.records.loop,INFOLOOP=e.records.info}));let theLoop,recordCount=0,isRecording=!1,recordingTime=0;const record=(e,t)=>{isRecording=e,e?(recordingTime=performance.now(),recordCount=t):chrome.storage.sync.set({records:{loop:RECORDED,info:INFOLOOP}})},loop=e=>{if(INFOLOOP[e].isLoop=!INFOLOOP[e].isLoop,chrome.storage.sync.set({records:{loop:RECORDED,info:INFOLOOP}}),isRecording=!1,RECORDED[e].length){const t=RECORDED[e][RECORDED[e].length-1].time;INFOLOOP[e].isLoop?(loopNotes(e),theLoop=setInterval(()=>loopNotes(e),t)):clearInterval(theLoop)}},loopNotes=e=>{RECORDED[e].forEach(t=>{setTimeout(()=>{INFOLOOP[e].isLoop&&midiEvent(t.type,t.data)},t.time)})},reset=e=>{RECORDED[e].length=0,isRecording=!1,isLoop=!1,chrome.storage.sync.set({records:{loop:RECORDED,info:INFOLOOP}})},presets={low:[20,250],lomi:[250,500],mid:[500,2e3],mihi:[2e3,4e3],hi:[4e3,16e3]};function audioEvent(){analyser.getFloatTimeDomainData(buf);var e=autoCorrelate(buf,audioContext.sampleRate);if(-1!=e){var t=noteFromPitch(e);centsOffFromPitch(e,t)}var a,n,o,r,i,s=analyser.frequencyBinCount,c=new Uint8Array(s);analyser.getByteFrequencyData(c),energies=[],Object.keys(presets).forEach(e=>{[a,n]=presets[e],o=freqToBin(a),r=n?freqToBin(n):o,i=0;for(let e=o;e<=r;e++)i+=c[e];energies[e]=i/(r-o+1)/255});const l=audioSample.reduce((e,t)=>e+t,0)/audioSample.length||0;var m=!1;l+.05<meter.volume&&(m=!0),audioSample.shift(),audioSample.push(meter.volume),chrome.storage.sync.get(["all"],(function(e){e.all.length>0&&e.all.forEach(e=>{if(value=e.value,eventIn=!1,e.templates.forEach(e=>{"audio"==e.type&&(Object.keys(presets).forEach(t=>{e.eventType==t&&(eventIn=!0,value=value.replace("["+e.templateFull+"]",range(e,energies[t])))}),"loud"==e.eventType&&(eventIn=!0,volume=1.4*meter.volume,value=value.replace("["+e.templateFull+"]",1.4*meter.volume<1?range(e,volume):0)),"onset"==e.eventType&&e.eventName==noteStrings[t%12]&&(eventIn=!0,value=value.replace("["+e.templateFull+"]",range(e,1))),m&&"attack"==e.eventType&&(console.log("Attack"),eventIn=!0,value=value.replace("["+e.templateFull+"]","")))}),eventIn){document.querySelectorAll(e.element).forEach(t=>{t.style[e.property]=value})}})})),audio&&(rafID=window.requestAnimationFrame(audioEvent))}function pureCss(){chrome.storage.sync.get(["all"],(function(e){e.all.length>0&&e.all.forEach(e=>{e.templates.forEach(t=>{if("pure"==t.type){document.querySelectorAll(e.element).forEach(t=>{t.style[e.property]=e.value})}})})}))}function onMessage({type:e,data:t}){switch(console.info("Message received from CSSLSD back :",e,t),e){case"update":pureCss();break;case"start":chrome.storage.sync.get(["activate"],(function(e){e.activate?pureCss():(audioApi(),midiApi())}));break;case"audio":audioApi();break;case"midi":midiApi();break;case"playLoop":chrome.storage.sync.get(["activate"],(function(e){e.activate&&loop(t)}));break;case"record":record(t.bool,t.number);break;case"resetLoop":RECORDED[t].length=0,isRecording=!1,isLoop=!1,chrome.storage.sync.set({records:{loop:RECORDED,info:INFOLOOP}}),chrome.runtime.sendMessage({type:"updateUi",data:!1})}}chrome.storage.sync.set({popup:!0}),chrome.runtime.onMessage.addListener(onMessage),chrome.storage.sync.get(["activate"],(function(e){e.activate&&audioApi()}));
//# sourceMappingURL=content.min.js.map