diff --git a/content.js b/content.js index 9442a69c466f7dd471998761647cbb85fa861bcc..3d75d28ddb1906253d2717d6826f0778b7778eae 100644 --- a/content.js +++ b/content.js @@ -1,5 +1,5 @@ var audioContext = null; -var meter = null; +var meter = {volume: 0}; var analyser = null; var rafID = null; var buflen = 1024; @@ -182,50 +182,6 @@ function midiEvent(type, data) { } -function createAudioMeter(audioContext, clipLevel, averaging, clipLag) { - var processor = audioContext.createScriptProcessor(512); - processor.onaudioprocess = volumeAudioProcess; - processor.clipping = false; - processor.lastClip = 0; - processor.volume = 0; - processor.clipLevel = clipLevel || 0.98; - processor.averaging = averaging || 0.95; - processor.clipLag = clipLag || 750; - processor.connect(audioContext.destination); - processor.checkClipping = - function () { - if (!this.clipping) - return false; - if ((this.lastClip + this.clipLag) < window.performance.now()) - this.clipping = false; - return this.clipping; - }; - processor.shutdown = - function () { - this.disconnect(); - this.onaudioprocess = null; - }; - - return processor; -} - -function volumeAudioProcess(event) { - var buf = event.inputBuffer.getChannelData(0); - var bufLength = buf.length; - var sum = 0; - var x; - for (var i = 0; i < bufLength; i++) { - x = buf[i]; - if (Math.abs(x) >= this.clipLevel) { - this.clipping = true; - this.lastClip = window.performance.now(); - } - sum += x * x; - } - var rms = Math.sqrt(sum / bufLength); - this.volume = Math.max(rms, this.volume * this.averaging); -} - /** * Initialize audio, request micro to user */ @@ -285,8 +241,7 @@ function didntGetStream() { } var mediaStreamSource = null; - -function gotStream(stream) { +async function gotStream(stream) { // Create an AudioNode from the stream. mediaStreamSource = audioContext.createMediaStreamSource(stream); window.streamReference = stream; @@ -296,9 +251,19 @@ function gotStream(stream) { analyser.minDecibels = -85; mediaStreamSource.connect(analyser); // Create a new volume meter and connect it. - meter = createAudioMeter(audioContext); - mediaStreamSource.connect(meter); + await audioContext.audioWorklet.addModule(chrome.runtime.getURL("worklet.js")); + console.log(chrome.runtime.getURL("worklet.js")); + const node = new AudioWorkletNode(audioContext, 'vumeter'); + node.port.onmessage = event => { + let _volume = 0 + let _sensibility = 5 + if (event.data.volume) + _volume = event.data.volume; + meter = {volume: _volume}; + } + mediaStreamSource.connect(node); audioContext.resume(); + console.info('Audio start'); chrome.storage.sync.set({ audioI: true }); chrome.runtime.sendMessage({ type: 'updateUi', data: true }); diff --git a/content.min.js b/content.min.js index 7d32193c10bb81b712511e0c7eee06a8905c559e..1ef38a8667e2bad06dd689d862fcb710f534c31d 100644 --- a/content.min.js +++ b/content.min.js @@ -1,2 +1,2 @@ -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"),window.streamReference&&(audioContext.suspend(),window.streamReference.getAudioTracks().forEach((function(e){e.stop()})),window.streamReference.getVideoTracks().forEach((function(e){e.stop()})),window.streamReference=null),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),window.streamReference=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)=>{INFOLOOP[t].isRecording=!INFOLOOP[t].isRecording,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(),midiApi())})); +var audioContext=null,meter={volume:0},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 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"),window.streamReference&&(audioContext.suspend(),window.streamReference.getAudioTracks().forEach((function(e){e.stop()})),window.streamReference.getVideoTracks().forEach((function(e){e.stop()})),window.streamReference=null),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;async function gotStream(e){mediaStreamSource=audioContext.createMediaStreamSource(e),window.streamReference=e,(analyser=audioContext.createAnalyser()).fftSize=2048,analyser.maxDecibels=-25,analyser.minDecibels=-85,mediaStreamSource.connect(analyser),await audioContext.audioWorklet.addModule(chrome.runtime.getURL("worklet.js")),console.log(chrome.runtime.getURL("worklet.js"));const t=new AudioWorkletNode(audioContext,"vumeter");t.port.onmessage=e=>{let t=0;e.data.volume&&(t=e.data.volume),meter={volume:t}},mediaStreamSource.connect(t),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),m=0;m<a;m++){var l=e[m];i+=l*l}if((i=Math.sqrt(i/a))<.01)return-1;for(var u=1,d=MIN_SAMPLES;d<n;d++){var p=0;for(m=0;m<n;m++)p+=Math.abs(e[m]-e[m+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)=>{INFOLOOP[t].isRecording=!INFOLOOP[t].isRecording,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 m=audioSample.reduce((e,t)=>e+t,0)/audioSample.length||0;var l=!1;m+.05<meter.volume&&(l=!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))):l&&"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(),midiApi())})); //# sourceMappingURL=content.min.js.map \ No newline at end of file diff --git a/content.min.js.map b/content.min.js.map index e1515c171a618194c4143d3f5785c703bb4c5cbc..bc13106dd6328c91af836785ff212140e3168c22 100644 --- a/content.min.js.map +++ b/content.min.js.map @@ -6,6 +6,7 @@ "names": [ "audioContext", "meter", + "volume", "analyser", "rafID", "buflen", @@ -95,36 +96,9 @@ "RECORDED", "recordCount", "push", - "createAudioMeter", - "clipLevel", - "averaging", - "clipLag", - "processor", - "createScriptProcessor", - "onaudioprocess", - "volumeAudioProcess", - "clipping", - "lastClip", - "volume", - "connect", - "destination", - "checkClipping", - "this", - "window", - "shutdown", - "disconnect", - "event", - "x", - "inputBuffer", - "getChannelData", - "bufLength", - "sum", - "i", - "abs", - "rms", - "sqrt", "audioApi", "audioI", + "window", "AudioContext", "webkitAudioContext", "navigator", @@ -149,19 +123,30 @@ "getVideoTracks", "error", "mediaStreamSource", + "async", "stream", "createMediaStreamSource", "createAnalyser", "fftSize", "maxDecibels", "minDecibels", + "connect", + "audioWorklet", + "addModule", + "getURL", + "log", + "node", + "AudioWorkletNode", + "port", + "onmessage", + "event", + "_volume", "resume", "audioEvent", "noteStrings", "noteFromPitch", "frequency", "noteNum", - "log", "frequencyFromNoteNumber", "pow", "centsOffFromPitch", @@ -172,13 +157,17 @@ "MAX_SAMPLES", "best_offset", "best_correlation", + "rms", "foundGoodCorrelation", "correlations", "Array", + "i", "val", + "sqrt", "lastCorrelation", "offset", "correlation", + "abs", "freqToBin", "freq", "rounding", @@ -227,6 +216,6 @@ "onMessage", "bool" ], - "mappings": "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", + "mappings": "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", "file": "content.js" } \ No newline at end of file diff --git a/worklet.js b/worklet.js new file mode 100644 index 0000000000000000000000000000000000000000..2a85c8ba50f9658299548f520f38174e33e6fb54 --- /dev/null +++ b/worklet.js @@ -0,0 +1,52 @@ +const SMOOTHING_FACTOR = 0.95; +const MINIMUM_VALUE = 0.00001; +registerProcessor('vumeter', class extends AudioWorkletProcessor { + + _volume + _updateIntervalInMS + _nextUpdateFrame + + constructor () { + super(); + this._volume = 0; + this._updateIntervalInMS = 25; + this._nextUpdateFrame = this._updateIntervalInMS; + this.port.onmessage = event => { + if (event.data.updateIntervalInMS) + this._updateIntervalInMS = event.data.updateIntervalInMS; + } + } + + get intervalInFrames () { + return this._updateIntervalInMS / 1000 * sampleRate; + } + + process (inputs, outputs, parameters) { + const input = inputs[0]; + + // Note that the input will be down-mixed to mono; however, if no inputs are + // connected then zero channels will be passed in. + if (input.length > 0) { + const samples = input[0]; + let sum = 0; + let rms = 0; + + // Calculated the squared-sum. + for (let i = 0; i < samples.length; ++i) + sum += samples[i] * samples[i]; + + // Calculate the RMS level and update the volume. + rms = Math.sqrt(sum / samples.length); + this._volume = Math.max(rms, this._volume * SMOOTHING_FACTOR); + + // Update and sync the volume property with the main thread. + this._nextUpdateFrame -= samples.length; + if (this._nextUpdateFrame < 0) { + this._nextUpdateFrame += this.intervalInFrames; + this.port.postMessage({volume: this._volume}); + } + } + + return true; + } +}); \ No newline at end of file