@blibliki/engine 0.3.5 → 0.3.7
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.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +205 -70
- package/dist/index.d.ts +205 -70
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/src/Engine.ts +10 -4
- package/src/core/IO/Collection.ts +4 -1
- package/src/core/index.ts +7 -2
- package/src/core/midi/MidiDevice.ts +1 -0
- package/src/core/midi/MidiEvent.ts +17 -1
- package/src/core/module/Module.ts +114 -23
- package/src/core/module/PolyModule.ts +27 -2
- package/src/core/module/VoiceScheduler.ts +3 -2
- package/src/core/module/index.ts +1 -1
- package/src/core/schema.ts +53 -8
- package/src/index.ts +10 -2
- package/src/modules/Constant.ts +10 -6
- package/src/modules/Envelope.ts +21 -38
- package/src/modules/Filter.ts +58 -39
- package/src/modules/Gain.ts +8 -6
- package/src/modules/Inspector.ts +16 -6
- package/src/modules/Master.ts +2 -3
- package/src/modules/MidiMapper.ts +292 -0
- package/src/modules/MidiSelector.ts +13 -8
- package/src/modules/Oscillator.ts +38 -21
- package/src/modules/Scale.ts +19 -10
- package/src/modules/StepSequencer.ts +2 -2
- package/src/modules/StereoPanner.ts +86 -0
- package/src/modules/VirtualMidi.ts +2 -2
- package/src/modules/index.ts +26 -15
- package/src/modules/BiquadFilter.ts +0 -162
package/dist/index.d.cts
CHANGED
|
@@ -38,7 +38,7 @@ declare class Note implements INote {
|
|
|
38
38
|
declare enum MidiEventType {
|
|
39
39
|
noteOn = "noteon",
|
|
40
40
|
noteOff = "noteoff",
|
|
41
|
-
cc = "
|
|
41
|
+
cc = "controlchange"
|
|
42
42
|
}
|
|
43
43
|
declare class MidiEvent {
|
|
44
44
|
note?: Note;
|
|
@@ -50,6 +50,9 @@ declare class MidiEvent {
|
|
|
50
50
|
constructor(message: Message, triggeredAt: ContextTime);
|
|
51
51
|
get type(): MidiEventType;
|
|
52
52
|
get isNote(): boolean;
|
|
53
|
+
get isCC(): boolean;
|
|
54
|
+
get cc(): number | undefined;
|
|
55
|
+
get ccValue(): number | undefined;
|
|
53
56
|
defineNotes(): void;
|
|
54
57
|
get rawMessage(): Message;
|
|
55
58
|
clone(voiceNo?: number): MidiEvent;
|
|
@@ -170,6 +173,7 @@ declare abstract class PolyModule<T extends ModuleType> implements IPolyModule<T
|
|
|
170
173
|
protected superInitialized: boolean;
|
|
171
174
|
private _voices;
|
|
172
175
|
private _name;
|
|
176
|
+
private pendingUIUpdates;
|
|
173
177
|
constructor(engineId: string, params: IPolyModuleConstructor<T>);
|
|
174
178
|
get name(): string;
|
|
175
179
|
set name(value: string);
|
|
@@ -189,6 +193,8 @@ declare abstract class PolyModule<T extends ModuleType> implements IPolyModule<T
|
|
|
189
193
|
protected unPlugAll(): void;
|
|
190
194
|
dispose(): void;
|
|
191
195
|
onMidiEvent: (midiEvent: MidiEvent) => void;
|
|
196
|
+
triggerPropsUpdate: () => void;
|
|
197
|
+
private sheduleTriggerUpdate;
|
|
192
198
|
findVoice(voiceNo: number): Module<T>;
|
|
193
199
|
protected registerDefaultIOs(value?: "both" | "in" | "out"): void;
|
|
194
200
|
protected registerAudioInput(props: Omit<PolyAudioInputProps, "ioType">): PolyAudioInput;
|
|
@@ -268,6 +274,46 @@ type IModuleSerialize<T extends ModuleType> = IModule<T> & {
|
|
|
268
274
|
type IModuleConstructor<T extends ModuleType> = Optional<IModule<T>, "id" | "voiceNo"> & {
|
|
269
275
|
audioNodeConstructor?: (context: Context) => AudioNode;
|
|
270
276
|
};
|
|
277
|
+
/**
|
|
278
|
+
* Helper type for type-safe property lifecycle hooks.
|
|
279
|
+
*
|
|
280
|
+
* Hooks are completely optional - only define the ones you need.
|
|
281
|
+
* Use explicit type annotation for automatic type inference.
|
|
282
|
+
*
|
|
283
|
+
* @example
|
|
284
|
+
* ```typescript
|
|
285
|
+
* export type IGainProps = {
|
|
286
|
+
* gain: number;
|
|
287
|
+
* muted: boolean;
|
|
288
|
+
* };
|
|
289
|
+
*
|
|
290
|
+
* export class MonoGain extends Module<ModuleType.Gain> {
|
|
291
|
+
* // ✅ Define only the hooks you need with type annotation
|
|
292
|
+
* // value type is automatically inferred as number!
|
|
293
|
+
* onSetGain: SetterHooks<IGainProps>["onSetGain"] = (value) => {
|
|
294
|
+
* this.audioNode.gain.value = value;
|
|
295
|
+
* return value; // optional: return modified value
|
|
296
|
+
* };
|
|
297
|
+
*
|
|
298
|
+
* // ✅ onAfterSet is called after prop is set
|
|
299
|
+
* onAfterSetMuted: SetterHooks<IGainProps>["onAfterSetMuted"] = (value) => {
|
|
300
|
+
* if (value) this.audioNode.gain.value = 0;
|
|
301
|
+
* };
|
|
302
|
+
*
|
|
303
|
+
* // ✅ You can omit hooks you don't need - they're optional!
|
|
304
|
+
* // No need to define onSetMuted if you don't need it
|
|
305
|
+
*
|
|
306
|
+
* // ❌ This would cause a type error:
|
|
307
|
+
* // onSetGain: SetterHooks<IGainProps>["onSetGain"] = (value: string) => value;
|
|
308
|
+
* // ^^^^^^ Error!
|
|
309
|
+
* }
|
|
310
|
+
* ```
|
|
311
|
+
*/
|
|
312
|
+
type SetterHooks<P> = {
|
|
313
|
+
[K in keyof P as `onSet${Capitalize<string & K>}`]: (value: P[K]) => P[K];
|
|
314
|
+
} & {
|
|
315
|
+
[K in keyof P as `onAfterSet${Capitalize<string & K>}`]: (value: P[K]) => void;
|
|
316
|
+
};
|
|
271
317
|
declare abstract class Module<T extends ModuleType> implements IModule<T> {
|
|
272
318
|
id: string;
|
|
273
319
|
engineId: string;
|
|
@@ -280,9 +326,11 @@ declare abstract class Module<T extends ModuleType> implements IModule<T> {
|
|
|
280
326
|
protected _props: ModuleTypeToPropsMapping[T];
|
|
281
327
|
protected superInitialized: boolean;
|
|
282
328
|
protected activeNotes: Note[];
|
|
329
|
+
private pendingUIUpdates;
|
|
283
330
|
constructor(engineId: string, params: IModuleConstructor<T>);
|
|
284
331
|
get props(): ModuleTypeToPropsMapping[T];
|
|
285
332
|
set props(value: Partial<ModuleTypeToPropsMapping[T]>);
|
|
333
|
+
private callPropHook;
|
|
286
334
|
serialize(): IModuleSerialize<T>;
|
|
287
335
|
plug({ audioModule, from, to, }: {
|
|
288
336
|
audioModule: AnyModule;
|
|
@@ -295,8 +343,10 @@ declare abstract class Module<T extends ModuleType> implements IModule<T> {
|
|
|
295
343
|
stop(_time: ContextTime): void;
|
|
296
344
|
triggerAttack(note: Note, _triggeredAt: ContextTime): void;
|
|
297
345
|
triggerRelease(note: Note, _triggeredAt: ContextTime): void;
|
|
346
|
+
handleCC(_event: MidiEvent, _triggeredAt: ContextTime): void;
|
|
298
347
|
onMidiEvent: (midiEvent: MidiEvent) => void;
|
|
299
|
-
|
|
348
|
+
triggerPropsUpdate: () => void;
|
|
349
|
+
private sheduleTriggerUpdate;
|
|
300
350
|
dispose(): void;
|
|
301
351
|
protected registerDefaultIOs(value?: "both" | "in" | "out"): void;
|
|
302
352
|
protected registerAudioInput(props: Omit<AudioInputProps, "ioType">): AudioInput;
|
|
@@ -353,6 +403,7 @@ type NumberProp = BasePropType & {
|
|
|
353
403
|
min?: number;
|
|
354
404
|
max?: number;
|
|
355
405
|
step?: number;
|
|
406
|
+
exp?: number;
|
|
356
407
|
};
|
|
357
408
|
type EnumProp<T extends string | number> = BasePropType & {
|
|
358
409
|
kind: "enum";
|
|
@@ -368,11 +419,70 @@ type BooleanProp = BasePropType & {
|
|
|
368
419
|
type ArrayProp = BasePropType & {
|
|
369
420
|
kind: "array";
|
|
370
421
|
};
|
|
371
|
-
type
|
|
372
|
-
type
|
|
373
|
-
|
|
422
|
+
type PropSchema = NumberProp | EnumProp<string> | EnumProp<number> | StringProp | BooleanProp | ArrayProp;
|
|
423
|
+
type PrimarySchemaForType<T> = T extends boolean ? BooleanProp : T extends string ? StringProp : T extends number ? NumberProp : T extends unknown[] ? ArrayProp : never;
|
|
424
|
+
/**
|
|
425
|
+
* Schema type that maps each property to its primary schema type, with optional overrides.
|
|
426
|
+
* This provides excellent IntelliSense for both simple and complex cases.
|
|
427
|
+
*
|
|
428
|
+
* Basic usage:
|
|
429
|
+
* ```typescript
|
|
430
|
+
* type MyProps = { count: number; name: string; enabled: boolean };
|
|
431
|
+
* const mySchema: ModulePropSchema<MyProps> = {
|
|
432
|
+
* count: { kind: "number", min: 0, max: 100 },
|
|
433
|
+
* name: { kind: "string" },
|
|
434
|
+
* enabled: { kind: "boolean" }
|
|
435
|
+
* };
|
|
436
|
+
* ```
|
|
437
|
+
*
|
|
438
|
+
* With overrides for custom schema types:
|
|
439
|
+
* ```typescript
|
|
440
|
+
* type MyProps = { wave: OscillatorWave; frequency: number };
|
|
441
|
+
* const mySchema: ModulePropSchema<MyProps, {
|
|
442
|
+
* wave: EnumProp<OscillatorWave>
|
|
443
|
+
* }> = {
|
|
444
|
+
* wave: { kind: "enum", options: Object.values(OscillatorWave) },
|
|
445
|
+
* frequency: { kind: "number", min: 0, max: 1000 }
|
|
446
|
+
* };
|
|
447
|
+
* ```
|
|
448
|
+
*/
|
|
449
|
+
type ModulePropSchema<T, TOverrides extends Partial<Record<keyof T, PropSchema>> = EmptyObject> = {
|
|
450
|
+
[K in keyof T]: K extends keyof TOverrides ? TOverrides[K] : PrimarySchemaForType<T[K]>;
|
|
374
451
|
};
|
|
375
452
|
|
|
453
|
+
type IOscillator = IModule<ModuleType.Oscillator>;
|
|
454
|
+
declare enum OscillatorWave {
|
|
455
|
+
sine = "sine",
|
|
456
|
+
triangle = "triangle",
|
|
457
|
+
square = "square",
|
|
458
|
+
sawtooth = "sawtooth"
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Props for the Oscillator module.
|
|
462
|
+
*
|
|
463
|
+
* @property wave - Waveform shape of the oscillator.
|
|
464
|
+
* One of: "sine", "square", "sawtooth", "triangle", or "custom".
|
|
465
|
+
* @property frequency - Base frequency in Hz (e.g. 440 for A4).
|
|
466
|
+
* @property fine - Fine tuning factor in the range [-1, 1], where ±1 represents ±1 semitone.
|
|
467
|
+
* @property coarse - Coarse tuning factor in the range [-1, 1], scaled to ±12 semitones.
|
|
468
|
+
* @property octave - Octave transposition value (e.g. +1 for one octave up, -2 for two octaves down).
|
|
469
|
+
* @property lowGain - Whether to gain reduction (-18dB). When false, oscillator runs at full gain.
|
|
470
|
+
*/
|
|
471
|
+
type IOscillatorProps = {
|
|
472
|
+
wave: OscillatorWave;
|
|
473
|
+
frequency: number;
|
|
474
|
+
fine: number;
|
|
475
|
+
coarse: number;
|
|
476
|
+
octave: number;
|
|
477
|
+
lowGain: boolean;
|
|
478
|
+
};
|
|
479
|
+
declare class Oscillator extends PolyModule<ModuleType.Oscillator> {
|
|
480
|
+
constructor(engineId: string, params: IPolyModuleConstructor<ModuleType.Oscillator>);
|
|
481
|
+
start(time: ContextTime): void;
|
|
482
|
+
stop(time: ContextTime): void;
|
|
483
|
+
private registerInputs;
|
|
484
|
+
}
|
|
485
|
+
|
|
376
486
|
type IVoiceSchedulerProps = EmptyObject;
|
|
377
487
|
declare class Voice extends Module<ModuleType.VoiceScheduler> {
|
|
378
488
|
audioNode: undefined;
|
|
@@ -391,25 +501,14 @@ declare class VoiceScheduler extends PolyModule<ModuleType.VoiceScheduler> {
|
|
|
391
501
|
private registerOutputs;
|
|
392
502
|
}
|
|
393
503
|
|
|
394
|
-
type IBiquadFilterProps = {
|
|
395
|
-
cutoff: number;
|
|
396
|
-
envelopeAmount: number;
|
|
397
|
-
type: BiquadFilterType;
|
|
398
|
-
Q: number;
|
|
399
|
-
};
|
|
400
|
-
declare class BiquadFilter extends PolyModule<ModuleType.BiquadFilter> {
|
|
401
|
-
constructor(engineId: string, params: IPolyModuleConstructor<ModuleType.BiquadFilter>);
|
|
402
|
-
private registerInputs;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
504
|
type IConstantProps = {
|
|
406
505
|
value: number;
|
|
407
506
|
};
|
|
408
|
-
declare class Constant extends Module<ModuleType.Constant> {
|
|
507
|
+
declare class Constant extends Module<ModuleType.Constant> implements Pick<SetterHooks<IConstantProps>, "onAfterSetValue"> {
|
|
409
508
|
audioNode: ConstantSourceNode;
|
|
410
509
|
isStated: boolean;
|
|
411
510
|
constructor(engineId: string, params: ICreateModule<ModuleType.Constant>);
|
|
412
|
-
|
|
511
|
+
onAfterSetValue: SetterHooks<IConstantProps>["onAfterSetValue"];
|
|
413
512
|
start(time: ContextTime): void;
|
|
414
513
|
stop(time: ContextTime): void;
|
|
415
514
|
triggerAttack: (note: Note, triggeredAt: ContextTime) => void;
|
|
@@ -429,7 +528,8 @@ declare class Envelope extends PolyModule<ModuleType.Envelope> {
|
|
|
429
528
|
type IFilterProps = {
|
|
430
529
|
cutoff: number;
|
|
431
530
|
envelopeAmount: number;
|
|
432
|
-
|
|
531
|
+
type: BiquadFilterType;
|
|
532
|
+
Q: number;
|
|
433
533
|
};
|
|
434
534
|
declare class Filter extends PolyModule<ModuleType.Filter> {
|
|
435
535
|
constructor(engineId: string, params: IPolyModuleConstructor<ModuleType.Filter>);
|
|
@@ -448,11 +548,11 @@ declare class Gain extends PolyModule<ModuleType.Gain> {
|
|
|
448
548
|
type IInspectorProps = {
|
|
449
549
|
fftSize: number;
|
|
450
550
|
};
|
|
451
|
-
declare class Inspector extends Module<ModuleType.Inspector> {
|
|
551
|
+
declare class Inspector extends Module<ModuleType.Inspector> implements Pick<SetterHooks<IInspectorProps>, "onAfterSetFftSize"> {
|
|
452
552
|
audioNode: AnalyserNode;
|
|
453
553
|
private _buffer?;
|
|
454
554
|
constructor(engineId: string, params: ICreateModule<ModuleType.Inspector>);
|
|
455
|
-
|
|
555
|
+
onAfterSetFftSize: SetterHooks<IInspectorProps>["onAfterSetFftSize"];
|
|
456
556
|
get buffer(): Float32Array<ArrayBuffer>;
|
|
457
557
|
getValue(): number;
|
|
458
558
|
getValues(): Float32Array;
|
|
@@ -465,68 +565,73 @@ declare class Master extends Module<ModuleType.Master> {
|
|
|
465
565
|
constructor(engineId: string, params: ICreateModule<ModuleType.Master>);
|
|
466
566
|
}
|
|
467
567
|
|
|
568
|
+
type IMidiMapper = IModule<ModuleType.MidiMapper>;
|
|
569
|
+
type IMidiMapperProps = {
|
|
570
|
+
pages: MidiMappingPage[];
|
|
571
|
+
activePage: number;
|
|
572
|
+
globalMappings: MidiMapping<ModuleType>[];
|
|
573
|
+
};
|
|
574
|
+
type MidiMappingPage = {
|
|
575
|
+
name?: string;
|
|
576
|
+
mappings: MidiMapping<ModuleType>[];
|
|
577
|
+
};
|
|
578
|
+
declare enum MidiMappingMode {
|
|
579
|
+
direct = "direct",
|
|
580
|
+
directRev = "directRev",
|
|
581
|
+
toggleInc = "toggleInc",
|
|
582
|
+
toggleDec = "toggleDec",
|
|
583
|
+
incDec = "incDec",
|
|
584
|
+
incDecRev = "incDecRev"
|
|
585
|
+
}
|
|
586
|
+
type MidiMapping<T extends ModuleType> = {
|
|
587
|
+
cc?: number;
|
|
588
|
+
moduleId?: string;
|
|
589
|
+
moduleType?: T;
|
|
590
|
+
propName?: string;
|
|
591
|
+
autoAssign?: boolean;
|
|
592
|
+
mode?: MidiMappingMode;
|
|
593
|
+
threshold?: number;
|
|
594
|
+
step?: number;
|
|
595
|
+
};
|
|
596
|
+
type MidiMapperSetterHooks = Pick<SetterHooks<IMidiMapperProps>, "onSetActivePage">;
|
|
597
|
+
declare class MidiMapper extends Module<ModuleType.MidiMapper> implements MidiMapperSetterHooks {
|
|
598
|
+
audioNode: undefined;
|
|
599
|
+
constructor(engineId: string, params: ICreateModule<ModuleType.MidiMapper>);
|
|
600
|
+
onSetActivePage: MidiMapperSetterHooks["onSetActivePage"];
|
|
601
|
+
handleCC: (event: MidiEvent, triggeredAt: ContextTime) => void;
|
|
602
|
+
forwardMapping: (event: MidiEvent, mapping: MidiMapping<ModuleType>, _triggeredAt: ContextTime) => void;
|
|
603
|
+
private checkAutoAssign;
|
|
604
|
+
}
|
|
605
|
+
|
|
468
606
|
type IMidiSelectorProps = {
|
|
469
607
|
selectedId: string | undefined | null;
|
|
470
608
|
};
|
|
471
|
-
declare class MidiSelector extends Module<ModuleType.MidiSelector> {
|
|
609
|
+
declare class MidiSelector extends Module<ModuleType.MidiSelector> implements Pick<SetterHooks<IMidiSelectorProps>, "onSetSelectedId"> {
|
|
472
610
|
audioNode: undefined;
|
|
473
611
|
midiOutput: MidiOutput;
|
|
474
612
|
_forwardMidiEvent?: (midiEvent: MidiEvent) => void;
|
|
475
613
|
constructor(engineId: string, params: ICreateModule<ModuleType.MidiSelector>);
|
|
476
|
-
|
|
614
|
+
onSetSelectedId: SetterHooks<IMidiSelectorProps>["onSetSelectedId"];
|
|
477
615
|
private get forwardMidiEvent();
|
|
478
616
|
private addEventListener;
|
|
479
617
|
private removeEventListener;
|
|
480
618
|
private registerOutputs;
|
|
481
619
|
}
|
|
482
620
|
|
|
483
|
-
type IOscillator = IModule<ModuleType.Oscillator>;
|
|
484
|
-
declare enum OscillatorWave {
|
|
485
|
-
sine = "sine",
|
|
486
|
-
triangle = "triangle",
|
|
487
|
-
square = "square",
|
|
488
|
-
sawtooth = "sawtooth"
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Props for the Oscillator module.
|
|
492
|
-
*
|
|
493
|
-
* @property wave - Waveform shape of the oscillator.
|
|
494
|
-
* One of: "sine", "square", "sawtooth", "triangle", or "custom".
|
|
495
|
-
* @property frequency - Base frequency in Hz (e.g. 440 for A4).
|
|
496
|
-
* @property fine - Fine tuning factor in the range [-1, 1], where ±1 represents ±1 semitone.
|
|
497
|
-
* @property coarse - Coarse tuning factor in the range [-1, 1], scaled to ±12 semitones.
|
|
498
|
-
* @property octave - Octave transposition value (e.g. +1 for one octave up, -2 for two octaves down).
|
|
499
|
-
* @property lowGain - Whether to gain reduction (-18dB). When false, oscillator runs at full gain.
|
|
500
|
-
*/
|
|
501
|
-
type IOscillatorProps = {
|
|
502
|
-
wave: OscillatorWave;
|
|
503
|
-
frequency: number;
|
|
504
|
-
fine: number;
|
|
505
|
-
coarse: number;
|
|
506
|
-
octave: number;
|
|
507
|
-
lowGain: boolean;
|
|
508
|
-
};
|
|
509
|
-
declare class Oscillator extends PolyModule<ModuleType.Oscillator> {
|
|
510
|
-
constructor(engineId: string, params: IPolyModuleConstructor<ModuleType.Oscillator>);
|
|
511
|
-
start(time: ContextTime): void;
|
|
512
|
-
stop(time: ContextTime): void;
|
|
513
|
-
private registerInputs;
|
|
514
|
-
}
|
|
515
|
-
|
|
516
621
|
type IScaleProps = {
|
|
517
622
|
min: number;
|
|
518
623
|
max: number;
|
|
519
624
|
current: number;
|
|
520
625
|
};
|
|
521
|
-
declare class Scale extends Module<ModuleType.Scale> {
|
|
626
|
+
declare class Scale extends Module<ModuleType.Scale> implements Pick<SetterHooks<IScaleProps>, "onAfterSetMin" | "onAfterSetMax" | "onAfterSetCurrent"> {
|
|
522
627
|
audioNode: AudioWorkletNode;
|
|
523
628
|
constructor(engineId: string, params: ICreateModule<ModuleType.Scale>);
|
|
524
629
|
get current(): AudioParam;
|
|
525
630
|
get min(): AudioParam;
|
|
526
631
|
get max(): AudioParam;
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
632
|
+
onAfterSetMin: SetterHooks<IScaleProps>["onAfterSetMin"];
|
|
633
|
+
onAfterSetMax: SetterHooks<IScaleProps>["onAfterSetMax"];
|
|
634
|
+
onAfterSetCurrent: SetterHooks<IScaleProps>["onAfterSetCurrent"];
|
|
530
635
|
}
|
|
531
636
|
|
|
532
637
|
type IStepSequencer = IModule<ModuleType.StepSequencer>;
|
|
@@ -546,6 +651,14 @@ declare class StepSequencer extends Module<ModuleType.StepSequencer> {
|
|
|
546
651
|
constructor(engineId: string, params: ICreateModule<ModuleType.StepSequencer>);
|
|
547
652
|
}
|
|
548
653
|
|
|
654
|
+
type IStereoPannerProps = {
|
|
655
|
+
pan: number;
|
|
656
|
+
};
|
|
657
|
+
declare class StereoPanner extends PolyModule<ModuleType.StereoPanner> {
|
|
658
|
+
constructor(engineId: string, params: IPolyModuleConstructor<ModuleType.StereoPanner>);
|
|
659
|
+
private registerAdditionalInputs;
|
|
660
|
+
}
|
|
661
|
+
|
|
549
662
|
type IVirtualMidiProps = {
|
|
550
663
|
activeNotes: string[];
|
|
551
664
|
};
|
|
@@ -567,10 +680,11 @@ declare enum ModuleType {
|
|
|
567
680
|
MidiSelector = "MidiSelector",
|
|
568
681
|
Envelope = "Envelope",
|
|
569
682
|
Filter = "Filter",
|
|
570
|
-
BiquadFilter = "BiquadFilter",
|
|
571
683
|
Scale = "Scale",
|
|
684
|
+
StereoPanner = "StereoPanner",
|
|
572
685
|
Inspector = "Inspector",
|
|
573
686
|
Constant = "Constant",
|
|
687
|
+
MidiMapper = "MidiMapper",
|
|
574
688
|
VirtualMidi = "VirtualMidi",
|
|
575
689
|
StepSequencer = "StepSequencer",
|
|
576
690
|
VoiceScheduler = "VoiceScheduler"
|
|
@@ -582,10 +696,11 @@ type ModuleTypeToPropsMapping = {
|
|
|
582
696
|
[ModuleType.MidiSelector]: IMidiSelectorProps;
|
|
583
697
|
[ModuleType.Envelope]: IEnvelopeProps;
|
|
584
698
|
[ModuleType.Filter]: IFilterProps;
|
|
585
|
-
[ModuleType.BiquadFilter]: IBiquadFilterProps;
|
|
586
699
|
[ModuleType.Scale]: IScaleProps;
|
|
700
|
+
[ModuleType.StereoPanner]: IStereoPannerProps;
|
|
587
701
|
[ModuleType.Inspector]: IInspectorProps;
|
|
588
702
|
[ModuleType.Constant]: IConstantProps;
|
|
703
|
+
[ModuleType.MidiMapper]: IMidiMapperProps;
|
|
589
704
|
[ModuleType.VirtualMidi]: IVirtualMidiProps;
|
|
590
705
|
[ModuleType.StepSequencer]: IStepSequencerProps;
|
|
591
706
|
[ModuleType.VoiceScheduler]: IVoiceSchedulerProps;
|
|
@@ -597,16 +712,36 @@ type ModuleTypeToModuleMapping = {
|
|
|
597
712
|
[ModuleType.MidiSelector]: MidiSelector;
|
|
598
713
|
[ModuleType.Envelope]: Envelope;
|
|
599
714
|
[ModuleType.Filter]: Filter;
|
|
600
|
-
[ModuleType.BiquadFilter]: BiquadFilter;
|
|
601
715
|
[ModuleType.Scale]: Scale;
|
|
716
|
+
[ModuleType.StereoPanner]: StereoPanner;
|
|
602
717
|
[ModuleType.Inspector]: Inspector;
|
|
603
718
|
[ModuleType.Constant]: Constant;
|
|
719
|
+
[ModuleType.MidiMapper]: MidiMapper;
|
|
604
720
|
[ModuleType.VirtualMidi]: VirtualMidi;
|
|
605
721
|
[ModuleType.StepSequencer]: StepSequencer;
|
|
606
722
|
[ModuleType.VoiceScheduler]: VoiceScheduler;
|
|
607
723
|
};
|
|
608
724
|
declare const moduleSchemas: {
|
|
609
|
-
|
|
725
|
+
Oscillator: ModulePropSchema<IOscillatorProps, {
|
|
726
|
+
wave: EnumProp<OscillatorWave>;
|
|
727
|
+
}>;
|
|
728
|
+
Gain: ModulePropSchema<IGainProps, _blibliki_utils.EmptyObject>;
|
|
729
|
+
Master: ModulePropSchema<_blibliki_utils.EmptyObject, _blibliki_utils.EmptyObject>;
|
|
730
|
+
MidiSelector: ModulePropSchema<IMidiSelectorProps, _blibliki_utils.EmptyObject>;
|
|
731
|
+
Envelope: ModulePropSchema<IEnvelopeProps, _blibliki_utils.EmptyObject>;
|
|
732
|
+
Filter: ModulePropSchema<IFilterProps, {
|
|
733
|
+
type: EnumProp<BiquadFilterType>;
|
|
734
|
+
}>;
|
|
735
|
+
Scale: ModulePropSchema<IScaleProps, _blibliki_utils.EmptyObject>;
|
|
736
|
+
StereoPanner: ModulePropSchema<IStereoPannerProps, _blibliki_utils.EmptyObject>;
|
|
737
|
+
Inspector: ModulePropSchema<IInspectorProps, {
|
|
738
|
+
fftSize: EnumProp<number>;
|
|
739
|
+
}>;
|
|
740
|
+
Constant: ModulePropSchema<IConstantProps, _blibliki_utils.EmptyObject>;
|
|
741
|
+
MidiMapper: ModulePropSchema<IMidiMapperProps, _blibliki_utils.EmptyObject>;
|
|
742
|
+
VirtualMidi: ModulePropSchema<IVirtualMidiProps, _blibliki_utils.EmptyObject>;
|
|
743
|
+
StepSequencer: ModulePropSchema<Omit<IStepSequencerProps, "sequences">, _blibliki_utils.EmptyObject>;
|
|
744
|
+
VoiceScheduler: ModulePropSchema<_blibliki_utils.EmptyObject, _blibliki_utils.EmptyObject>;
|
|
610
745
|
};
|
|
611
746
|
|
|
612
747
|
type AnyModule = Module<ModuleType>;
|
|
@@ -617,7 +752,7 @@ type ICreateModule<T extends ModuleType> = {
|
|
|
617
752
|
props: Partial<ModuleTypeToPropsMapping[T]>;
|
|
618
753
|
};
|
|
619
754
|
type ModuleParams = {
|
|
620
|
-
[K in ModuleType]: K extends ModuleType.Oscillator | ModuleType.Gain | ModuleType.Envelope | ModuleType.Filter | ModuleType.
|
|
755
|
+
[K in ModuleType]: K extends ModuleType.Oscillator | ModuleType.Gain | ModuleType.Envelope | ModuleType.Filter | ModuleType.StereoPanner | ModuleType.VoiceScheduler ? IPolyModuleConstructor<K> : ICreateModule<K>;
|
|
621
756
|
}[ModuleType];
|
|
622
757
|
|
|
623
758
|
type IOProps = {
|
|
@@ -685,8 +820,8 @@ declare class Engine {
|
|
|
685
820
|
constructor(context: Context);
|
|
686
821
|
get state(): _blibliki_transport.TransportState;
|
|
687
822
|
initialize(): Promise<void>;
|
|
688
|
-
addModule<T extends ModuleType>(params: ICreateModule<T>): IModuleSerialize<ModuleType.Scale> | IPolyModuleSerialize<ModuleType.VoiceScheduler> | IPolyModuleSerialize<ModuleType.
|
|
689
|
-
updateModule<T extends ModuleType>(params: IUpdateModule<T>): IModuleSerialize<ModuleType.Scale> | IPolyModuleSerialize<ModuleType.VoiceScheduler> | IPolyModuleSerialize<ModuleType.
|
|
823
|
+
addModule<T extends ModuleType>(params: ICreateModule<T>): IModuleSerialize<ModuleType.Scale> | IPolyModuleSerialize<ModuleType.VoiceScheduler> | IPolyModuleSerialize<ModuleType.Envelope> | IPolyModuleSerialize<ModuleType.Gain> | IPolyModuleSerialize<ModuleType.Oscillator> | IPolyModuleSerialize<ModuleType.Filter> | IPolyModuleSerialize<ModuleType.StereoPanner> | IModuleSerialize<ModuleType.Constant> | IModuleSerialize<ModuleType.Master> | IModuleSerialize<ModuleType.MidiSelector> | IModuleSerialize<ModuleType.Inspector> | IModuleSerialize<ModuleType.MidiMapper> | IModuleSerialize<ModuleType.VirtualMidi> | IModuleSerialize<ModuleType.StepSequencer>;
|
|
824
|
+
updateModule<T extends ModuleType>(params: IUpdateModule<T>): IModuleSerialize<ModuleType.Scale> | IPolyModuleSerialize<ModuleType.VoiceScheduler> | IPolyModuleSerialize<ModuleType.Envelope> | IPolyModuleSerialize<ModuleType.Gain> | IPolyModuleSerialize<ModuleType.Oscillator> | IPolyModuleSerialize<ModuleType.Filter> | IPolyModuleSerialize<ModuleType.StereoPanner> | IModuleSerialize<ModuleType.Constant> | IModuleSerialize<ModuleType.Master> | IModuleSerialize<ModuleType.MidiSelector> | IModuleSerialize<ModuleType.Inspector> | IModuleSerialize<ModuleType.MidiMapper> | IModuleSerialize<ModuleType.VirtualMidi> | IModuleSerialize<ModuleType.StepSequencer>;
|
|
690
825
|
removeModule(id: string): void;
|
|
691
826
|
addRoute(props: ICreateRoute): IRoute;
|
|
692
827
|
removeRoute(id: string): void;
|
|
@@ -703,11 +838,11 @@ declare class Engine {
|
|
|
703
838
|
findModule(id: string): ModuleTypeToModuleMapping[keyof ModuleTypeToModuleMapping];
|
|
704
839
|
findIO(moduleId: string, ioName: string, type: "input" | "output"): Base;
|
|
705
840
|
findMidiDevice(id: string): MidiDevice | ComputerKeyboardInput | undefined;
|
|
706
|
-
onPropsUpdate(callback: <T extends ModuleType>(params: IModule<T>) => void): void;
|
|
707
|
-
_triggerPropsUpdate<T extends ModuleType>(params: IModule<T>): void;
|
|
841
|
+
onPropsUpdate(callback: <T extends ModuleType>(params: IModule<T> | IPolyModule<T>) => void): void;
|
|
842
|
+
_triggerPropsUpdate<T extends ModuleType>(params: IModule<T> | IPolyModule<T>): void;
|
|
708
843
|
triggerVirtualMidi(id: string, noteName: string, type: "noteOn" | "noteOff"): void;
|
|
709
844
|
private onStart;
|
|
710
845
|
private onStop;
|
|
711
846
|
}
|
|
712
847
|
|
|
713
|
-
export { type ArrayProp, type BooleanProp, Engine, type EnumProp, type ICreateModule, type ICreateRoute, type IGain, type IIOSerialize, type IMaster, type IMidiDevice, type IModule, type IModuleSerialize, type INote, type IOscillator, type IPolyModuleSerialize, type IRoute, type ISequence, type IStepSequencer, type IStepSequencerProps, type IUpdateModule, MidiDevice, MidiPortState, type ModuleParams, ModuleType, type ModuleTypeToPropsMapping, Note, type NumberProp, OscillatorWave, type
|
|
848
|
+
export { type ArrayProp, type BooleanProp, Engine, type EnumProp, type ICreateModule, type ICreateRoute, type IGain, type IIOSerialize, type IMaster, type IMidiDevice, type IMidiMapper, type IMidiMapperProps, type IModule, type IModuleSerialize, type INote, type IOscillator, type IPolyModuleSerialize, type IRoute, type ISequence, type IStepSequencer, type IStepSequencerProps, type IUpdateModule, MidiDevice, type MidiMapping, MidiMappingMode, MidiPortState, type ModuleParams, type ModulePropSchema, ModuleType, type ModuleTypeToPropsMapping, Note, type NumberProp, OscillatorWave, type PropSchema, type StringProp, moduleSchemas };
|