@blibliki/engine 0.3.4 → 0.3.6
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 +206 -70
- package/dist/index.d.ts +206 -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 +12 -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.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as _blibliki_utils from '@blibliki/utils';
|
|
2
2
|
import { Context, Optional, EmptyObject } from '@blibliki/utils';
|
|
3
|
+
export { Context } from '@blibliki/utils';
|
|
3
4
|
import { Message, Input } from 'webmidi';
|
|
4
5
|
import * as _blibliki_transport from '@blibliki/transport';
|
|
5
6
|
import { Seconds, ContextTime, Transport, TransportEvent, TimeSignature } from '@blibliki/transport';
|
|
@@ -37,7 +38,7 @@ declare class Note implements INote {
|
|
|
37
38
|
declare enum MidiEventType {
|
|
38
39
|
noteOn = "noteon",
|
|
39
40
|
noteOff = "noteoff",
|
|
40
|
-
cc = "
|
|
41
|
+
cc = "controlchange"
|
|
41
42
|
}
|
|
42
43
|
declare class MidiEvent {
|
|
43
44
|
note?: Note;
|
|
@@ -49,6 +50,9 @@ declare class MidiEvent {
|
|
|
49
50
|
constructor(message: Message, triggeredAt: ContextTime);
|
|
50
51
|
get type(): MidiEventType;
|
|
51
52
|
get isNote(): boolean;
|
|
53
|
+
get isCC(): boolean;
|
|
54
|
+
get cc(): number | undefined;
|
|
55
|
+
get ccValue(): number | undefined;
|
|
52
56
|
defineNotes(): void;
|
|
53
57
|
get rawMessage(): Message;
|
|
54
58
|
clone(voiceNo?: number): MidiEvent;
|
|
@@ -169,6 +173,7 @@ declare abstract class PolyModule<T extends ModuleType> implements IPolyModule<T
|
|
|
169
173
|
protected superInitialized: boolean;
|
|
170
174
|
private _voices;
|
|
171
175
|
private _name;
|
|
176
|
+
private pendingUIUpdates;
|
|
172
177
|
constructor(engineId: string, params: IPolyModuleConstructor<T>);
|
|
173
178
|
get name(): string;
|
|
174
179
|
set name(value: string);
|
|
@@ -188,6 +193,8 @@ declare abstract class PolyModule<T extends ModuleType> implements IPolyModule<T
|
|
|
188
193
|
protected unPlugAll(): void;
|
|
189
194
|
dispose(): void;
|
|
190
195
|
onMidiEvent: (midiEvent: MidiEvent) => void;
|
|
196
|
+
triggerPropsUpdate: () => void;
|
|
197
|
+
private sheduleTriggerUpdate;
|
|
191
198
|
findVoice(voiceNo: number): Module<T>;
|
|
192
199
|
protected registerDefaultIOs(value?: "both" | "in" | "out"): void;
|
|
193
200
|
protected registerAudioInput(props: Omit<PolyAudioInputProps, "ioType">): PolyAudioInput;
|
|
@@ -267,6 +274,46 @@ type IModuleSerialize<T extends ModuleType> = IModule<T> & {
|
|
|
267
274
|
type IModuleConstructor<T extends ModuleType> = Optional<IModule<T>, "id" | "voiceNo"> & {
|
|
268
275
|
audioNodeConstructor?: (context: Context) => AudioNode;
|
|
269
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
|
+
};
|
|
270
317
|
declare abstract class Module<T extends ModuleType> implements IModule<T> {
|
|
271
318
|
id: string;
|
|
272
319
|
engineId: string;
|
|
@@ -279,9 +326,11 @@ declare abstract class Module<T extends ModuleType> implements IModule<T> {
|
|
|
279
326
|
protected _props: ModuleTypeToPropsMapping[T];
|
|
280
327
|
protected superInitialized: boolean;
|
|
281
328
|
protected activeNotes: Note[];
|
|
329
|
+
private pendingUIUpdates;
|
|
282
330
|
constructor(engineId: string, params: IModuleConstructor<T>);
|
|
283
331
|
get props(): ModuleTypeToPropsMapping[T];
|
|
284
332
|
set props(value: Partial<ModuleTypeToPropsMapping[T]>);
|
|
333
|
+
private callPropHook;
|
|
285
334
|
serialize(): IModuleSerialize<T>;
|
|
286
335
|
plug({ audioModule, from, to, }: {
|
|
287
336
|
audioModule: AnyModule;
|
|
@@ -294,8 +343,10 @@ declare abstract class Module<T extends ModuleType> implements IModule<T> {
|
|
|
294
343
|
stop(_time: ContextTime): void;
|
|
295
344
|
triggerAttack(note: Note, _triggeredAt: ContextTime): void;
|
|
296
345
|
triggerRelease(note: Note, _triggeredAt: ContextTime): void;
|
|
346
|
+
handleCC(_event: MidiEvent, _triggeredAt: ContextTime): void;
|
|
297
347
|
onMidiEvent: (midiEvent: MidiEvent) => void;
|
|
298
|
-
|
|
348
|
+
triggerPropsUpdate: () => void;
|
|
349
|
+
private sheduleTriggerUpdate;
|
|
299
350
|
dispose(): void;
|
|
300
351
|
protected registerDefaultIOs(value?: "both" | "in" | "out"): void;
|
|
301
352
|
protected registerAudioInput(props: Omit<AudioInputProps, "ioType">): AudioInput;
|
|
@@ -352,6 +403,7 @@ type NumberProp = BasePropType & {
|
|
|
352
403
|
min?: number;
|
|
353
404
|
max?: number;
|
|
354
405
|
step?: number;
|
|
406
|
+
exp?: number;
|
|
355
407
|
};
|
|
356
408
|
type EnumProp<T extends string | number> = BasePropType & {
|
|
357
409
|
kind: "enum";
|
|
@@ -367,11 +419,70 @@ type BooleanProp = BasePropType & {
|
|
|
367
419
|
type ArrayProp = BasePropType & {
|
|
368
420
|
kind: "array";
|
|
369
421
|
};
|
|
370
|
-
type
|
|
371
|
-
type
|
|
372
|
-
|
|
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]>;
|
|
373
451
|
};
|
|
374
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
|
+
|
|
375
486
|
type IVoiceSchedulerProps = EmptyObject;
|
|
376
487
|
declare class Voice extends Module<ModuleType.VoiceScheduler> {
|
|
377
488
|
audioNode: undefined;
|
|
@@ -390,25 +501,14 @@ declare class VoiceScheduler extends PolyModule<ModuleType.VoiceScheduler> {
|
|
|
390
501
|
private registerOutputs;
|
|
391
502
|
}
|
|
392
503
|
|
|
393
|
-
type IBiquadFilterProps = {
|
|
394
|
-
cutoff: number;
|
|
395
|
-
envelopeAmount: number;
|
|
396
|
-
type: BiquadFilterType;
|
|
397
|
-
Q: number;
|
|
398
|
-
};
|
|
399
|
-
declare class BiquadFilter extends PolyModule<ModuleType.BiquadFilter> {
|
|
400
|
-
constructor(engineId: string, params: IPolyModuleConstructor<ModuleType.BiquadFilter>);
|
|
401
|
-
private registerInputs;
|
|
402
|
-
}
|
|
403
|
-
|
|
404
504
|
type IConstantProps = {
|
|
405
505
|
value: number;
|
|
406
506
|
};
|
|
407
|
-
declare class Constant extends Module<ModuleType.Constant> {
|
|
507
|
+
declare class Constant extends Module<ModuleType.Constant> implements Pick<SetterHooks<IConstantProps>, "onAfterSetValue"> {
|
|
408
508
|
audioNode: ConstantSourceNode;
|
|
409
509
|
isStated: boolean;
|
|
410
510
|
constructor(engineId: string, params: ICreateModule<ModuleType.Constant>);
|
|
411
|
-
|
|
511
|
+
onAfterSetValue: SetterHooks<IConstantProps>["onAfterSetValue"];
|
|
412
512
|
start(time: ContextTime): void;
|
|
413
513
|
stop(time: ContextTime): void;
|
|
414
514
|
triggerAttack: (note: Note, triggeredAt: ContextTime) => void;
|
|
@@ -428,7 +528,8 @@ declare class Envelope extends PolyModule<ModuleType.Envelope> {
|
|
|
428
528
|
type IFilterProps = {
|
|
429
529
|
cutoff: number;
|
|
430
530
|
envelopeAmount: number;
|
|
431
|
-
|
|
531
|
+
type: BiquadFilterType;
|
|
532
|
+
Q: number;
|
|
432
533
|
};
|
|
433
534
|
declare class Filter extends PolyModule<ModuleType.Filter> {
|
|
434
535
|
constructor(engineId: string, params: IPolyModuleConstructor<ModuleType.Filter>);
|
|
@@ -447,11 +548,11 @@ declare class Gain extends PolyModule<ModuleType.Gain> {
|
|
|
447
548
|
type IInspectorProps = {
|
|
448
549
|
fftSize: number;
|
|
449
550
|
};
|
|
450
|
-
declare class Inspector extends Module<ModuleType.Inspector> {
|
|
551
|
+
declare class Inspector extends Module<ModuleType.Inspector> implements Pick<SetterHooks<IInspectorProps>, "onAfterSetFftSize"> {
|
|
451
552
|
audioNode: AnalyserNode;
|
|
452
553
|
private _buffer?;
|
|
453
554
|
constructor(engineId: string, params: ICreateModule<ModuleType.Inspector>);
|
|
454
|
-
|
|
555
|
+
onAfterSetFftSize: SetterHooks<IInspectorProps>["onAfterSetFftSize"];
|
|
455
556
|
get buffer(): Float32Array<ArrayBuffer>;
|
|
456
557
|
getValue(): number;
|
|
457
558
|
getValues(): Float32Array;
|
|
@@ -464,68 +565,73 @@ declare class Master extends Module<ModuleType.Master> {
|
|
|
464
565
|
constructor(engineId: string, params: ICreateModule<ModuleType.Master>);
|
|
465
566
|
}
|
|
466
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
|
+
|
|
467
606
|
type IMidiSelectorProps = {
|
|
468
607
|
selectedId: string | undefined | null;
|
|
469
608
|
};
|
|
470
|
-
declare class MidiSelector extends Module<ModuleType.MidiSelector> {
|
|
609
|
+
declare class MidiSelector extends Module<ModuleType.MidiSelector> implements Pick<SetterHooks<IMidiSelectorProps>, "onSetSelectedId"> {
|
|
471
610
|
audioNode: undefined;
|
|
472
611
|
midiOutput: MidiOutput;
|
|
473
612
|
_forwardMidiEvent?: (midiEvent: MidiEvent) => void;
|
|
474
613
|
constructor(engineId: string, params: ICreateModule<ModuleType.MidiSelector>);
|
|
475
|
-
|
|
614
|
+
onSetSelectedId: SetterHooks<IMidiSelectorProps>["onSetSelectedId"];
|
|
476
615
|
private get forwardMidiEvent();
|
|
477
616
|
private addEventListener;
|
|
478
617
|
private removeEventListener;
|
|
479
618
|
private registerOutputs;
|
|
480
619
|
}
|
|
481
620
|
|
|
482
|
-
type IOscillator = IModule<ModuleType.Oscillator>;
|
|
483
|
-
declare enum OscillatorWave {
|
|
484
|
-
sine = "sine",
|
|
485
|
-
triangle = "triangle",
|
|
486
|
-
square = "square",
|
|
487
|
-
sawtooth = "sawtooth"
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* Props for the Oscillator module.
|
|
491
|
-
*
|
|
492
|
-
* @property wave - Waveform shape of the oscillator.
|
|
493
|
-
* One of: "sine", "square", "sawtooth", "triangle", or "custom".
|
|
494
|
-
* @property frequency - Base frequency in Hz (e.g. 440 for A4).
|
|
495
|
-
* @property fine - Fine tuning factor in the range [-1, 1], where ±1 represents ±1 semitone.
|
|
496
|
-
* @property coarse - Coarse tuning factor in the range [-1, 1], scaled to ±12 semitones.
|
|
497
|
-
* @property octave - Octave transposition value (e.g. +1 for one octave up, -2 for two octaves down).
|
|
498
|
-
* @property lowGain - Whether to gain reduction (-18dB). When false, oscillator runs at full gain.
|
|
499
|
-
*/
|
|
500
|
-
type IOscillatorProps = {
|
|
501
|
-
wave: OscillatorWave;
|
|
502
|
-
frequency: number;
|
|
503
|
-
fine: number;
|
|
504
|
-
coarse: number;
|
|
505
|
-
octave: number;
|
|
506
|
-
lowGain: boolean;
|
|
507
|
-
};
|
|
508
|
-
declare class Oscillator extends PolyModule<ModuleType.Oscillator> {
|
|
509
|
-
constructor(engineId: string, params: IPolyModuleConstructor<ModuleType.Oscillator>);
|
|
510
|
-
start(time: ContextTime): void;
|
|
511
|
-
stop(time: ContextTime): void;
|
|
512
|
-
private registerInputs;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
621
|
type IScaleProps = {
|
|
516
622
|
min: number;
|
|
517
623
|
max: number;
|
|
518
624
|
current: number;
|
|
519
625
|
};
|
|
520
|
-
declare class Scale extends Module<ModuleType.Scale> {
|
|
626
|
+
declare class Scale extends Module<ModuleType.Scale> implements Pick<SetterHooks<IScaleProps>, "onAfterSetMin" | "onAfterSetMax" | "onAfterSetCurrent"> {
|
|
521
627
|
audioNode: AudioWorkletNode;
|
|
522
628
|
constructor(engineId: string, params: ICreateModule<ModuleType.Scale>);
|
|
523
629
|
get current(): AudioParam;
|
|
524
630
|
get min(): AudioParam;
|
|
525
631
|
get max(): AudioParam;
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
632
|
+
onAfterSetMin: SetterHooks<IScaleProps>["onAfterSetMin"];
|
|
633
|
+
onAfterSetMax: SetterHooks<IScaleProps>["onAfterSetMax"];
|
|
634
|
+
onAfterSetCurrent: SetterHooks<IScaleProps>["onAfterSetCurrent"];
|
|
529
635
|
}
|
|
530
636
|
|
|
531
637
|
type IStepSequencer = IModule<ModuleType.StepSequencer>;
|
|
@@ -545,6 +651,14 @@ declare class StepSequencer extends Module<ModuleType.StepSequencer> {
|
|
|
545
651
|
constructor(engineId: string, params: ICreateModule<ModuleType.StepSequencer>);
|
|
546
652
|
}
|
|
547
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
|
+
|
|
548
662
|
type IVirtualMidiProps = {
|
|
549
663
|
activeNotes: string[];
|
|
550
664
|
};
|
|
@@ -566,10 +680,11 @@ declare enum ModuleType {
|
|
|
566
680
|
MidiSelector = "MidiSelector",
|
|
567
681
|
Envelope = "Envelope",
|
|
568
682
|
Filter = "Filter",
|
|
569
|
-
BiquadFilter = "BiquadFilter",
|
|
570
683
|
Scale = "Scale",
|
|
684
|
+
StereoPanner = "StereoPanner",
|
|
571
685
|
Inspector = "Inspector",
|
|
572
686
|
Constant = "Constant",
|
|
687
|
+
MidiMapper = "MidiMapper",
|
|
573
688
|
VirtualMidi = "VirtualMidi",
|
|
574
689
|
StepSequencer = "StepSequencer",
|
|
575
690
|
VoiceScheduler = "VoiceScheduler"
|
|
@@ -581,10 +696,11 @@ type ModuleTypeToPropsMapping = {
|
|
|
581
696
|
[ModuleType.MidiSelector]: IMidiSelectorProps;
|
|
582
697
|
[ModuleType.Envelope]: IEnvelopeProps;
|
|
583
698
|
[ModuleType.Filter]: IFilterProps;
|
|
584
|
-
[ModuleType.BiquadFilter]: IBiquadFilterProps;
|
|
585
699
|
[ModuleType.Scale]: IScaleProps;
|
|
700
|
+
[ModuleType.StereoPanner]: IStereoPannerProps;
|
|
586
701
|
[ModuleType.Inspector]: IInspectorProps;
|
|
587
702
|
[ModuleType.Constant]: IConstantProps;
|
|
703
|
+
[ModuleType.MidiMapper]: IMidiMapperProps;
|
|
588
704
|
[ModuleType.VirtualMidi]: IVirtualMidiProps;
|
|
589
705
|
[ModuleType.StepSequencer]: IStepSequencerProps;
|
|
590
706
|
[ModuleType.VoiceScheduler]: IVoiceSchedulerProps;
|
|
@@ -596,16 +712,36 @@ type ModuleTypeToModuleMapping = {
|
|
|
596
712
|
[ModuleType.MidiSelector]: MidiSelector;
|
|
597
713
|
[ModuleType.Envelope]: Envelope;
|
|
598
714
|
[ModuleType.Filter]: Filter;
|
|
599
|
-
[ModuleType.BiquadFilter]: BiquadFilter;
|
|
600
715
|
[ModuleType.Scale]: Scale;
|
|
716
|
+
[ModuleType.StereoPanner]: StereoPanner;
|
|
601
717
|
[ModuleType.Inspector]: Inspector;
|
|
602
718
|
[ModuleType.Constant]: Constant;
|
|
719
|
+
[ModuleType.MidiMapper]: MidiMapper;
|
|
603
720
|
[ModuleType.VirtualMidi]: VirtualMidi;
|
|
604
721
|
[ModuleType.StepSequencer]: StepSequencer;
|
|
605
722
|
[ModuleType.VoiceScheduler]: VoiceScheduler;
|
|
606
723
|
};
|
|
607
724
|
declare const moduleSchemas: {
|
|
608
|
-
|
|
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>;
|
|
609
745
|
};
|
|
610
746
|
|
|
611
747
|
type AnyModule = Module<ModuleType>;
|
|
@@ -616,7 +752,7 @@ type ICreateModule<T extends ModuleType> = {
|
|
|
616
752
|
props: Partial<ModuleTypeToPropsMapping[T]>;
|
|
617
753
|
};
|
|
618
754
|
type ModuleParams = {
|
|
619
|
-
[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>;
|
|
620
756
|
}[ModuleType];
|
|
621
757
|
|
|
622
758
|
type IOProps = {
|
|
@@ -684,8 +820,8 @@ declare class Engine {
|
|
|
684
820
|
constructor(context: Context);
|
|
685
821
|
get state(): _blibliki_transport.TransportState;
|
|
686
822
|
initialize(): Promise<void>;
|
|
687
|
-
addModule<T extends ModuleType>(params: ICreateModule<T>): IModuleSerialize<ModuleType.Scale> | IPolyModuleSerialize<ModuleType.VoiceScheduler> | IPolyModuleSerialize<ModuleType.
|
|
688
|
-
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>;
|
|
689
825
|
removeModule(id: string): void;
|
|
690
826
|
addRoute(props: ICreateRoute): IRoute;
|
|
691
827
|
removeRoute(id: string): void;
|
|
@@ -702,11 +838,11 @@ declare class Engine {
|
|
|
702
838
|
findModule(id: string): ModuleTypeToModuleMapping[keyof ModuleTypeToModuleMapping];
|
|
703
839
|
findIO(moduleId: string, ioName: string, type: "input" | "output"): Base;
|
|
704
840
|
findMidiDevice(id: string): MidiDevice | ComputerKeyboardInput | undefined;
|
|
705
|
-
onPropsUpdate(callback: <T extends ModuleType>(params: IModule<T>) => void): void;
|
|
706
|
-
_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;
|
|
707
843
|
triggerVirtualMidi(id: string, noteName: string, type: "noteOn" | "noteOff"): void;
|
|
708
844
|
private onStart;
|
|
709
845
|
private onStop;
|
|
710
846
|
}
|
|
711
847
|
|
|
712
|
-
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 };
|