@jpdutoit/squelchy 0.0.2 → 0.0.4

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.
Files changed (154) hide show
  1. package/README.md +4 -3
  2. package/{chunk-NDUSYSHF.js → chunk-N7J25N5J.js} +5 -5
  3. package/chunk-N7J25N5J.js.map +7 -0
  4. package/docs/GUIDE.md +58 -13
  5. package/docs/MODULES.md +7 -7
  6. package/docs/modules.json +14 -14
  7. package/index.d.ts +41 -252
  8. package/index.js +136 -276
  9. package/index.js.map +4 -4
  10. package/kits/compu-78/bd.flac +0 -0
  11. package/kits/compu-78/ch.flac +0 -0
  12. package/kits/compu-78/clap.flac +0 -0
  13. package/kits/compu-78/cym.flac +0 -0
  14. package/kits/compu-78/ht.flac +0 -0
  15. package/kits/compu-78/lt.flac +0 -0
  16. package/kits/compu-78/mt.flac +0 -0
  17. package/kits/compu-78/oh.flac +0 -0
  18. package/kits/compu-78/perc.flac +0 -0
  19. package/kits/compu-78/rim.flac +0 -0
  20. package/kits/compu-78/sd.flac +0 -0
  21. package/kits/compu-78.d.ts +7 -0
  22. package/kits/compu-78.js +22 -0
  23. package/kits/deep-analogue/bd.flac +0 -0
  24. package/kits/deep-analogue/ch.flac +0 -0
  25. package/kits/deep-analogue/clap.flac +0 -0
  26. package/kits/deep-analogue/cym.flac +0 -0
  27. package/kits/deep-analogue/ht.flac +0 -0
  28. package/kits/deep-analogue/lt.flac +0 -0
  29. package/kits/deep-analogue/mt.flac +0 -0
  30. package/kits/deep-analogue/oh.flac +0 -0
  31. package/kits/deep-analogue/perc.flac +0 -0
  32. package/kits/deep-analogue/rim.flac +0 -0
  33. package/kits/deep-analogue/sd.flac +0 -0
  34. package/kits/deep-analogue.d.ts +7 -0
  35. package/kits/deep-analogue.js +22 -0
  36. package/kits/dr5-studio/bd.flac +0 -0
  37. package/kits/dr5-studio/ch.flac +0 -0
  38. package/kits/dr5-studio/clap.flac +0 -0
  39. package/kits/dr5-studio/cym.flac +0 -0
  40. package/kits/dr5-studio/ht.flac +0 -0
  41. package/kits/dr5-studio/lt.flac +0 -0
  42. package/kits/dr5-studio/mt.flac +0 -0
  43. package/kits/dr5-studio/oh.flac +0 -0
  44. package/kits/dr5-studio/perc.flac +0 -0
  45. package/kits/dr5-studio/rim.flac +0 -0
  46. package/kits/dr5-studio/sd.flac +0 -0
  47. package/kits/dr5-studio.d.ts +7 -0
  48. package/kits/dr5-studio.js +22 -0
  49. package/kits/hard-cell/bd.flac +0 -0
  50. package/kits/hard-cell/ch.flac +0 -0
  51. package/kits/hard-cell/clap.flac +0 -0
  52. package/kits/hard-cell/cym.flac +0 -0
  53. package/kits/hard-cell/ht.flac +0 -0
  54. package/kits/hard-cell/lt.flac +0 -0
  55. package/kits/hard-cell/mt.flac +0 -0
  56. package/kits/hard-cell/oh.flac +0 -0
  57. package/kits/hard-cell/perc.flac +0 -0
  58. package/kits/hard-cell/rim.flac +0 -0
  59. package/kits/hard-cell/sd.flac +0 -0
  60. package/kits/hard-cell.d.ts +7 -0
  61. package/kits/hard-cell.js +22 -0
  62. package/kits/micro-click/bd.flac +0 -0
  63. package/kits/micro-click/ch.flac +0 -0
  64. package/kits/micro-click/clap.flac +0 -0
  65. package/kits/micro-click/cym.flac +0 -0
  66. package/kits/micro-click/ht.flac +0 -0
  67. package/kits/micro-click/lt.flac +0 -0
  68. package/kits/micro-click/mt.flac +0 -0
  69. package/kits/micro-click/oh.flac +0 -0
  70. package/kits/micro-click/perc.flac +0 -0
  71. package/kits/micro-click/rim.flac +0 -0
  72. package/kits/micro-click/sd.flac +0 -0
  73. package/kits/micro-click.d.ts +7 -0
  74. package/kits/micro-click.js +22 -0
  75. package/kits/roland-808/bd.flac +0 -0
  76. package/kits/roland-808/ch.flac +0 -0
  77. package/kits/roland-808/clap.flac +0 -0
  78. package/kits/roland-808/cym.flac +0 -0
  79. package/kits/roland-808/ht.flac +0 -0
  80. package/kits/roland-808/lt.flac +0 -0
  81. package/kits/roland-808/mt.flac +0 -0
  82. package/kits/roland-808/oh.flac +0 -0
  83. package/kits/roland-808/perc.flac +0 -0
  84. package/kits/roland-808/rim.flac +0 -0
  85. package/kits/roland-808/sd.flac +0 -0
  86. package/kits/roland-808.d.ts +7 -0
  87. package/kits/roland-808.js +22 -0
  88. package/kits/rx5-fm/bd.flac +0 -0
  89. package/kits/rx5-fm/ch.flac +0 -0
  90. package/kits/rx5-fm/clap.flac +0 -0
  91. package/kits/rx5-fm/cym.flac +0 -0
  92. package/kits/rx5-fm/ht.flac +0 -0
  93. package/kits/rx5-fm/lt.flac +0 -0
  94. package/kits/rx5-fm/mt.flac +0 -0
  95. package/kits/rx5-fm/oh.flac +0 -0
  96. package/kits/rx5-fm/perc.flac +0 -0
  97. package/kits/rx5-fm/rim.flac +0 -0
  98. package/kits/rx5-fm/sd.flac +0 -0
  99. package/kits/rx5-fm.d.ts +7 -0
  100. package/kits/rx5-fm.js +22 -0
  101. package/kits/tape-dust/bd.flac +0 -0
  102. package/kits/tape-dust/ch.flac +0 -0
  103. package/kits/tape-dust/clap.flac +0 -0
  104. package/kits/tape-dust/cym.flac +0 -0
  105. package/kits/tape-dust/ht.flac +0 -0
  106. package/kits/tape-dust/lt.flac +0 -0
  107. package/kits/tape-dust/mt.flac +0 -0
  108. package/kits/tape-dust/oh.flac +0 -0
  109. package/kits/tape-dust/perc.flac +0 -0
  110. package/kits/tape-dust/rim.flac +0 -0
  111. package/kits/tape-dust/sd.flac +0 -0
  112. package/kits/tape-dust.d.ts +7 -0
  113. package/kits/tape-dust.js +22 -0
  114. package/kits/tr-606/bd.flac +0 -0
  115. package/kits/tr-606/ch.flac +0 -0
  116. package/kits/tr-606/cym.flac +0 -0
  117. package/kits/tr-606/ht.flac +0 -0
  118. package/kits/tr-606/lt.flac +0 -0
  119. package/kits/tr-606/mt.flac +0 -0
  120. package/kits/tr-606/oh.flac +0 -0
  121. package/kits/tr-606/sd.flac +0 -0
  122. package/kits/tr-606.d.ts +7 -0
  123. package/kits/tr-606.js +19 -0
  124. package/kits/tr-707/bd.flac +0 -0
  125. package/kits/tr-707/ch.flac +0 -0
  126. package/kits/tr-707/clap.flac +0 -0
  127. package/kits/tr-707/cym.flac +0 -0
  128. package/kits/tr-707/ht.flac +0 -0
  129. package/kits/tr-707/lt.flac +0 -0
  130. package/kits/tr-707/mt.flac +0 -0
  131. package/kits/tr-707/oh.flac +0 -0
  132. package/kits/tr-707/perc.flac +0 -0
  133. package/kits/tr-707/rim.flac +0 -0
  134. package/kits/tr-707/sd.flac +0 -0
  135. package/kits/tr-707.d.ts +7 -0
  136. package/kits/tr-707.js +22 -0
  137. package/kits/tr-909/bd.flac +0 -0
  138. package/kits/tr-909/ch.flac +0 -0
  139. package/kits/tr-909/clap.flac +0 -0
  140. package/kits/tr-909/cym.flac +0 -0
  141. package/kits/tr-909/ht.flac +0 -0
  142. package/kits/tr-909/lt.flac +0 -0
  143. package/kits/tr-909/mt.flac +0 -0
  144. package/kits/tr-909/oh.flac +0 -0
  145. package/kits/tr-909/perc.flac +0 -0
  146. package/kits/tr-909/rim.flac +0 -0
  147. package/kits/tr-909/sd.flac +0 -0
  148. package/kits/tr-909.d.ts +7 -0
  149. package/kits/tr-909.js +22 -0
  150. package/package.json +6 -3
  151. package/{worklets-inline-MUVFLGPY.js → worklets-inline-EF3OTQ4D.js} +2 -2
  152. package/chunk-NDUSYSHF.js.map +0 -7
  153. package/meta.json +0 -4492
  154. /package/{worklets-inline-MUVFLGPY.js.map → worklets-inline-EF3OTQ4D.js.map} +0 -0
