@jpdutoit/squelchy 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@jpdutoit/squelchy",
3
+ "version": "0.0.1",
4
+ "description": "Modular synth modules for plain Web Audio: oscillators, filters, envelopes, effects and drum kits as native-feeling nodes, with AudioWorklet DSP inlined and tree-shakeable.",
5
+ "license": "MIT",
6
+ "author": "jpdutoit",
7
+ "homepage": "https://squelchy.studio",
8
+ "keywords": [
9
+ "web-audio",
10
+ "webaudio",
11
+ "audioworklet",
12
+ "synth",
13
+ "synthesizer",
14
+ "modular",
15
+ "dsp",
16
+ "filter",
17
+ "oscillator",
18
+ "reverb",
19
+ "drum-machine"
20
+ ],
21
+ "type": "module",
22
+ "main": "./index.js",
23
+ "module": "./index.js",
24
+ "types": "./index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./index.d.ts",
28
+ "import": "./index.js"
29
+ },
30
+ "./meta.json": "./meta.json",
31
+ "./package.json": "./package.json"
32
+ },
33
+ "sideEffects": false,
34
+ "files": [
35
+ "*.js",
36
+ "*.js.map",
37
+ "index.d.ts",
38
+ "meta.json",
39
+ "docs",
40
+ "README.md",
41
+ "LICENSE"
42
+ ]
43
+ }
@@ -0,0 +1,60 @@
1
+ import {
2
+ adsr_envelope_default,
3
+ bitcrusher_default,
4
+ comb_filter_default,
5
+ env_follower_default,
6
+ fdn_reverb_default,
7
+ flanger_default,
8
+ formant_table_default,
9
+ freq_divider_default,
10
+ freq_shifter_default,
11
+ glide_default,
12
+ ladder_filter_default,
13
+ map_res_default,
14
+ map_voct_to_freq_default,
15
+ map_voct_to_period_default,
16
+ ping_pong_default,
17
+ pitch_shifter_default,
18
+ spring_reverb_default,
19
+ tape_delay_default,
20
+ tape_stop_default,
21
+ vca_default,
22
+ waveshaper_default
23
+ } from "./chunk-NDUSYSHF.js";
24
+
25
+ // src/lib-runtime/generated/worklet-src/master-limiter.ts
26
+ var master_limiter_default = '(()=>{var b=Object.defineProperty;var x=(l,s,a)=>s in l?b(l,s,{enumerable:!0,configurable:!0,writable:!0,value:a}):l[s]=a;var e=(l,s,a)=>x(l,typeof s!="symbol"?s+"":s,a);class C extends AudioWorkletProcessor{constructor(){super();e(this,"delay",[]);e(this,"gainRing");e(this,"gainSum");e(this,"len");e(this,"w",0);e(this,"env",1);e(this,"meterCountdown");e(this,"meterPeriod");e(this,"minGain",1);e(this,"inPeak",0);e(this,"outPeak",0);this.len=Math.max(8,Math.round(1.5/1e3*sampleRate)),this.gainRing=new Float32Array(this.len).fill(1),this.gainSum=this.len,this.meterPeriod=Math.max(1,Math.round(50/1e3*sampleRate)),this.meterCountdown=this.meterPeriod}static get parameterDescriptors(){return[{name:"ceiling",defaultValue:.98,minValue:.05,maxValue:1,automationRate:"k-rate"},{name:"release",defaultValue:120,minValue:5,maxValue:2e3,automationRate:"k-rate"},{name:"enabled",defaultValue:1,minValue:0,maxValue:1,automationRate:"k-rate"}]}ensureChannels(a,p){if(this.delay.length===a&&this.delay[0]?.length===this.len)return;const h=[];for(let i=0;i<a;i++)h[i]=this.delay[i]?.length===this.len?this.delay[i]:new Float32Array(this.len);this.delay=h}process(a,p,h){const i=a[0],m=p[0];if(!m||m.length===0)return!0;const v=m.length,P=m[0]?.length??0;if(!P)return!0;this.ensureChannels(v,P);const u=h.ceiling[0],A=h.release[0],R=h.enabled[0]>=.5,V=1-Math.exp(-1/(A/1e3*sampleRate)),M=this.len;for(let c=0;c<P;c++){let r=0;for(let n=0;n<v;n++){const d=i?.[n]??i?.[0],g=d?d[c]:0,f=g<0?-g:g;f>r&&(r=f)}r>=0||(r=0),r>this.inPeak&&(this.inPeak=r);const k=r>u?u/r:1;k<this.env?this.env=k:this.env+=(k-this.env)*V,this.gainSum+=this.env-this.gainRing[this.w],this.gainRing[this.w]=this.env;let o=this.gainSum/M;o>=0||(o=1),o>1&&(o=1),R||(o=1),o<this.minGain&&(this.minGain=o);for(let n=0;n<v;n++){const d=this.delay[n],g=d[this.w],f=i?.[n]??i?.[0],y=f?f[c]:0;d[this.w]=y===y?y:0;let t=g*o;t>u?t=u:t<-u?t=-u:t!==t&&(t=0),m[n][c]=t;const w=t<0?-t:t;w>this.outPeak&&(this.outPeak=w)}this.w=this.w+1>=M?0:this.w+1,--this.meterCountdown<=0&&(this.meterCountdown=this.meterPeriod,this.port.postMessage({gr:this.minGain<1?-20*Math.log10(Math.max(this.minGain,1e-6)):0,inPeak:this.inPeak,outPeak:this.outPeak}),this.minGain=1,this.inPeak=0,this.outPeak=0)}return!0}}registerProcessor("master-limiter",C);})();\n';
27
+
28
+ // src/lib-runtime/generated/worklet-src/scope-ringbuf.ts
29
+ var scope_ringbuf_default = '(()=>{var P=Object.defineProperty;var W=(l,s,o)=>s in l?P(l,s,{enumerable:!0,configurable:!0,writable:!0,value:o}):l[s]=o;var t=(l,s,o)=>W(l,typeof s!="symbol"?s+"":s,o);class w extends AudioWorkletProcessor{constructor(o){super();t(this,"buffer");t(this,"writePos",0);t(this,"bufferSize");t(this,"timeWindowSamples",1024);t(this,"displayWidth",100);t(this,"frameCounter",0);t(this,"sendInterval",2048);t(this,"displayBuf");t(this,"displayWritePos",0);t(this,"samplesPerPixel",1);t(this,"pixelAccum",0);t(this,"pixelPeak",0);this.bufferSize=Math.ceil(sampleRate*4),this.buffer=new Float32Array(this.bufferSize),this.displayBuf=new Float32Array(100),this.timeWindowSamples=Math.floor(10/1e3*sampleRate),this.displayWidth=100,this.recalcRolling(),this.port.onmessage=h=>{if(h.data.type==="config"){let n=!1;h.data.timeWindow!==void 0&&(this.timeWindowSamples=Math.max(16,Math.min(Math.floor(h.data.timeWindow/1e3*sampleRate),this.bufferSize-1)),n=!0),h.data.displayWidth!==void 0&&(this.displayWidth=Math.max(16,Math.min(h.data.displayWidth,512)),n=!0),n&&this.recalcRolling()}}}recalcRolling(){this.samplesPerPixel=Math.max(1,Math.floor(this.timeWindowSamples/this.displayWidth)),this.displayBuf=new Float32Array(this.displayWidth),this.displayWritePos=0,this.pixelAccum=0,this.pixelPeak=0}isRolling(){return this.timeWindowSamples>=sampleRate*.2}process(o,h,n){const d=o[0]?.[0];if(!d)return!0;const c=this.isRolling();for(let i=0;i<d.length;i++){const r=d[i];this.buffer[this.writePos]=r,this.writePos=(this.writePos+1)%this.bufferSize,c&&(Math.abs(r)>Math.abs(this.pixelPeak)&&(this.pixelPeak=r),this.pixelAccum++,this.pixelAccum>=this.samplesPerPixel&&(this.displayBuf[this.displayWritePos]=this.pixelPeak,this.displayWritePos=(this.displayWritePos+1)%this.displayWidth,this.pixelAccum=0,this.pixelPeak=0))}if(this.frameCounter+=d.length,this.frameCounter<this.sendInterval)return!0;this.frameCounter=0;const p=this.displayWidth;if(c){const i=new Float32Array(p),r=this.displayWritePos;for(let e=0;e<p;e++)i[e]=this.displayBuf[(r+e)%p];this.port.postMessage({type:"waveform",data:i},[i.buffer])}else{const i=this.timeWindowSamples,r=(this.writePos-i+this.bufferSize)%this.bufferSize;let e=-1;const m=Math.min(i,4096);for(let a=0;a<m;a++){const f=(r-a+this.bufferSize)%this.bufferSize,b=(f-1+this.bufferSize)%this.bufferSize;if(this.buffer[b]<=0&&this.buffer[f]>0){e=f;break}}e<0&&(e=r);const u=new Float32Array(p),y=i/p;for(let a=0;a<p;a++){const f=(e+Math.floor(a*y))%this.bufferSize;u[a]=this.buffer[f]}this.port.postMessage({type:"waveform",data:u},[u.buffer])}return!0}}registerProcessor("scope-ringbuf",w);})();\n';
30
+
31
+ // src/lib-runtime/generated/worklets-inline.ts
32
+ var WORKLET_SOURCES = {
33
+ "adsr-envelope": adsr_envelope_default,
34
+ "bitcrusher": bitcrusher_default,
35
+ "comb-filter": comb_filter_default,
36
+ "env-follower": env_follower_default,
37
+ "fdn-reverb": fdn_reverb_default,
38
+ "flanger": flanger_default,
39
+ "formant-table": formant_table_default,
40
+ "freq-divider": freq_divider_default,
41
+ "freq-shifter": freq_shifter_default,
42
+ "glide": glide_default,
43
+ "ladder-filter": ladder_filter_default,
44
+ "map-res": map_res_default,
45
+ "map-voct-to-freq": map_voct_to_freq_default,
46
+ "map-voct-to-period": map_voct_to_period_default,
47
+ "master-limiter": master_limiter_default,
48
+ "ping-pong": ping_pong_default,
49
+ "pitch-shifter": pitch_shifter_default,
50
+ "scope-ringbuf": scope_ringbuf_default,
51
+ "spring-reverb": spring_reverb_default,
52
+ "tape-delay": tape_delay_default,
53
+ "tape-stop": tape_stop_default,
54
+ "vca": vca_default,
55
+ "waveshaper": waveshaper_default
56
+ };
57
+ export {
58
+ WORKLET_SOURCES
59
+ };
60
+ //# sourceMappingURL=worklets-inline-MUVFLGPY.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lib-runtime/generated/worklet-src/master-limiter.ts", "../src/lib-runtime/generated/worklet-src/scope-ringbuf.ts", "../src/lib-runtime/generated/worklets-inline.ts"],
4
+ "sourcesContent": ["export default \"(()=>{var b=Object.defineProperty;var x=(l,s,a)=>s in l?b(l,s,{enumerable:!0,configurable:!0,writable:!0,value:a}):l[s]=a;var e=(l,s,a)=>x(l,typeof s!=\\\"symbol\\\"?s+\\\"\\\":s,a);class C extends AudioWorkletProcessor{constructor(){super();e(this,\\\"delay\\\",[]);e(this,\\\"gainRing\\\");e(this,\\\"gainSum\\\");e(this,\\\"len\\\");e(this,\\\"w\\\",0);e(this,\\\"env\\\",1);e(this,\\\"meterCountdown\\\");e(this,\\\"meterPeriod\\\");e(this,\\\"minGain\\\",1);e(this,\\\"inPeak\\\",0);e(this,\\\"outPeak\\\",0);this.len=Math.max(8,Math.round(1.5/1e3*sampleRate)),this.gainRing=new Float32Array(this.len).fill(1),this.gainSum=this.len,this.meterPeriod=Math.max(1,Math.round(50/1e3*sampleRate)),this.meterCountdown=this.meterPeriod}static get parameterDescriptors(){return[{name:\\\"ceiling\\\",defaultValue:.98,minValue:.05,maxValue:1,automationRate:\\\"k-rate\\\"},{name:\\\"release\\\",defaultValue:120,minValue:5,maxValue:2e3,automationRate:\\\"k-rate\\\"},{name:\\\"enabled\\\",defaultValue:1,minValue:0,maxValue:1,automationRate:\\\"k-rate\\\"}]}ensureChannels(a,p){if(this.delay.length===a&&this.delay[0]?.length===this.len)return;const h=[];for(let i=0;i<a;i++)h[i]=this.delay[i]?.length===this.len?this.delay[i]:new Float32Array(this.len);this.delay=h}process(a,p,h){const i=a[0],m=p[0];if(!m||m.length===0)return!0;const v=m.length,P=m[0]?.length??0;if(!P)return!0;this.ensureChannels(v,P);const u=h.ceiling[0],A=h.release[0],R=h.enabled[0]>=.5,V=1-Math.exp(-1/(A/1e3*sampleRate)),M=this.len;for(let c=0;c<P;c++){let r=0;for(let n=0;n<v;n++){const d=i?.[n]??i?.[0],g=d?d[c]:0,f=g<0?-g:g;f>r&&(r=f)}r>=0||(r=0),r>this.inPeak&&(this.inPeak=r);const k=r>u?u/r:1;k<this.env?this.env=k:this.env+=(k-this.env)*V,this.gainSum+=this.env-this.gainRing[this.w],this.gainRing[this.w]=this.env;let o=this.gainSum/M;o>=0||(o=1),o>1&&(o=1),R||(o=1),o<this.minGain&&(this.minGain=o);for(let n=0;n<v;n++){const d=this.delay[n],g=d[this.w],f=i?.[n]??i?.[0],y=f?f[c]:0;d[this.w]=y===y?y:0;let t=g*o;t>u?t=u:t<-u?t=-u:t!==t&&(t=0),m[n][c]=t;const w=t<0?-t:t;w>this.outPeak&&(this.outPeak=w)}this.w=this.w+1>=M?0:this.w+1,--this.meterCountdown<=0&&(this.meterCountdown=this.meterPeriod,this.port.postMessage({gr:this.minGain<1?-20*Math.log10(Math.max(this.minGain,1e-6)):0,inPeak:this.inPeak,outPeak:this.outPeak}),this.minGain=1,this.inPeak=0,this.outPeak=0)}return!0}}registerProcessor(\\\"master-limiter\\\",C);})();\\n\";\n", "export default \"(()=>{var P=Object.defineProperty;var W=(l,s,o)=>s in l?P(l,s,{enumerable:!0,configurable:!0,writable:!0,value:o}):l[s]=o;var t=(l,s,o)=>W(l,typeof s!=\\\"symbol\\\"?s+\\\"\\\":s,o);class w extends AudioWorkletProcessor{constructor(o){super();t(this,\\\"buffer\\\");t(this,\\\"writePos\\\",0);t(this,\\\"bufferSize\\\");t(this,\\\"timeWindowSamples\\\",1024);t(this,\\\"displayWidth\\\",100);t(this,\\\"frameCounter\\\",0);t(this,\\\"sendInterval\\\",2048);t(this,\\\"displayBuf\\\");t(this,\\\"displayWritePos\\\",0);t(this,\\\"samplesPerPixel\\\",1);t(this,\\\"pixelAccum\\\",0);t(this,\\\"pixelPeak\\\",0);this.bufferSize=Math.ceil(sampleRate*4),this.buffer=new Float32Array(this.bufferSize),this.displayBuf=new Float32Array(100),this.timeWindowSamples=Math.floor(10/1e3*sampleRate),this.displayWidth=100,this.recalcRolling(),this.port.onmessage=h=>{if(h.data.type===\\\"config\\\"){let n=!1;h.data.timeWindow!==void 0&&(this.timeWindowSamples=Math.max(16,Math.min(Math.floor(h.data.timeWindow/1e3*sampleRate),this.bufferSize-1)),n=!0),h.data.displayWidth!==void 0&&(this.displayWidth=Math.max(16,Math.min(h.data.displayWidth,512)),n=!0),n&&this.recalcRolling()}}}recalcRolling(){this.samplesPerPixel=Math.max(1,Math.floor(this.timeWindowSamples/this.displayWidth)),this.displayBuf=new Float32Array(this.displayWidth),this.displayWritePos=0,this.pixelAccum=0,this.pixelPeak=0}isRolling(){return this.timeWindowSamples>=sampleRate*.2}process(o,h,n){const d=o[0]?.[0];if(!d)return!0;const c=this.isRolling();for(let i=0;i<d.length;i++){const r=d[i];this.buffer[this.writePos]=r,this.writePos=(this.writePos+1)%this.bufferSize,c&&(Math.abs(r)>Math.abs(this.pixelPeak)&&(this.pixelPeak=r),this.pixelAccum++,this.pixelAccum>=this.samplesPerPixel&&(this.displayBuf[this.displayWritePos]=this.pixelPeak,this.displayWritePos=(this.displayWritePos+1)%this.displayWidth,this.pixelAccum=0,this.pixelPeak=0))}if(this.frameCounter+=d.length,this.frameCounter<this.sendInterval)return!0;this.frameCounter=0;const p=this.displayWidth;if(c){const i=new Float32Array(p),r=this.displayWritePos;for(let e=0;e<p;e++)i[e]=this.displayBuf[(r+e)%p];this.port.postMessage({type:\\\"waveform\\\",data:i},[i.buffer])}else{const i=this.timeWindowSamples,r=(this.writePos-i+this.bufferSize)%this.bufferSize;let e=-1;const m=Math.min(i,4096);for(let a=0;a<m;a++){const f=(r-a+this.bufferSize)%this.bufferSize,b=(f-1+this.bufferSize)%this.bufferSize;if(this.buffer[b]<=0&&this.buffer[f]>0){e=f;break}}e<0&&(e=r);const u=new Float32Array(p),y=i/p;for(let a=0;a<p;a++){const f=(e+Math.floor(a*y))%this.bufferSize;u[a]=this.buffer[f]}this.port.postMessage({type:\\\"waveform\\\",data:u},[u.buffer])}return!0}}registerProcessor(\\\"scope-ringbuf\\\",w);})();\\n\";\n", "import adsr_envelope from './worklet-src/adsr-envelope';\nimport bitcrusher from './worklet-src/bitcrusher';\nimport comb_filter from './worklet-src/comb-filter';\nimport env_follower from './worklet-src/env-follower';\nimport fdn_reverb from './worklet-src/fdn-reverb';\nimport flanger from './worklet-src/flanger';\nimport formant_table from './worklet-src/formant-table';\nimport freq_divider from './worklet-src/freq-divider';\nimport freq_shifter from './worklet-src/freq-shifter';\nimport glide from './worklet-src/glide';\nimport ladder_filter from './worklet-src/ladder-filter';\nimport map_res from './worklet-src/map-res';\nimport map_voct_to_freq from './worklet-src/map-voct-to-freq';\nimport map_voct_to_period from './worklet-src/map-voct-to-period';\nimport master_limiter from './worklet-src/master-limiter';\nimport ping_pong from './worklet-src/ping-pong';\nimport pitch_shifter from './worklet-src/pitch-shifter';\nimport scope_ringbuf from './worklet-src/scope-ringbuf';\nimport spring_reverb from './worklet-src/spring-reverb';\nimport tape_delay from './worklet-src/tape-delay';\nimport tape_stop from './worklet-src/tape-stop';\nimport vca from './worklet-src/vca';\nimport waveshaper from './worklet-src/waveshaper';\n\nexport const WORKLET_SOURCES: Record<string, string> = {\n 'adsr-envelope': adsr_envelope,\n 'bitcrusher': bitcrusher,\n 'comb-filter': comb_filter,\n 'env-follower': env_follower,\n 'fdn-reverb': fdn_reverb,\n 'flanger': flanger,\n 'formant-table': formant_table,\n 'freq-divider': freq_divider,\n 'freq-shifter': freq_shifter,\n 'glide': glide,\n 'ladder-filter': ladder_filter,\n 'map-res': map_res,\n 'map-voct-to-freq': map_voct_to_freq,\n 'map-voct-to-period': map_voct_to_period,\n 'master-limiter': master_limiter,\n 'ping-pong': ping_pong,\n 'pitch-shifter': pitch_shifter,\n 'scope-ringbuf': scope_ringbuf,\n 'spring-reverb': spring_reverb,\n 'tape-delay': tape_delay,\n 'tape-stop': tape_stop,\n 'vca': vca,\n 'waveshaper': waveshaper,\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAO,yBAAQ;;;ACAf,IAAO,wBAAQ;;;ACwBR,IAAM,kBAA0C;AAAA,EACrD,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,OAAO;AAAA,EACP,cAAc;AAChB;",
6
+ "names": []
7
+ }