smplr 0.24.0 → 0.26.0

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/dist/index.d.mts CHANGED
@@ -208,68 +208,90 @@ type VoiceParams = {
208
208
  reverse?: boolean;
209
209
  };
210
210
 
211
+ /** Options accepted by `SampleLoader(context, options)`. */
212
+ type SampleLoaderOptions = {
213
+ /** Custom storage backend (e.g. `CacheStorage` for offline). Defaults to `HttpStorage`. */
214
+ storage?: Storage;
215
+ };
216
+ /** Options accepted by `loader.load(json, options)`. */
217
+ type SampleLoaderLoadOptions = {
218
+ /** Pre-decoded buffers keyed by sample name — skip fetch for these. */
219
+ buffers?: Map<string, AudioBuffer>;
220
+ /** Called once per sample (including cache hits) with cumulative progress. */
221
+ onProgress?: (loaded: number, total: number) => void;
222
+ };
223
+ type SampleLoaderFactory = {
224
+ (context: BaseAudioContext, options?: SampleLoaderOptions): SampleLoader;
225
+ /** @deprecated Call as a function: `SampleLoader(...)` instead of `new SampleLoader(...)`. */
226
+ new (context: BaseAudioContext, options?: SampleLoaderOptions): SampleLoader;
227
+ };
211
228
  /**
212
- * Loads and caches AudioBuffers for all samples referenced in a SmplrPreset.
213
- *
214
- * The cache is keyed by resolved URL, so the same audio file is never fetched
215
- * or decoded twice. Multiple Smplr instances can share one SampleLoader by
216
- * passing it via SmplrOptions.loader.
229
+ * Loads and decodes AudioBuffers for the samples referenced by a {@link SmplrPreset}.
230
+ * Used internally by every smplr instrument; pass an instance via
231
+ * {@link SmplrOptions.loader} to share buffer caching across multiple instruments.
217
232
  */