package/index.d.ts CHANGED
@@ -50,7 +50,7 @@ export declare function preload(ctx: BaseAudioContext, opts?: {
50
50
  export type ParamValue = number | string | boolean | number[] | boolean[][];
51
51
  /** Runtime metadata — only what code needs. Human-facing text (names,
52
52
  * descriptions, labels) is stripped from the bundle; it lives in the
53
- * generated docs/MODULES.md, meta.json and the .d.ts JSDoc instead. */
53
+ * generated docs/MODULES.md, docs/modules.json and the .d.ts JSDoc instead. */
54
54
  export interface ModuleMeta {
55
55
  type: string;
56
56
  ports: Record<string, Pick<PortDefinition, "type" | "signal">>;
@@ -139,7 +139,7 @@ export interface StepObject<V> {
139
139
  /** Gate length in steps, default = the playback's `gate`. */
140
140
  length?: number;
141
141
  }
142
- /** A pattern step: a value, a rest (null/undefined/false/0/'.'/'-'), or a StepObject. */
142
+ /** A pattern step: a value (0 included), a rest (null/undefined/false), or a StepObject. */
143
143
  export type Step<V> = V | StepObject<V> | null | undefined | false;
144
144
  /** What a voice receives per hit. */
145
145
  export interface Hit<V = unknown> {
@@ -151,7 +151,7 @@ export interface Hit<V = unknown> {
151
151
  step: number;
152
152
  /** Loop iteration, 0-based. */
153
153
  cycle: number;
154
- /** The step's value (true for `steps('x..x')`, a midi number for melodies, …). */
154
+ /** The step's value (true for `steps('x..x')`, a Note for melodies, …). */
155
155
  value: V;
156
156
  velocity: number;
157
157
  /** Gate length in seconds. */
@@ -219,10 +219,27 @@ export interface Transport {
219
219
  tick(): void;
220
220
  dispose(): void;
221
221
  }
222
- export declare function isRest(v: unknown): boolean;
222
+ /** Rests are exactly the "nothing" values in `Step`: null, undefined (array
223
+ * holes) and false. `0` is a real value (root note, 0 semitones, CV 0);
224
+ * `'.'`/`'-'` are only rest syntax inside steps()/notes() strings. */
225
+ export declare function isRest(v: unknown): v is null | undefined | false;
223
226
  export declare function createTransport(ctx: BaseAudioContext, opts?: TransportOptions): Transport;
224
- /** `steps('x... x... x..x x...')` → boolean[]. x/X = hit, anything else = rest; spaces/| ignored. */
225
- export declare function steps(s: string): boolean[];
227
+ /** Velocities for the hit letters in `steps()`. */
228
+ export interface StepsLevels {
229
+ /** `X`. Default 1. */
230
+ accent?: number;
231
+ /** `x`. Default 0.75. */
232
+ normal?: number;
233
+ /** `o`. Default 0.4. */
234
+ ghost?: number;
235
+ }
236
+ /**
237
+ * `steps('X..x o.x. x... x..x')` → one step per character, value `true`:
238
+ * `X` = accent, `x` = normal hit, `o` = ghost note (as velocity, see
239
+ * StepsLevels), `.`/`-` = rest. Spaces and `|` are ignored; any other
240
+ * character throws, so a typo can't silently become a rest.
241
+ */
242
+ export declare function steps(s: string, levels?: StepsLevels): (StepObject<true> | null)[];
226
243
  /** 'A4' → 69, 'C4' → 60, 'F#2' → 42; a number passes through typed. Midi numbers are the pitch unit everywhere (V/Oct = semitones). */
227
244
  export declare function note(name: string | number): Note;
228
245
  /** `notes('C3 . E3 G3 - C4')` → (Note | null)[]. '.'/'-' = rest. */
@@ -281,8 +298,6 @@ export declare const VOICE_KEYS: readonly [
281
298
  "perc"
282
299
  ];
283
300
  export type VoiceKey = (typeof VOICE_KEYS)[number];
284
- /** Where the kit audio is hosted. Override with `loadSampleSet(..., { baseUrl })`. */
285
- export declare const DEFAULT_SAMPLE_BASE_URL = "https://squelchy.studio";
286
301
  export interface SampleSetInfo {
287
302
  name: string;
288
303
  blurb: string;
@@ -290,7 +305,7 @@ export interface SampleSetInfo {
290
305
  credit: string;
291
306
  license: string;
292
307
  licenseUrl: string;
293
- /** Root-relative sample path per voice; resolved against baseUrl on load. */
308
+ /** Audio URL per voice, fetched as-is by `loadSampleSet`. */
294
309
  voices: Partial<Record<VoiceKey, string>>;
295
310
  }
296
311
  export interface LoadedSampleSet {
@@ -301,246 +316,20 @@ export interface LoadedSampleSet {
301
316
  }
302
317
  /** Fetch + decode every voice of a kit in parallel. */
303
318
  export declare function loadSampleSet(ctx: BaseAudioContext, set: SampleSetInfo, opts?: {
304
- baseUrl?: string;
305
319
  fetch?: typeof fetch;
306
320
  }): Promise<LoadedSampleSet>;
307
- /** A one-sample voice. velocity 0..1 scales level; a number `value`
308
- * repitches in semitones, anything else (e.g. `true` from steps()) plays it
309
- * unshifted. */
321
+ export interface SampleVoiceOptions {
322
+ /** The note that plays the sample unshifted. Default 60 (C4). */
323
+ root?: Note;
324
+ }
325
+ /** A one-shot sample voice, like a drum machine: every hit plays the whole
326
+ * sample, whatever the step's gate length. velocity 0..1 scales level. A
327
+ * `Note` value plays the sample at that note (`root` = unshifted), the same
328
+ * numbers `NoteCv` plays, so `notes()` melodies work on both; anything else
329
+ * (e.g. `true` from steps()) plays it unshifted. */
310
330
  export declare const SampleVoice: {
311
- create(ctx: BaseAudioContext, kit: LoadedSampleSet, key: VoiceKey): VoiceInstance<number | boolean>;
312
- };
313
- export declare const SampleSets: {
314
- readonly "roland-808": {
315
- readonly name: "Roland TR-808";
316
- readonly blurb: "The original machine, sampled from hardware. Deep sub kick, ticking hats.";
317
- readonly family: "Machines";
318
- readonly credit: "Michael Fischer / Technopolis TR-808 sample set, released to the public domain";
319
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
320
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
321
- readonly voices: {
322
- readonly bd: "/__l5e/assets-v1/c4b2fc55-dcf1-4248-a7fb-2cd3653a659b/roland-808-bd.flac";
323
- readonly ch: "/__l5e/assets-v1/c1ec3b3d-571f-46a6-9d05-12b2fe5f6fc5/roland-808-ch.flac";
324
- readonly clap: "/__l5e/assets-v1/8bd15e4b-96b7-46b6-b26a-35283c816f1e/roland-808-clap.flac";
325
- readonly cym: "/__l5e/assets-v1/033f0719-913a-4a7a-998e-92a7319d806f/roland-808-cym.flac";
326
- readonly ht: "/__l5e/assets-v1/ca555782-7544-446a-a461-9b56b4d30072/roland-808-ht.flac";
327
- readonly lt: "/__l5e/assets-v1/8e100e1c-3844-42aa-bbe7-9eb52b9d704e/roland-808-lt.flac";
328
- readonly mt: "/__l5e/assets-v1/93dd309f-9347-4ea1-909f-56196b08dc88/roland-808-mt.flac";
329
- readonly oh: "/__l5e/assets-v1/4881941c-b558-4159-babd-fe224b0f1543/roland-808-oh.flac";
330
- readonly perc: "/__l5e/assets-v1/d13076b5-50ca-4675-9d4e-70afd6e6203d/roland-808-perc.flac";
331
- readonly rim: "/__l5e/assets-v1/ce82e0e9-402d-4a5e-bf01-59dfb922d1ba/roland-808-rim.flac";
332
- readonly sd: "/__l5e/assets-v1/67a799c9-e019-442b-8025-99d69bc493b9/roland-808-sd.flac";
333
- };
334
- };
335
- readonly "tr-909": {
336
- readonly name: "Roland TR-909";
337
- readonly blurb: "Punchy transistor kick, snappy sampled snare, sizzling metal hats. House and techno.";
338
- readonly family: "Machines";
339
- readonly credit: "MckAudio TR8 sample pack, dedicated to the public domain (CC0)";
340
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
341
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
342
- readonly voices: {
343
- readonly bd: "/__l5e/assets-v1/fd3911bb-6783-4db6-bee2-bb8c5a589f26/tr-909-bd.flac";
344
- readonly ch: "/__l5e/assets-v1/6f795c20-fb89-4cd5-b696-3a505d487baa/tr-909-ch.flac";
345
- readonly clap: "/__l5e/assets-v1/7b1ccf8e-0dd6-4189-82d7-03a910e895f2/tr-909-clap.flac";
346
- readonly cym: "/__l5e/assets-v1/f0d5ce25-3238-4e89-bb09-f5b7118fa0a7/tr-909-cym.flac";
347
- readonly ht: "/__l5e/assets-v1/5f9b4c37-25a7-492c-aaed-f7fe24fbfe2c/tr-909-ht.flac";
348
- readonly lt: "/__l5e/assets-v1/8477dddd-b9ed-4957-9a48-b5501bc77056/tr-909-lt.flac";
349
- readonly mt: "/__l5e/assets-v1/92d461e5-d74a-4ba2-a899-4dea1ad06d13/tr-909-mt.flac";
350
- readonly oh: "/__l5e/assets-v1/20c51259-d8d1-4ee3-a1d6-e850c3227b1a/tr-909-oh.flac";
351
- readonly perc: "/__l5e/assets-v1/147d346e-9ae7-4413-a50a-de4f03ef7342/tr-909-perc.flac";
352
- readonly rim: "/__l5e/assets-v1/0c9f157d-1329-4804-aa12-6819651d69fb/tr-909-rim.flac";
353
- readonly sd: "/__l5e/assets-v1/bd8069c2-e07c-4d5c-b05a-fb5b9a31eadb/tr-909-sd.flac";
354
- };
355
- };
356
- readonly "tr-707": {
357
- readonly name: "Roland TR-707";
358
- readonly blurb: "Twelve-bit sampled kit with early-digital crunch. Big eighties snare and claps.";
359
- readonly family: "Machines";
360
- readonly credit: "MckAudio TR8 sample pack, dedicated to the public domain (CC0)";
361
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
362
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
363
- readonly voices: {
364
- readonly bd: "/__l5e/assets-v1/825b2c7c-5c5f-411c-8191-306549ee26f2/tr-707-bd.flac";
365
- readonly ch: "/__l5e/assets-v1/6b35b393-7e9c-462d-8d2f-dc834417062b/tr-707-ch.flac";
366
- readonly clap: "/__l5e/assets-v1/efbe819a-b13e-4bf2-a6bd-9bc15a09ff3f/tr-707-clap.flac";
367
- readonly cym: "/__l5e/assets-v1/4a34902b-8592-46d8-b339-05a0648cac4f/tr-707-cym.flac";
368
- readonly ht: "/__l5e/assets-v1/e58beee9-45e5-4b65-af99-a05fcb96f55b/tr-707-ht.flac";
369
- readonly lt: "/__l5e/assets-v1/a0d6f499-4af6-4d34-96de-5ad7c2397229/tr-707-lt.flac";
370
- readonly mt: "/__l5e/assets-v1/6c4bd12b-78ff-4f70-863b-cd482f684eb6/tr-707-mt.flac";
371
- readonly oh: "/__l5e/assets-v1/c07159f3-d763-4698-a786-aeae60d38ac9/tr-707-oh.flac";
372
- readonly perc: "/__l5e/assets-v1/2f8cffcb-8e86-4f65-99db-a705727ed3ab/tr-707-perc.flac";
373
- readonly rim: "/__l5e/assets-v1/3d6445b1-38bd-4e9f-b048-db8c079b3c03/tr-707-rim.flac";
374
- readonly sd: "/__l5e/assets-v1/aaf70dd8-c740-4b05-9369-feb80f3e26be/tr-707-sd.flac";
375
- };
376
- };
377
- readonly "tr-606": {
378
- readonly name: "Roland TR-606";
379
- readonly blurb: "Tiny Drumatix voices \u2014 thin kick, spitty snare, ticking hats. Perfect with a 303.";
380
- readonly family: "Machines";
381
- readonly credit: "MckAudio TR8 sample pack, dedicated to the public domain (CC0)";
382
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
383
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
384
- readonly voices: {
385
- readonly bd: "/__l5e/assets-v1/f46ec897-9319-4c25-b63b-74df979de508/tr-606-bd.flac";
386
- readonly ch: "/__l5e/assets-v1/f4c57254-c711-43b0-82c6-52b011e205ba/tr-606-ch.flac";
387
- readonly cym: "/__l5e/assets-v1/db524ec1-36d3-43db-bfc4-fd84a1ddd2ac/tr-606-cym.flac";
388
- readonly ht: "/__l5e/assets-v1/74b486cf-c1f1-45c7-bd2a-4fd0c3794e1a/tr-606-ht.flac";
389
- readonly lt: "/__l5e/assets-v1/6b1a564f-6388-40c1-8028-3ea9b6824256/tr-606-lt.flac";
390
- readonly mt: "/__l5e/assets-v1/d871a86a-fcc8-45a6-b5a4-83977a689593/tr-606-mt.flac";
391
- readonly oh: "/__l5e/assets-v1/a4c607d2-d62c-49b5-ac99-549fd6262468/tr-606-oh.flac";
392
- readonly sd: "/__l5e/assets-v1/2062f1d4-e34f-406f-911b-2eb2ec523a89/tr-606-sd.flac";
393
- };
394
- };
395
- readonly "compu-78": {
396
- readonly name: "Compu-78";
397
- readonly blurb: "Tiny, dry preset-box percussion. Bossa nova organ rhythm energy.";
398
- readonly family: "Machines";
399
- readonly credit: "Synthesised for Squelchy";
400
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
401
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
402
- readonly voices: {
403
- readonly bd: "/__l5e/assets-v1/150a91e2-8b92-40f2-80e0-10b30f10976b/compu-78-bd.flac";
404
- readonly ch: "/__l5e/assets-v1/da9dcfc4-5f29-43b9-979f-9679edeb09ed/compu-78-ch.flac";
405
- readonly clap: "/__l5e/assets-v1/f3b5d485-44bc-4b34-b2bc-d37f436dffc2/compu-78-clap.flac";
406
- readonly cym: "/__l5e/assets-v1/627db2bf-08d5-4054-8de9-b8ec0ca4436a/compu-78-cym.flac";
407
- readonly ht: "/__l5e/assets-v1/1323f20c-3c98-45fb-abd1-e4b1e4be158f/compu-78-ht.flac";
408
- readonly lt: "/__l5e/assets-v1/ba67ce5c-3f01-4e1b-9fd8-a96bb5428cf4/compu-78-lt.flac";
409
- readonly mt: "/__l5e/assets-v1/f8cd42d6-2f98-4e9d-9428-ba091ec125cf/compu-78-mt.flac";
410
- readonly oh: "/__l5e/assets-v1/b4a1d5b2-0022-4f1b-ac52-1618ba03ea67/compu-78-oh.flac";
411
- readonly perc: "/__l5e/assets-v1/55e15a92-ba17-48cb-aec0-47e5198f073f/compu-78-perc.flac";
412
- readonly rim: "/__l5e/assets-v1/698aaf24-8e84-4b3b-8f13-dc95f2b3f157/compu-78-rim.flac";
413
- readonly sd: "/__l5e/assets-v1/41357245-d767-410e-8415-08dbb9e7503e/compu-78-sd.flac";
414
- };
415
- };
416
- readonly "dr5-studio": {
417
- readonly name: "Studio Kit";
418
- readonly blurb: "Acoustic drums in a small dry room. Skin, air and a little ambience.";
419
- readonly family: "Acoustic";
420
- readonly credit: "MckAudio DR5 sample pack, dedicated to the public domain (CC0)";
421
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
422
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
423
- readonly voices: {
424
- readonly bd: "/__l5e/assets-v1/9bc4c40f-432c-4fd1-98f8-dc3343b5dd31/dr5-studio-bd.flac";
425
- readonly ch: "/__l5e/assets-v1/862411a4-6d87-45e7-a3a2-2c4062f8e79b/dr5-studio-ch.flac";
426
- readonly clap: "/__l5e/assets-v1/2feebc4f-49d2-4ea0-9b5a-890059c24a9c/dr5-studio-clap.flac";
427
- readonly cym: "/__l5e/assets-v1/5abff1b5-b403-403b-b681-9ac37a394442/dr5-studio-cym.flac";
428
- readonly ht: "/__l5e/assets-v1/4e6883a5-e310-4035-a6ae-ee4033c7a0a1/dr5-studio-ht.flac";
429
- readonly lt: "/__l5e/assets-v1/faf35ae9-f89f-4ceb-ad5e-c562dd5d261a/dr5-studio-lt.flac";
430
- readonly mt: "/__l5e/assets-v1/4b923b44-9e79-4aa0-a9ef-4178a9f0279b/dr5-studio-mt.flac";
431
- readonly oh: "/__l5e/assets-v1/5a5e6d0c-4c8f-4dc5-9dea-55f90083a55a/dr5-studio-oh.flac";
432
- readonly perc: "/__l5e/assets-v1/8d286dd0-4201-49f6-9738-0a39e3a3d860/dr5-studio-perc.flac";
433
- readonly rim: "/__l5e/assets-v1/1d139e86-288e-48bd-baba-f7d2502271a5/dr5-studio-rim.flac";
434
- readonly sd: "/__l5e/assets-v1/eb7b02d6-7063-4350-9515-40010dd583cb/dr5-studio-sd.flac";
435
- };
436
- };
437
- readonly "tape-dust": {
438
- readonly name: "Tape Dust";
439
- readonly blurb: "Wobbly, hissy and rolled-off. Everything through a tired cassette.";
440
- readonly family: "Character";
441
- readonly credit: "Synthesised for Squelchy";
442
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
443
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
444
- readonly voices: {
445
- readonly bd: "/__l5e/assets-v1/7e90ada0-1da8-4930-9c05-48c395e8a863/tape-dust-bd.flac";
446
- readonly ch: "/__l5e/assets-v1/538fd73f-f7ee-408e-ab69-f8865506f4f5/tape-dust-ch.flac";
447
- readonly clap: "/__l5e/assets-v1/21b5b5ea-6dce-495d-b740-e7162941c972/tape-dust-clap.flac";
448
- readonly cym: "/__l5e/assets-v1/ac1a7f2d-9a96-4f61-b2ec-743854f15bbe/tape-dust-cym.flac";
449
- readonly ht: "/__l5e/assets-v1/93dd3f9c-8267-4f4e-b292-807cf0022c9e/tape-dust-ht.flac";
450
- readonly lt: "/__l5e/assets-v1/7a51ff67-62ec-408b-b6c3-4a0cae248eaf/tape-dust-lt.flac";
451
- readonly mt: "/__l5e/assets-v1/ba3340c5-6ead-419a-836a-a041448f06da/tape-dust-mt.flac";
452
- readonly oh: "/__l5e/assets-v1/e924553d-ac9a-427e-a69a-2939032ee618/tape-dust-oh.flac";
453
- readonly perc: "/__l5e/assets-v1/abfad1e6-998b-47a8-8c98-6f511c151143/tape-dust-perc.flac";
454
- readonly rim: "/__l5e/assets-v1/c86262d8-9711-41d4-b866-19a1ffcaf443/tape-dust-rim.flac";
455
- readonly sd: "/__l5e/assets-v1/2d1090cf-0284-4c33-9ba2-430c5c7b4730/tape-dust-sd.flac";
456
- };
457
- };
458
- readonly "hard-cell": {
459
- readonly name: "Hard Cell";
460
- readonly blurb: "Overdriven and bit-crushed. Industrial techno with no headroom left.";
461
- readonly family: "Character";
462
- readonly credit: "Synthesised for Squelchy";
463
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
464
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
465
- readonly voices: {
466
- readonly bd: "/__l5e/assets-v1/d8f1c5cf-8e07-4a1e-a519-d7f69781329b/hard-cell-bd.flac";
467
- readonly ch: "/__l5e/assets-v1/c3275e9a-dd79-4ac8-b4b9-84ebe25b5529/hard-cell-ch.flac";
468
- readonly clap: "/__l5e/assets-v1/160a5d2c-01e0-49da-a998-149a0cf08317/hard-cell-clap.flac";
469
- readonly cym: "/__l5e/assets-v1/910f3623-0209-439f-9e34-0c0f842bc78f/hard-cell-cym.flac";
470
- readonly ht: "/__l5e/assets-v1/36f5b37b-9d44-49b8-a57b-bf5d2a1aa523/hard-cell-ht.flac";
471
- readonly lt: "/__l5e/assets-v1/6065e512-578b-477f-88d9-49b3ccccacea/hard-cell-lt.flac";
472
- readonly mt: "/__l5e/assets-v1/4e33c147-b8da-4b03-abca-4fd254d5006d/hard-cell-mt.flac";
473
- readonly oh: "/__l5e/assets-v1/3e5b3bce-f21b-4ecb-8f28-375ce871427f/hard-cell-oh.flac";
474
- readonly perc: "/__l5e/assets-v1/ab27e781-3d41-4e04-8f44-f7a568543586/hard-cell-perc.flac";
475
- readonly rim: "/__l5e/assets-v1/ea2989c5-2354-4574-ae38-4786deeee151/hard-cell-rim.flac";
476
- readonly sd: "/__l5e/assets-v1/5bd3dca9-bdb7-4618-8e0b-9ed1c0b062c7/hard-cell-sd.flac";
477
- };
478
- };
479
- readonly "rx5-fm": {
480
- readonly name: "Yamaha RX5";
481
- readonly blurb: "FM percussion \u2014 glassy, bell-like, unmistakably late-eighties digital.";
482
- readonly family: "Digital";
483
- readonly credit: "MckAudio RX5 sample pack, dedicated to the public domain (CC0)";
484
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
485
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
486
- readonly voices: {
487
- readonly bd: "/__l5e/assets-v1/22b27f9f-d301-48e2-a0e4-e6b6e538ec31/rx5-fm-bd.flac";
488
- readonly ch: "/__l5e/assets-v1/236fb4f5-7d2a-48c0-be18-bc3777a6be91/rx5-fm-ch.flac";
489
- readonly clap: "/__l5e/assets-v1/58402fc0-996c-4577-9074-bb40b585c26e/rx5-fm-clap.flac";
490
- readonly cym: "/__l5e/assets-v1/d3e6ba9b-a2b8-4467-8923-97594723720e/rx5-fm-cym.flac";
491
- readonly ht: "/__l5e/assets-v1/a5edef5d-7861-4b3a-99bc-10ece111ca64/rx5-fm-ht.flac";
492
- readonly lt: "/__l5e/assets-v1/7151d30d-fe90-4ac5-9c9f-e91a808a1efa/rx5-fm-lt.flac";
493
- readonly mt: "/__l5e/assets-v1/46119925-9ecd-431a-94ee-2135c8ce4382/rx5-fm-mt.flac";
494
- readonly oh: "/__l5e/assets-v1/9fe4938f-fda7-43f8-84c6-c53325fd674c/rx5-fm-oh.flac";
495
- readonly perc: "/__l5e/assets-v1/1aa471d4-4737-45e6-9070-6301892dcdfa/rx5-fm-perc.flac";
496
- readonly rim: "/__l5e/assets-v1/2b0409a0-1aa6-41a4-9593-553247a2e624/rx5-fm-rim.flac";
497
- readonly sd: "/__l5e/assets-v1/3d9c426c-7783-4106-940f-1e6b6405bdd5/rx5-fm-sd.flac";
498
- };
499
- };
500
- readonly "micro-click": {
501
- readonly name: "Micro Click";
502
- readonly blurb: "Clicks, ticks and pops. Minimal and micro-house, nothing sustains.";
503
- readonly family: "Digital";
504
- readonly credit: "Synthesised for Squelchy";
505
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
506
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
507
- readonly voices: {
508
- readonly bd: "/__l5e/assets-v1/58e3ce80-d300-47c6-8d79-52b00376550f/micro-click-bd.flac";
509
- readonly ch: "/__l5e/assets-v1/1c12e400-5c5f-4aae-b006-5a3fe3c6ef2c/micro-click-ch.flac";
510
- readonly clap: "/__l5e/assets-v1/b1f402f6-a85d-421b-9684-4b78719726d5/micro-click-clap.flac";
511
- readonly cym: "/__l5e/assets-v1/fe501055-43d7-427f-9ab4-5efd0423292e/micro-click-cym.flac";
512
- readonly ht: "/__l5e/assets-v1/3aab93cb-cd84-4600-a3e5-458fa74a2a86/micro-click-ht.flac";
513
- readonly lt: "/__l5e/assets-v1/b09a0d61-c9a2-4b31-b0f2-10d3c10ef83c/micro-click-lt.flac";
514
- readonly mt: "/__l5e/assets-v1/988e7a56-e914-43ad-aff1-71ec3a04b8e4/micro-click-mt.flac";
515
- readonly oh: "/__l5e/assets-v1/122a3f93-4542-471b-b390-996665248653/micro-click-oh.flac";
516
- readonly perc: "/__l5e/assets-v1/cae413d7-a68c-411a-a4b4-b7c20a83946d/micro-click-perc.flac";
517
- readonly rim: "/__l5e/assets-v1/41922292-1c6e-4bef-ac8e-fa1ce09eefca/micro-click-rim.flac";
518
- readonly sd: "/__l5e/assets-v1/6218ccdd-cba1-466e-af8b-665d7a2d4640/micro-click-sd.flac";
519
- };
520
- };
521
- readonly "deep-analogue": {
522
- readonly name: "Deep Analogue";
523
- readonly blurb: "Long sub kick, soft snare, warm hats. Deep house at three in the morning.";
524
- readonly family: "Acoustic";
525
- readonly credit: "Synthesised for Squelchy";
526
- readonly license: "CC0 1.0 / public domain \u2014 free to use, no attribution required";
527
- readonly licenseUrl: "https://creativecommons.org/publicdomain/zero/1.0/";
528
- readonly voices: {
529
- readonly bd: "/__l5e/assets-v1/93c55e12-44f1-4cf9-8b19-82833257a68f/deep-analogue-bd.flac";
530
- readonly ch: "/__l5e/assets-v1/7c881111-83d8-4c1a-b4af-4f09d2a09f4b/deep-analogue-ch.flac";
531
- readonly clap: "/__l5e/assets-v1/e8b67bb8-8f7f-4b87-9ee4-d9cb7bc43efe/deep-analogue-clap.flac";
532
- readonly cym: "/__l5e/assets-v1/b329f9e1-3eb0-471c-b7c7-8ad7f639323f/deep-analogue-cym.flac";
533
- readonly ht: "/__l5e/assets-v1/a381a6b5-fd09-4fa6-b88e-86a29b8f25d9/deep-analogue-ht.flac";
534
- readonly lt: "/__l5e/assets-v1/c9ebc90a-20aa-4f76-9e79-f440258d4bac/deep-analogue-lt.flac";
535
- readonly mt: "/__l5e/assets-v1/5e1b803c-748e-4f09-bed7-c7b4511dc8b0/deep-analogue-mt.flac";
536
- readonly oh: "/__l5e/assets-v1/289d67f2-6d55-4a04-8607-302442465e81/deep-analogue-oh.flac";
537
- readonly perc: "/__l5e/assets-v1/8ef1f592-a3a4-45a5-9ea4-80362953aee4/deep-analogue-perc.flac";
538
- readonly rim: "/__l5e/assets-v1/102a1c23-6e5f-468e-95c8-e414ce849884/deep-analogue-rim.flac";
539
- readonly sd: "/__l5e/assets-v1/9be98c57-13c4-4337-bb2f-53c0b2ff7150/deep-analogue-sd.flac";
540
- };
541
- };
331
+ create(ctx: BaseAudioContext, kit: LoadedSampleSet, key: VoiceKey, opts?: SampleVoiceOptions): VoiceInstance<Note | boolean>;
542
332
  };
543
- export type SampleSetId = keyof typeof SampleSets;
544
333
  export interface AcidFilterParams {
545
334
  /** Cutoff Note. Base cutoff as a note (67 ≈ 400 Hz, 69 = 440 Hz) for the iconic squelchy acid sound. Drives the V/OCT worklet 1:1 — the panel knob shows the equivalent Hz. Range 15–135 notes. Default 67. */
546
335
  note?: Note;
@@ -550,7 +339,7 @@ export interface AcidFilterParams {
550
339
  envMod?: number;
551
340
  /** Accent. Intensifies the envelope sweep for more aggressive acid sounds. Range 0–1. Default 0.5. */
552
341
  accent?: number;
553
- /** Decay Time. How quickly the filter envelope falls. Short = plucky, long = sustained. Range 0.05–1 s (log). Default 0.2. */
342
+ /** Decay Time. Time for the exponential filter sweep to fall 60 dB after each trigger. Short = plucky squelch, long = slow, singing sweeps. Range 0.2–5 s (log). Default 0.92. */
554
343
  decay?: Seconds;
555
344
  }
556
345
  export type AcidFilterInputs = {
@@ -900,13 +689,13 @@ export type EnvelopeFollowerProps = {
900
689
  };
901
690
  export declare const EnvelopeFollower: LibModule<EnvelopeFollowerParams, EnvelopeFollowerInputs, EnvelopeFollowerOutputs, EnvelopeFollowerProps>;
902
691
  export interface EnvelopeParams {
903
- /** Attack. Time for signal to rise from zero to full level when triggered. Range 0.001–2 s (log). Default 0.01. */
692
+ /** Attack. Time for the level to rise from zero to full, in a straight line. Range 0.001–2 s (log). Default 0.01. */
904
693
  attack?: Seconds;
905
- /** Decay. Time to fall from peak to sustain level after attack completes. Range 0.001–2 s (log). Default 0.1. */
694
+ /** Decay. Time to fall from the peak to the sustain level, on an exponential curve like an analog envelope. The time for the gap to sustain to shrink by 60 dB. Range 0.001–10 s (log). Default 0.46. */
906
695
  decay?: Seconds;
907
- /** Sustain. Level held while the note is held. 0 = plucky, 1 = organ-like. Range 0–1. Default 0.7. */
696
+ /** Sustain. Level held while the note is held. 0 = plucky, 1 = organ-like. Moving it while a note is held glides at the decay speed. Range 0–1. Default 0.7. */
908
697
  sustain?: number;
909
- /** Release. Time to fade to silence after note is released. Range 0.001–3 s (log). Default 0.3. */
698
+ /** Release. Time to fade to silence (60 dB down) after the note is released, on an exponential curve like an analog envelope. Range 0.001–20 s (log). Default 2.1. */
910
699
  release?: Seconds;
911
700
  /** ENV Depth. Scales the ENV output in semitones (12 = one octave), the unit every pitch and cutoff modulation input on this rack reads. Higher values produce a wider sweep on the modulation target. Range 0–96 semitones (sqrt). Default 48. */
912
701
  depth?: Semitones;
@@ -1563,13 +1352,13 @@ export type SaturatorProps = {
1563
1352
  };
1564
1353
  export declare const Saturator: LibModule<SaturatorParams, SaturatorInputs, SaturatorOutputs, SaturatorProps>;
1565
1354
  export interface ShimmerParams {
1566
- /** Reverb Decay. RT60 of the reverb tank in seconds. Range 0.5–10 s (log). Default 3. */
1355
+ /** Reverb Decay. RT60 of the reverb tank in seconds — the time to fall 60 dB, measured at 500 Hz. Treble dies faster, like a real hall. Range 0.5–10 s (log). Default 3. */
1567
1356
  decay?: Seconds;
1568
1357
  /** Pitch Shift. Transposition applied by the granular pitch shifter on every trip round the feedback loop (12 = one octave). +12 = octave up, +7 = fifth up, -12 = octave down. Range -12–24 semitones. Default 12. */
1569
1358
  pitch?: Semitones;
1570
1359
  /** Dry/Wet Mix. Equal-power balance between dry signal and shimmer output — independent of the regen amount. Range 0–1. Default 0.5. */
1571
1360
  mix?: number;
1572
- /** Shimmer Regen. How much pitch-shifted signal is fed back into the tank. High = endless rising choir. Range 0–0.95. Default 0.5. */
1361
+ /** Shimmer Regen. Gain once round the pitch-shifted feedback loop, measured at 500 Hz: 0.5 = each new octave 6 dB quieter than the last, 0.95 = an almost endless rising choir. Means the same at every DECAY setting. At PITCH 0 the loop is plain reverb feedback and the regen is held under its self-oscillation edge, so 0.95 is a near-frozen, slowly breathing tail that always dies away. Range 0–0.95. Default 0.5. */
1573
1362
  shimmer?: number;
1574
1363
  }
1575
1364
  export type ShimmerInputs = {