@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/LICENSE +21 -0
- package/README.md +73 -0
- package/chunk-NDUSYSHF.js +87 -0
- package/chunk-NDUSYSHF.js.map +7 -0
- package/docs/MODULES.md +1244 -0
- package/index.d.ts +1946 -0
- package/index.js +4846 -0
- package/index.js.map +7 -0
- package/meta.json +4492 -0
- package/package.json +43 -0
- package/worklets-inline-MUVFLGPY.js +60 -0
- package/worklets-inline-MUVFLGPY.js.map +7 -0
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
|
+
}
|