218
- declare class SampleLoaderImpl {
219
- #private;
220
- constructor(context: BaseAudioContext, options?: {
221
- storage?: Storage;
222
- });
233
+ interface SampleLoader {
223
234
  /**
224
- * Load all samples referenced in `json`. Returns a Map of sample name →
225
- * AudioBuffer. Progress is reported via `onProgress` callback or via
226
- * options object.
235
+ * Load all samples referenced by `json`. Returns a Map keyed by sample
236
+ * name (`region.sample`), values are decoded `AudioBuffer`s. Failed
237
+ * samples are silently omitted (callers handle absence at lookup time).
227
238
  *
228
- * - `buffers` in options: pre-loaded buffers skips fetch for these names.
229
- * - All samples load in parallel. Failed samples are silently omitted.
239
+ * Internally cached by resolved URL, so repeated calls with the same
240
+ * baseUrl/format/path do not re-fetch.
241
+ *
242
+ * @param json The preset describing samples to load.
243
+ * @param options
244
+ * - `buffers`: pre-decoded buffers keyed by sample name — skip fetch for these.
245
+ * - `onProgress`: called with `(loaded, total)` per sample (including cache hits).
246
+ */
247
+ load(json: SmplrPreset, options?: SampleLoaderLoadOptions): Promise<Map<string, AudioBuffer>>;
248
+ /**
249
+ * @deprecated Pass `{ onProgress }` instead. The bare-callback form is kept
250
+ * for compatibility; the options form is the canonical 1.x signature.
230
251
  */
231
- load(json: SmplrPreset, onProgressOrOptions?: ((loaded: number, total: number) => void) | {
232
- buffers?: Map<string, AudioBuffer>;
233
- onProgress?: (loaded: number, total: number) => void;
234
- }): Promise<Map<string, AudioBuffer>>;
252
+ load(json: SmplrPreset, onProgress: (loaded: number, total: number) => void): Promise<Map<string, AudioBuffer>>;
235
253
  }
236
- declare const SampleLoader: Constructable<[context: BaseAudioContext, options?: {
237
- storage?: Storage;
238
- } | undefined], SampleLoaderImpl>;
239
- type SampleLoader = ReturnType<typeof SampleLoader>;
254
+ declare const SampleLoader: SampleLoaderFactory;
240
255
 
256
+ /** Options accepted by `Scheduler(context, options)`. */
257
+ type SchedulerOptions = {
258
+ /**
259
+ * How far ahead of `currentTime` events are dispatched synchronously.
260
+ * Defaults to 200ms.
261
+ */
262
+ lookaheadMs?: number;
263
+ /**
264
+ * How often the queue is polled for events ready to dispatch.
265
+ * Defaults to 50ms.
266
+ */
267
+ intervalMs?: number;
268
+ };
269
+ type SchedulerFactory = {
270
+ (context: BaseAudioContext, options?: SchedulerOptions): Scheduler;
271
+ /** @deprecated Call as a function: `Scheduler(...)` instead of `new Scheduler(...)`. */
272
+ new (context: BaseAudioContext, options?: SchedulerOptions): Scheduler;
273
+ };
241
274
  /**
242
- * Standalone scheduler. Dispatches NoteEvents immediately when they fall within the
243
- * lookahead window, or queues them for future dispatch via a self-managing interval.
244
- *
245
- * Multiple Smplr instances can share a single Scheduler for coordinated timing.
275
+ * Schedules note events for future dispatch. Used internally by every smplr
276
+ * instrument; pass an instance via {@link SmplrOptions.scheduler} to share one
277
+ * scheduler across multiple instruments.
246
278
  */
247
- declare class SchedulerImpl {
248
- #private;
249
- constructor(context: BaseAudioContext, options?: {
250
- lookaheadMs?: number;
251
- intervalMs?: number;
252
- });
279
+ interface Scheduler {
253
280
  /**
254
- * Schedule a callback for a NoteEvent.
281
+ * Dispatch `callback` at `event.time`. If `event.time` is within the
282
+ * scheduler's lookahead window (or omitted), the callback fires synchronously
283
+ * and the returned {@link StopFn} is a no-op. Otherwise the event is queued.
255
284
  *
256
- * - If the event's time falls within the lookahead window (or has no time), the
257
- * callback is called synchronously and a no-op StopFn is returned.
258
- * - Otherwise the event is queued, the interval is started if needed, and a StopFn
259
- * is returned that removes the event from the queue before it is dispatched.
285
+ * The returned function removes the event from the queue before dispatch.
260
286
  */
261
287
  schedule(event: NoteEvent, callback: (event: NoteEvent) => void): StopFn;
262
288
  /**
263
- * Clear all queued (not-yet-dispatched) events and stop the interval.
264
- * Does not affect voices that are already playing.
289
+ * Clear all queued (not-yet-dispatched) events and stop the polling
290
+ * interval. Does not affect voices already playing.
265
291
  */
266
292
  stop(): void;
267
293
  }
268
- declare const Scheduler: Constructable<[context: BaseAudioContext, options?: {
269
- lookaheadMs?: number;
270
- intervalMs?: number;
271
- } | undefined], SchedulerImpl>;
272
- type Scheduler = ReturnType<typeof Scheduler>;
294
+ declare const Scheduler: SchedulerFactory;
273
295
 
274
296
  type SmplrOptions = {
275
297
  /** Custom storage backend for sample fetching (e.g. CacheStorage). */
@@ -478,6 +500,55 @@ type DrumMachine = ReturnType<typeof DrumMachine>;
478
500
  */
479
501
  declare function drumMachineToPreset(instrument: DrumMachineInstrument): SmplrPreset;
480
502
 
503
+ declare const DRUM_ABUSE_PACKS: readonly ["vol1", "vol2", "vol3", "vol4", "vol5"];
504
+ type DrumAbusePackId = (typeof DRUM_ABUSE_PACKS)[number];
505
+ declare function getDrumAbuseMachineNames(): string[];
506
+ declare function getDrumAbuseMachinesForPack(pack: DrumAbusePackId): readonly string[];
507
+ declare function getDrumAbusePackNames(): readonly DrumAbusePackId[];
508
+ declare function getDrumAbuseMachinePack(id: string): DrumAbusePackId | undefined;
509
+ /** Build a full sample URL. Exported so external row-level Sampler use
510
+ * (e.g. the sequencer engine) can share the same URL convention. */
511
+ declare function drumAbuseSampleUrl(pack: DrumAbusePackId, urlPath: string, fileNoExt: string, format?: string, baseUrl?: string): string;
512
+ type DrumAbuseSource = {
513
+ kind: "machine";
514
+ machine: string;
515
+ set?: string;
516
+ } | {
517
+ kind: "pack";
518
+ pack: DrumAbusePackId;
519
+ instrument: string;
520
+ };
521
+ type DrumAbuseConfig = {
522
+ source: DrumAbuseSource;
523
+ baseUrl: string;
524
+ storage: Storage;
525
+ };
526
+ type DrumAbuseOptions = Partial<DrumAbuseConfig & {
527
+ destination?: AudioNode;
528
+ volume?: number;
529
+ pan?: number;
530
+ velocity?: number;
531
+ onLoadProgress?: (progress: LoadProgress) => void;
532
+ }>;
533
+ type DrumAbuseExtras = {
534
+ readonly mode: "machine" | "pack";
535
+ getSampleNames(): string[];
536
+ getGroupNames(): string[];
537
+ getSampleNamesForGroup(groupName: string): string[];
538
+ getMachineId(): string | null;
539
+ getSetPath(): string | null;
540
+ getPackId(): DrumAbusePackId;
541
+ start(event: NoteEvent): StopFn;
542
+ };
543
+ declare const DrumAbuse: InstrumentFactory<Partial<DrumAbuseConfig & {
544
+ destination?: AudioNode;
545
+ volume?: number;
546
+ pan?: number;
547
+ velocity?: number;
548
+ onLoadProgress?: (progress: LoadProgress) => void;
549
+ }>, DrumAbuseExtras>;
550
+ type DrumAbuse = ReturnType<typeof DrumAbuse>;
551
+
481
552
  /**
482
553
  * The result of an offline render. Provides the raw AudioBuffer and
483
554
  * lazy WAV encoding / download convenience methods.
@@ -1224,4 +1295,4 @@ declare const LAYERS: ({
1224
1295
  cutoff?: undefined;
1225
1296
  })[];
1226
1297
 
1227
- export { type AddTrackOptions, CacheStorage, DrumMachine, type DrumMachineOptions, ElectricPiano, type ElectricPianoOptions, HttpStorage, Instrument, LAYERS, type LoadProgress, Mallet, Mellotron, type MellotronConfig, type MellotronOptions, NAME_TO_PATH, type NoteEvent, type PatternInput, type PlaybackParams, type RenderOfflineOptions, RenderResult, Reverb, SampleLoader, Sampler, type SamplerConfig, type SamplerReloadInput, Scheduler, Sequencer, type SequencerInstrument, type SequencerNote, type SequencerNoteEvent, type SequencerOptions, Smolken, type SmolkenConfig, type SmolkenOptions, type Smplr, type SmplrGroup, type SmplrOptions, type SmplrPlugin, type SmplrPreset, type SmplrRegion, type SmplrSamples, Soundfont, Soundfont2, type Soundfont2Options, Soundfont2Sampler, type SoundfontOptions, SplendidGrandPiano, type SplendidGrandPianoConfig, type StopFn, type StopTarget, type Storage, type StorageResponse, type TimeSignature, Versilian, type VersilianConfig, type VersilianOptions, type VoiceParams, audioBufferToWav, audioBufferToWav16, drumMachineToPreset, getDrumMachineNames, getElectricPianoNames, getMalletNames, getMellotronNames, getSmolkenNames, getSoundfontKits, getSoundfontNames, getVersilianInstruments, loadVersilianInstrument, mellotronToPreset, pianoToPreset, renderOffline, samplerToPreset, sf2InstrumentToPreset, soundfontToPreset, trimSilence };
1298
+ export { type AddTrackOptions, CacheStorage, DRUM_ABUSE_PACKS, DrumAbuse, type DrumAbuseConfig, type DrumAbuseExtras, type DrumAbuseOptions, type DrumAbusePackId, type DrumAbuseSource, DrumMachine, type DrumMachineOptions, ElectricPiano, type ElectricPianoOptions, HttpStorage, Instrument, LAYERS, type LoadProgress, Mallet, Mellotron, type MellotronConfig, type MellotronOptions, NAME_TO_PATH, type NoteEvent, type PatternInput, type PlaybackParams, type RenderOfflineOptions, RenderResult, Reverb, SampleLoader, type SampleLoaderLoadOptions, type SampleLoaderOptions, Sampler, type SamplerConfig, type SamplerReloadInput, Scheduler, type SchedulerOptions, Sequencer, type SequencerInstrument, type SequencerNote, type SequencerNoteEvent, type SequencerOptions, Smolken, type SmolkenConfig, type SmolkenOptions, type Smplr, type SmplrGroup, type SmplrOptions, type SmplrPlugin, type SmplrPreset, type SmplrRegion, type SmplrSamples, Soundfont, Soundfont2, type Soundfont2Options, Soundfont2Sampler, type SoundfontOptions, SplendidGrandPiano, type SplendidGrandPianoConfig, type StopFn, type StopTarget, type Storage, type StorageResponse, type TimeSignature, Versilian, type VersilianConfig, type VersilianOptions, type VoiceParams, audioBufferToWav, audioBufferToWav16, drumAbuseSampleUrl, drumMachineToPreset, getDrumAbuseMachineNames, getDrumAbuseMachinePack, getDrumAbuseMachinesForPack, getDrumAbusePackNames, getDrumMachineNames, getElectricPianoNames, getMalletNames, getMellotronNames, getSmolkenNames, getSoundfontKits, getSoundfontNames, getVersilianInstruments, loadVersilianInstrument, mellotronToPreset, pianoToPreset, renderOffline, samplerToPreset, sf2InstrumentToPreset, soundfontToPreset, trimSilence };
package/dist/index.d.ts CHANGED
@@ -208,68 +208,90 @@ type VoiceParams = {
208
208
  reverse?: boolean;
209
209
  };
210
210
 
211
+ /** Options accepted by `SampleLoader(context, options)`. */
212
+ type SampleLoaderOptions = {
213
+ /** Custom storage backend (e.g. `CacheStorage` for offline). Defaults to `HttpStorage`. */
214
+ storage?: Storage;
215
+ };
216
+ /** Options accepted by `loader.load(json, options)`. */
217
+ type SampleLoaderLoadOptions = {
218
+ /** Pre-decoded buffers keyed by sample name — skip fetch for these. */
219
+ buffers?: Map<string, AudioBuffer>;
220
+ /** Called once per sample (including cache hits) with cumulative progress. */
221
+ onProgress?: (loaded: number, total: number) => void;
222
+ };
223
+ type SampleLoaderFactory = {
224
+ (context: BaseAudioContext, options?: SampleLoaderOptions): SampleLoader;
225
+ /** @deprecated Call as a function: `SampleLoader(...)` instead of `new SampleLoader(...)`. */
226
+ new (context: BaseAudioContext, options?: SampleLoaderOptions): SampleLoader;
227
+ };
211
228
  /**
212
- * Loads and caches AudioBuffers for all samples referenced in a SmplrPreset.
213
- *
214
- * The cache is keyed by resolved URL, so the same audio file is never fetched
215
- * or decoded twice. Multiple Smplr instances can share one SampleLoader by
216
- * passing it via SmplrOptions.loader.
229
+ * Loads and decodes AudioBuffers for the samples referenced by a {@link SmplrPreset}.
230
+ * Used internally by every smplr instrument; pass an instance via
231
+ * {@link SmplrOptions.loader} to share buffer caching across multiple instruments.
217
232
  */
218
- declare class SampleLoaderImpl {
219
- #private;
220
- constructor(context: BaseAudioContext, options?: {
221
- storage?: Storage;
222
- });
233
+ interface SampleLoader {
223
234
  /**
224
- * Load all samples referenced in `json`. Returns a Map of sample name →
225
- * AudioBuffer. Progress is reported via `onProgress` callback or via
226
- * options object.
235
+ * Load all samples referenced by `json`. Returns a Map keyed by sample
236
+ * name (`region.sample`), values are decoded `AudioBuffer`s. Failed
237
+ * samples are silently omitted (callers handle absence at lookup time).
227
238
  *
228
- * - `buffers` in options: pre-loaded buffers skips fetch for these names.
229
- * - All samples load in parallel. Failed samples are silently omitted.
239
+ * Internally cached by resolved URL, so repeated calls with the same
240
+ * baseUrl/format/path do not re-fetch.
241
+ *
242
+ * @param json The preset describing samples to load.
243
+ * @param options
244
+ * - `buffers`: pre-decoded buffers keyed by sample name — skip fetch for these.
245
+ * - `onProgress`: called with `(loaded, total)` per sample (including cache hits).
246
+ */
247
+ load(json: SmplrPreset, options?: SampleLoaderLoadOptions): Promise<Map<string, AudioBuffer>>;
248
+ /**
249
+ * @deprecated Pass `{ onProgress }` instead. The bare-callback form is kept
250
+ * for compatibility; the options form is the canonical 1.x signature.
230
251
  */
231
- load(json: SmplrPreset, onProgressOrOptions?: ((loaded: number, total: number) => void) | {
232
- buffers?: Map<string, AudioBuffer>;
233
- onProgress?: (loaded: number, total: number) => void;
234
- }): Promise<Map<string, AudioBuffer>>;
252
+ load(json: SmplrPreset, onProgress: (loaded: number, total: number) => void): Promise<Map<string, AudioBuffer>>;
235
253
  }
236
- declare const SampleLoader: Constructable<[context: BaseAudioContext, options?: {
237
- storage?: Storage;
238
- } | undefined], SampleLoaderImpl>;
239
- type SampleLoader = ReturnType<typeof SampleLoader>;
254
+ declare const SampleLoader: SampleLoaderFactory;
240
255
 
256
+ /** Options accepted by `Scheduler(context, options)`. */
257
+ type SchedulerOptions = {
258
+ /**
259
+ * How far ahead of `currentTime` events are dispatched synchronously.
260
+ * Defaults to 200ms.
261
+ */
262
+ lookaheadMs?: number;
263
+ /**
264
+ * How often the queue is polled for events ready to dispatch.
265
+ * Defaults to 50ms.
266
+ */
267
+ intervalMs?: number;
268
+ };
269
+ type SchedulerFactory = {
270
+ (context: BaseAudioContext, options?: SchedulerOptions): Scheduler;
271
+ /** @deprecated Call as a function: `Scheduler(...)` instead of `new Scheduler(...)`. */
272
+ new (context: BaseAudioContext, options?: SchedulerOptions): Scheduler;
273
+ };
241
274
  /**
242
- * Standalone scheduler. Dispatches NoteEvents immediately when they fall within the
243
- * lookahead window, or queues them for future dispatch via a self-managing interval.
244
- *
245
- * Multiple Smplr instances can share a single Scheduler for coordinated timing.
275
+ * Schedules note events for future dispatch. Used internally by every smplr
276
+ * instrument; pass an instance via {@link SmplrOptions.scheduler} to share one
277
+ * scheduler across multiple instruments.
246
278
  */
247
- declare class SchedulerImpl {
248
- #private;
249
- constructor(context: BaseAudioContext, options?: {
250
- lookaheadMs?: number;
251
- intervalMs?: number;
252
- });
279
+ interface Scheduler {
253
280
  /**
254
- * Schedule a callback for a NoteEvent.
281
+ * Dispatch `callback` at `event.time`. If `event.time` is within the
282
+ * scheduler's lookahead window (or omitted), the callback fires synchronously
283
+ * and the returned {@link StopFn} is a no-op. Otherwise the event is queued.
255
284
  *
256
- * - If the event's time falls within the lookahead window (or has no time), the
257
- * callback is called synchronously and a no-op StopFn is returned.
258
- * - Otherwise the event is queued, the interval is started if needed, and a StopFn
259
- * is returned that removes the event from the queue before it is dispatched.
285
+ * The returned function removes the event from the queue before dispatch.
260
286
  */
261
287
  schedule(event: NoteEvent, callback: (event: NoteEvent) => void): StopFn;
262
288
  /**
263
- * Clear all queued (not-yet-dispatched) events and stop the interval.
264
- * Does not affect voices that are already playing.
289
+ * Clear all queued (not-yet-dispatched) events and stop the polling
290
+ * interval. Does not affect voices already playing.
265
291
  */
266
292
  stop(): void;
267
293
  }
268
- declare const Scheduler: Constructable<[context: BaseAudioContext, options?: {
269
- lookaheadMs?: number;
270
- intervalMs?: number;
271
- } | undefined], SchedulerImpl>;
272
- type Scheduler = ReturnType<typeof Scheduler>;
294
+ declare const Scheduler: SchedulerFactory;
273
295
 
274
296
  type SmplrOptions = {
275
297
  /** Custom storage backend for sample fetching (e.g. CacheStorage). */
@@ -478,6 +500,55 @@ type DrumMachine = ReturnType<typeof DrumMachine>;
478
500
  */
479
501
  declare function drumMachineToPreset(instrument: DrumMachineInstrument): SmplrPreset;
480
502
 
503
+ declare const DRUM_ABUSE_PACKS: readonly ["vol1", "vol2", "vol3", "vol4", "vol5"];
504
+ type DrumAbusePackId = (typeof DRUM_ABUSE_PACKS)[number];
505
+ declare function getDrumAbuseMachineNames(): string[];
506
+ declare function getDrumAbuseMachinesForPack(pack: DrumAbusePackId): readonly string[];
507
+ declare function getDrumAbusePackNames(): readonly DrumAbusePackId[];
508
+ declare function getDrumAbuseMachinePack(id: string): DrumAbusePackId | undefined;
509
+ /** Build a full sample URL. Exported so external row-level Sampler use
510
+ * (e.g. the sequencer engine) can share the same URL convention. */
511
+ declare function drumAbuseSampleUrl(pack: DrumAbusePackId, urlPath: string, fileNoExt: string, format?: string, baseUrl?: string): string;
512
+ type DrumAbuseSource = {
513
+ kind: "machine";
514
+ machine: string;
515
+ set?: string;
516
+ } | {
517
+ kind: "pack";
518
+ pack: DrumAbusePackId;
519
+ instrument: string;
520
+ };
521
+ type DrumAbuseConfig = {
522
+ source: DrumAbuseSource;
523
+ baseUrl: string;
524
+ storage: Storage;
525
+ };
526
+ type DrumAbuseOptions = Partial<DrumAbuseConfig & {
527
+ destination?: AudioNode;
528
+ volume?: number;
529
+ pan?: number;
530
+ velocity?: number;
531
+ onLoadProgress?: (progress: LoadProgress) => void;
532
+ }>;
533
+ type DrumAbuseExtras = {
534
+ readonly mode: "machine" | "pack";
535
+ getSampleNames(): string[];
536
+ getGroupNames(): string[];
537
+ getSampleNamesForGroup(groupName: string): string[];
538
+ getMachineId(): string | null;
539
+ getSetPath(): string | null;
540
+ getPackId(): DrumAbusePackId;
541
+ start(event: NoteEvent): StopFn;
542
+ };
543
+ declare const DrumAbuse: InstrumentFactory<Partial<DrumAbuseConfig & {
544
+ destination?: AudioNode;
545
+ volume?: number;
546
+ pan?: number;
547
+ velocity?: number;
548
+ onLoadProgress?: (progress: LoadProgress) => void;
549
+ }>, DrumAbuseExtras>;
550
+ type DrumAbuse = ReturnType<typeof DrumAbuse>;
551
+
481
552
  /**
482
553
  * The result of an offline render. Provides the raw AudioBuffer and
483
554
  * lazy WAV encoding / download convenience methods.
@@ -1224,4 +1295,4 @@ declare const LAYERS: ({
1224
1295
  cutoff?: undefined;
1225
1296
  })[];
1226
1297
 
1227
- export { type AddTrackOptions, CacheStorage, DrumMachine, type DrumMachineOptions, ElectricPiano, type ElectricPianoOptions, HttpStorage, Instrument, LAYERS, type LoadProgress, Mallet, Mellotron, type MellotronConfig, type MellotronOptions, NAME_TO_PATH, type NoteEvent, type PatternInput, type PlaybackParams, type RenderOfflineOptions, RenderResult, Reverb, SampleLoader, Sampler, type SamplerConfig, type SamplerReloadInput, Scheduler, Sequencer, type SequencerInstrument, type SequencerNote, type SequencerNoteEvent, type SequencerOptions, Smolken, type SmolkenConfig, type SmolkenOptions, type Smplr, type SmplrGroup, type SmplrOptions, type SmplrPlugin, type SmplrPreset, type SmplrRegion, type SmplrSamples, Soundfont, Soundfont2, type Soundfont2Options, Soundfont2Sampler, type SoundfontOptions, SplendidGrandPiano, type SplendidGrandPianoConfig, type StopFn, type StopTarget, type Storage, type StorageResponse, type TimeSignature, Versilian, type VersilianConfig, type VersilianOptions, type VoiceParams, audioBufferToWav, audioBufferToWav16, drumMachineToPreset, getDrumMachineNames, getElectricPianoNames, getMalletNames, getMellotronNames, getSmolkenNames, getSoundfontKits, getSoundfontNames, getVersilianInstruments, loadVersilianInstrument, mellotronToPreset, pianoToPreset, renderOffline, samplerToPreset, sf2InstrumentToPreset, soundfontToPreset, trimSilence };
1298
+ export { type AddTrackOptions, CacheStorage, DRUM_ABUSE_PACKS, DrumAbuse, type DrumAbuseConfig, type DrumAbuseExtras, type DrumAbuseOptions, type DrumAbusePackId, type DrumAbuseSource, DrumMachine, type DrumMachineOptions, ElectricPiano, type ElectricPianoOptions, HttpStorage, Instrument, LAYERS, type LoadProgress, Mallet, Mellotron, type MellotronConfig, type MellotronOptions, NAME_TO_PATH, type NoteEvent, type PatternInput, type PlaybackParams, type RenderOfflineOptions, RenderResult, Reverb, SampleLoader, type SampleLoaderLoadOptions, type SampleLoaderOptions, Sampler, type SamplerConfig, type SamplerReloadInput, Scheduler, type SchedulerOptions, Sequencer, type SequencerInstrument, type SequencerNote, type SequencerNoteEvent, type SequencerOptions, Smolken, type SmolkenConfig, type SmolkenOptions, type Smplr, type SmplrGroup, type SmplrOptions, type SmplrPlugin, type SmplrPreset, type SmplrRegion, type SmplrSamples, Soundfont, Soundfont2, type Soundfont2Options, Soundfont2Sampler, type SoundfontOptions, SplendidGrandPiano, type SplendidGrandPianoConfig, type StopFn, type StopTarget, type Storage, type StorageResponse, type TimeSignature, Versilian, type VersilianConfig, type VersilianOptions, type VoiceParams, audioBufferToWav, audioBufferToWav16, drumAbuseSampleUrl, drumMachineToPreset, getDrumAbuseMachineNames, getDrumAbuseMachinePack, getDrumAbuseMachinesForPack, getDrumAbusePackNames, getDrumMachineNames, getElectricPianoNames, getMalletNames, getMellotronNames, getSmolkenNames, getSoundfontKits, getSoundfontNames, getVersilianInstruments, loadVersilianInstrument, mellotronToPreset, pianoToPreset, renderOffline, samplerToPreset, sf2InstrumentToPreset, soundfontToPreset, trimSilence };