@blibliki/engine 0.1.7 → 0.1.9

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/build/Engine.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import MidiDeviceManager from "./MidiDeviceManager";
2
+ import { EType } from "./MidiEvent";
2
3
  import { AudioModule } from "./Module";
3
4
  import { RouteInterface, RouteProps } from "./routes";
4
5
  declare type LatencyHint = "interactive" | "playback" | "balanced";
@@ -41,6 +42,7 @@ declare class Engine {
41
42
  inputs: import(".").IOProps[];
42
43
  outputs: import(".").IOProps[];
43
44
  };
45
+ unregisterModule(id: string): string[];
44
46
  updateNameModule(id: string, name: string): {
45
47
  id: string;
46
48
  name: string;
@@ -75,10 +77,11 @@ declare class Engine {
75
77
  inputs: import(".").IOProps[];
76
78
  outputs: import(".").IOProps[];
77
79
  };
78
- triggerVirtualMidi(id: string, noteName: string, type: string): void;
80
+ triggerVirtualMidi(id: string, noteName: string, type: EType): void;
79
81
  dispose(): void;
80
82
  findById(id: string): AudioModule;
81
83
  private applyRoutesRequired;
84
+ private moduleRouteIds;
82
85
  }
83
86
  declare const _default: Engine;
84
87
  export default _default;
package/build/Engine.js CHANGED
@@ -39,6 +39,14 @@ class Engine {
39
39
  applyRoutes(Object.values(this.routes));
40
40
  return audioModule.serialize();
41
41
  }
42
+ unregisterModule(id) {
43
+ this.modules[id].dispose();
44
+ const moduleRouteIds = this.moduleRouteIds(id);
45
+ moduleRouteIds.forEach((routeId) => delete this.routes[routeId]);
46
+ applyRoutes(Object.values(this.routes));
47
+ delete this.modules[id];
48
+ return moduleRouteIds;
49
+ }
42
50
  updateNameModule(id, name) {
43
51
  const audioModule = this.findById(id);
44
52
  audioModule.name = name;
@@ -102,6 +110,14 @@ class Engine {
102
110
  return false;
103
111
  return props.polyNumber !== audioModule.polyNumber;
104
112
  }
113
+ moduleRouteIds(id) {
114
+ const cloneRoutes = { ...this.routes };
115
+ const routeIds = Object.keys(cloneRoutes).filter((routeId) => {
116
+ const { sourceId, destinationId } = cloneRoutes[routeId];
117
+ return sourceId === id || destinationId === id;
118
+ });
119
+ return routeIds;
120
+ }
105
121
  }
106
122
  export default Engine.getInstance();
107
123
  //# sourceMappingURL=Engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAe,YAAY,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,WAAW,EAA8B,MAAM,UAAU,CAAC;AAahF,MAAM,MAAM;IACV,iBAAiB,CAAoB;IAC7B,MAAM,CAAC,QAAQ,CAAS;IACxB,OAAO,CAAS;IAChB,OAAO,CAAU;IACjB,oBAAoB,CAAuC;IAEnE,OAAO,CAEL;IAEF,MAAM,CAEJ;IAEF;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;IACjC,CAAC;IAEM,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACpB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;SAChC;QAED,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,KAA0B;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAEjD,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,IAAY,EAAE,QAAa,EAAE;QACxD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;QAE3C,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAExC,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,gBAAgB,CAAC,EAAU,EAAE,IAAY;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;QAExB,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,aAAa,CAAC,QAA0C;QACtD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,mBAAmB,CAAC,EAAU,EAAE,KAAU;QACxC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,iBAAiB,CAAC,EAAU,EAAE,KAAU;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEtC,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACzE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,IAAI,mBAAmB;YAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEjE,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,KAAiB;QACxB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAExD,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAExB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM;QACR,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAElD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAW,CAAC;QAEtD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,kBAAkB,CAAC,EAAU,EAAE,QAAgB,EAAE,IAAY;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAgB,CAAC;QAErD,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,YAAY,MAAM;gBAAE,OAAO;YAEhC,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,WAAW;YAAE,MAAM,KAAK,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC;QAEvE,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,mBAAmB,CAAC,WAAwB,EAAE,KAAU;QAC9D,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,CAAC,CAAC,WAAW,YAAY,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3D,OAAO,KAAK,CAAC,UAAU,KAAK,WAAW,CAAC,UAAU,CAAC;IACrD,CAAC;CACF;AAED,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,14 @@
1
- import Note from "./Note";
1
+ import Note, { INote } from "./Note";
2
+ export declare type EType = "noteOn" | "noteOff";
2
3
  export default class MidiEvent {
3
4
  note?: Note;
4
5
  readonly triggeredAt: number;
5
- _type: string;
6
+ _type: EType;
6
7
  private data;
7
8
  private event;
8
- static fromNote(noteName: string, type: string): MidiEvent;
9
- constructor(event: MIDIMessageEvent);
10
- get type(): string;
9
+ static fromNote(noteName: string | Note | INote, type: EType, triggeredAt?: number): MidiEvent;
10
+ constructor(event: MIDIMessageEvent, triggeredAt?: number);
11
+ get type(): EType;
11
12
  get isNote(): boolean;
12
13
  defineNote(): void;
13
14
  }
@@ -10,15 +10,20 @@ export default class MidiEvent {
10
10
  _type;
11
11
  data;
12
12
  event;
13
- static fromNote(noteName, type) {
14
- const event = new MidiEvent(new MIDIMessageEvent("", { data: new Uint8Array([0, 0, 0]) }));
15
- event.note = new Note(noteName);
13
+ static fromNote(noteName, type, triggeredAt) {
14
+ const event = new MidiEvent(new MIDIMessageEvent("", { data: new Uint8Array([0, 0, 0]) }), triggeredAt);
15
+ if (noteName instanceof Note) {
16
+ event.note = noteName;
17
+ }
18
+ else {
19
+ event.note = new Note(noteName);
20
+ }
16
21
  event._type = type;
17
22
  return event;
18
23
  }
19
- constructor(event) {
24
+ constructor(event, triggeredAt) {
20
25
  this.event = event;
21
- this.triggeredAt = now();
26
+ this.triggeredAt = triggeredAt || now();
22
27
  this.data = event.data;
23
28
  this.defineNote();
24
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MidiEvent.js","sourceRoot":"","sources":["../src/MidiEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,SAAS,GAA8B;IAC3C,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,QAAQ;CACZ,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,IAAI,CAAQ;IACH,WAAW,CAAS;IAC7B,KAAK,CAAS;IACN,IAAI,CAAa;IACjB,KAAK,CAAmB;IAEhC,MAAM,CAAC,QAAQ,CAAC,QAAgB,EAAE,IAAY;QAC5C,MAAM,KAAK,GAAG,IAAI,SAAS,CACzB,IAAI,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9D,CAAC;QACF,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAEnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY,KAAuB;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,IAAI;QACN,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAElC,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAExC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YAC3C,IAAI,GAAG,SAAS,CAAC;SAClB;QAED,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IAC3D,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CACF"}
1
+ {"version":3,"file":"MidiEvent.js","sourceRoot":"","sources":["../src/MidiEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,IAAe,MAAM,QAAQ,CAAC;AAErC,MAAM,SAAS,GAA6B;IAC1C,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,QAAQ;CACZ,CAAC;AAIF,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,IAAI,CAAQ;IACH,WAAW,CAAS;IAC7B,KAAK,CAAQ;IACL,IAAI,CAAa;IACjB,KAAK,CAAmB;IAEhC,MAAM,CAAC,QAAQ,CACb,QAA+B,EAC/B,IAAW,EACX,WAAoB;QAEpB,MAAM,KAAK,GAAG,IAAI,SAAS,CACzB,IAAI,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC7D,WAAW,CACZ,CAAC;QAEF,IAAI,QAAQ,YAAY,IAAI,EAAE;YAC5B,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;SACvB;aAAM;YACL,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;SACjC;QACD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAEnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY,KAAuB,EAAE,WAAoB;QACvD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,IAAI;QACN,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAElC,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAExC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YAC3C,IAAI,GAAG,SAAS,CAAC;SAClB;QAED,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IAC3D,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -10,6 +10,7 @@ export interface Connectable {
10
10
  export interface Triggerable {
11
11
  triggerAttack: Function;
12
12
  triggerRelease: Function;
13
+ triggerAttackRelease: Function;
13
14
  }
14
15
  export interface Voicable {
15
16
  voiceNo?: number;
@@ -44,9 +45,10 @@ declare class Module<InternalModule extends Connectable, PropsInterface> impleme
44
45
  connect: (inputAudioModule: AudioModule, attribute?: string) => void;
45
46
  disconnect: (inputAudioModule: AudioModule, attribute?: string) => void;
46
47
  dispose(): void;
47
- triggerAttack(midiEvent: MidiEvent): void;
48
+ triggerAttack(midiEvent: MidiEvent, duration?: number): void;
48
49
  triggerRelease(midiEvent: MidiEvent): void;
49
- midiTriggered: (midiEvent: MidiEvent) => void;
50
+ triggerAttackRelease(midiEvent: MidiEvent): void;
51
+ midiTriggered: (midiEvent: MidiEvent, duration?: number) => void;
50
52
  serialize(): {
51
53
  id: string;
52
54
  name: string;
@@ -67,16 +67,19 @@ class Module {
67
67
  dispose() {
68
68
  this.internalModule.dispose();
69
69
  }
70
- triggerAttack(midiEvent) {
70
+ triggerAttack(midiEvent, duration) {
71
71
  throw Error("triggerAttack not implemented");
72
72
  }
73
73
  triggerRelease(midiEvent) {
74
74
  throw Error("triggerRelease not implemented");
75
75
  }
76
- midiTriggered = (midiEvent) => {
76
+ triggerAttackRelease(midiEvent) {
77
+ throw Error("triggerAttackRelease not implemented");
78
+ }
79
+ midiTriggered = (midiEvent, duration) => {
77
80
  switch (midiEvent.type) {
78
81
  case "noteOn":
79
- this.triggerAttack(midiEvent);
82
+ this.triggerAttack(midiEvent, duration);
80
83
  break;
81
84
  case "noteOff":
82
85
  this.triggerRelease(midiEvent);
@@ -1 +1 @@
1
- {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/Module/Base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/Module/Base.ts"],"names":[],"mappings":"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"}
@@ -60,7 +60,12 @@ export default class EnvelopeModule extends Module {
60
60
  const { note, triggeredAt } = midiEvent;
61
61
  this.activeNote = note?.fullName;
62
62
  this.triggeredAt = triggeredAt;
63
- this.internalModule.triggerAttack(triggeredAt);
63
+ if (note?.duration) {
64
+ this.internalModule.triggerAttackRelease(note.duration, triggeredAt);
65
+ }
66
+ else {
67
+ this.internalModule.triggerAttack(triggeredAt);
68
+ }
64
69
  }
65
70
  triggerRelease(midiEvent) {
66
71
  const { note, triggeredAt } = midiEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../../src/Module/Envelope/Base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../../src/Module/Envelope/Base.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Filter as InternalFilter } from "tone";
1
+ import { Filter as InternalFilter, FilterRollOff } from "tone";
2
2
  import { FreqEnvelope, MonoFreqEnvelope } from "./Envelope";
3
3
  import Module, { Voicable } from "./Base";
4
4
  import PolyModule from "./PolyModule";
@@ -6,6 +6,7 @@ interface FilterInterface extends Voicable {
6
6
  cutoff: number;
7
7
  filterType: BiquadFilterType;
8
8
  resonance: number;
9
+ slope: FilterRollOff;
9
10
  envelopeAmount: number;
10
11
  voiceNo?: number;
11
12
  }
@@ -16,6 +17,10 @@ declare class MonoFilter extends Module<InternalFilter, FilterInterface> {
16
17
  constructor(name: string, props: FilterProps);
17
18
  get cutoff(): number;
18
19
  set cutoff(value: number);
20
+ get filterType(): BiquadFilterType;
21
+ set filterType(value: BiquadFilterType);
22
+ get slope(): FilterRollOff;
23
+ set slope(value: FilterRollOff);
19
24
  get frequency(): import("tone").Signal<"frequency">;
20
25
  get resonance(): number;
21
26
  set resonance(value: number);
@@ -5,6 +5,7 @@ const InitialProps = {
5
5
  cutoff: 20000,
6
6
  resonance: 0,
7
7
  envelopeAmount: 0,
8
+ slope: -24,
8
9
  filterType: "lowpass",
9
10
  };
10
11
  class MonoFilter extends Module {
@@ -27,6 +28,20 @@ class MonoFilter extends Module {
27
28
  this.internalModule.frequency.value = value;
28
29
  }
29
30
  }
31
+ get filterType() {
32
+ return this._props["filterType"];
33
+ }
34
+ set filterType(value) {
35
+ this._props = { ...this.props, filterType: value };
36
+ this.internalModule.type = value;
37
+ }
38
+ get slope() {
39
+ return this._props["slope"];
40
+ }
41
+ set slope(value) {
42
+ this._props = { ...this.props, slope: value };
43
+ this.internalModule.rolloff = value;
44
+ }
30
45
  get frequency() {
31
46
  return this.internalModule.frequency;
32
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Filter.js","sourceRoot":"","sources":["../../src/Module/Filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Filter.js","sourceRoot":"","sources":["../../src/Module/Filter.ts"],"names":[],"mappings":"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"}
@@ -20,11 +20,11 @@ class IO {
20
20
  Object.assign(this, props);
21
21
  }
22
22
  plug(io) {
23
+ this.connections.push(io);
23
24
  if (this.onPlug)
24
25
  this.onPlug(io);
25
26
  if (this.ioType === IOType.Output)
26
27
  io.plug(this);
27
- this.connections.push(io);
28
28
  }
29
29
  unPlug(io) {
30
30
  if (this.onUnPlug)
@@ -1 +1 @@
1
- {"version":3,"file":"IO.js","sourceRoot":"","sources":["../../src/Module/IO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAiBpC,IAAK,MAGJ;AAHD,WAAK,MAAM;IACT,yBAAe,CAAA;IACf,2BAAiB,CAAA;AACnB,CAAC,EAHI,MAAM,KAAN,MAAM,QAGV;AAED,MAAe,EAAE;IACf,EAAE,CAAS;IACX,MAAM,CAAS;IACf,IAAI,CAAS;IACb,WAAW,CAAc;IACzB,SAAS,CAAM;IACf,MAAM,CAAmB;IACzB,QAAQ,CAAmB;IAC3B,WAAW,GAAuB,EAAE,CAAC;IAErC,YAAY,MAAc,EAAE,WAAwB,EAAE,KAAkB;QACtE,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,EAAM;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,EAAM;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;YACjC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACxC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CACxC,CAAC;IACJ,CAAC;IAED,SAAS;QACP,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,SAAS;QACP,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;SAClC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,KAAM,SAAQ,EAAE;IAC3B,YAAY,WAAwB,EAAE,KAAkB;QACtD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,MAAO,SAAQ,EAAE;IAC5B,YAAY,WAAwB,EAAE,KAAkB;QACtD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"IO.js","sourceRoot":"","sources":["../../src/Module/IO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAiBpC,IAAK,MAGJ;AAHD,WAAK,MAAM;IACT,yBAAe,CAAA;IACf,2BAAiB,CAAA;AACnB,CAAC,EAHI,MAAM,KAAN,MAAM,QAGV;AAED,MAAe,EAAE;IACf,EAAE,CAAS;IACX,MAAM,CAAS;IACf,IAAI,CAAS;IACb,WAAW,CAAc;IACzB,SAAS,CAAM;IACf,MAAM,CAAmB;IACzB,QAAQ,CAAmB;IAC3B,WAAW,GAAuB,EAAE,CAAC;IAErC,YAAY,MAAc,EAAE,WAAwB,EAAE,KAAkB;QACtE,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,EAAM;QACT,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,EAAM;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;YACjC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACxC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CACxC,CAAC;IACJ,CAAC;IAED,SAAS;QACP,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,SAAS;QACP,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;SAClC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,KAAM,SAAQ,EAAE;IAC3B,YAAY,WAAwB,EAAE,KAAkB;QACtD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,MAAO,SAAQ,EAAE;IAC5B,YAAY,WAAwB,EAAE,KAAkB;QACtD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import Module, { DummnyInternalModule } from "./Base";
2
+ import { INote } from "../Note";
3
+ import { Output } from "./IO";
4
+ interface ISequencer {
5
+ notes: INote[];
6
+ }
7
+ export default class Sequencer extends Module<DummnyInternalModule, ISequencer> {
8
+ static moduleName: string;
9
+ midiOutput: Output;
10
+ private _part;
11
+ constructor(name: string, props: Partial<ISequencer>);
12
+ get notes(): INote[];
13
+ set notes(value: INote[]);
14
+ start(): void;
15
+ stop(): void;
16
+ private registerOutputs;
17
+ private get part();
18
+ private updateNotesToPart;
19
+ private get loopEnd();
20
+ private onEvent;
21
+ }
22
+ export {};
@@ -0,0 +1,61 @@
1
+ import { Part } from "tone";
2
+ import Module, { DummnyInternalModule } from "./Base";
3
+ import MidiEvent from "../MidiEvent";
4
+ const InitialProps = {
5
+ notes: [],
6
+ };
7
+ export default class Sequencer extends Module {
8
+ static moduleName = "Sequencer";
9
+ midiOutput;
10
+ _part;
11
+ constructor(name, props) {
12
+ super(new DummnyInternalModule(), {
13
+ name,
14
+ props: { ...InitialProps, ...props },
15
+ });
16
+ this.registerOutputs();
17
+ this.start();
18
+ }
19
+ get notes() {
20
+ return this._props["notes"];
21
+ }
22
+ set notes(value) {
23
+ const notes = value;
24
+ this._props = { ...this.props, notes };
25
+ this.updateNotesToPart();
26
+ }
27
+ start() {
28
+ this.part.start();
29
+ }
30
+ stop() {
31
+ this.part.stop();
32
+ }
33
+ registerOutputs() {
34
+ this.midiOutput = this.registerOutput({ name: "midi out" });
35
+ }
36
+ get part() {
37
+ if (this._part)
38
+ return this._part;
39
+ this._part = new Part(this.onEvent, this.notes);
40
+ this._part.loop = true;
41
+ this._part.loopEnd = this.loopEnd;
42
+ return this._part;
43
+ }
44
+ updateNotesToPart() {
45
+ this.part.clear();
46
+ this.notes.forEach((note) => {
47
+ this.part.add(note.time, note);
48
+ });
49
+ }
50
+ get loopEnd() {
51
+ const end = Math.max(...this.notes.map((note) => parseInt(note.time.split(":")[0], 10))) + 1;
52
+ return `${end}:0:0`;
53
+ }
54
+ onEvent = (time, note) => {
55
+ const event = MidiEvent.fromNote(note, "noteOn", time);
56
+ this.midiOutput.connections.forEach((input) => {
57
+ input.pluggable(event);
58
+ });
59
+ };
60
+ }
61
+ //# sourceMappingURL=Sequencer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sequencer.js","sourceRoot":"","sources":["../../src/Module/Sequencer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,MAAM,EAAE,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAGtD,OAAO,SAAS,MAAM,cAAc,CAAC;AAMrC,MAAM,YAAY,GAAe;IAC/B,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,MAGtC;IACC,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC;IAChC,UAAU,CAAS;IACX,KAAK,CAAO;IAEpB,YAAY,IAAY,EAAE,KAA0B;QAClD,KAAK,CAAC,IAAI,oBAAoB,EAAE,EAAE;YAChC,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK,CAAC,KAAc;QACtB,MAAM,KAAK,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,IAAY,IAAI;QACd,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAElC,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAElC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAElB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAY,OAAO;QACjB,MAAM,GAAG,GACP,IAAI,CAAC,GAAG,CACN,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACnE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,GAAG,MAAM,CAAC;IACtB,CAAC;IAEO,OAAO,GAAG,CAAC,IAAY,EAAE,IAAW,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5C,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC"}
@@ -11,6 +11,7 @@ import Reverb from "./Reverb";
11
11
  import Delay from "./Delay";
12
12
  import Distortion from "./Distortion";
13
13
  import BitCrusher from "./BitCrusher";
14
+ import Sequencer from "./Sequencer";
14
15
  export { default } from "./Base";
15
16
  export { default as PolyModule } from "./PolyModule";
16
17
  export { default as Filter } from "./Filter";
@@ -51,6 +52,8 @@ function moduleClassFromType(type) {
51
52
  return Distortion;
52
53
  case BitCrusher.moduleName:
53
54
  return BitCrusher;
55
+ case Sequencer.moduleName:
56
+ return Sequencer;
54
57
  default:
55
58
  throw Error(`Unknown module type ${type}`);
56
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Module/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAG/C,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AAMpB,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,IAAY,EACZ,KAAU;IAEV,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAExC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnC,QAAQ,IAAI,EAAE;QACZ,KAAK,UAAU,CAAC,UAAU;YACxB,OAAO,UAAU,CAAC;QACpB,KAAK,QAAQ,CAAC,UAAU;YACtB,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,WAAW,CAAC;QACrB,KAAK,YAAY,CAAC,UAAU;YAC1B,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM,CAAC,UAAU;YACpB,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC,UAAU;YACpB,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC,UAAU;YACpB,OAAO,MAAM,CAAC;QAChB,KAAK,cAAc,CAAC,UAAU;YAC5B,OAAO,cAAc,CAAC;QACxB,KAAK,YAAY,CAAC,UAAU;YAC1B,OAAO,YAAY,CAAC;QACtB,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM,CAAC,UAAU;YACpB,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK,CAAC,UAAU;YACnB,OAAO,KAAK,CAAC;QACf,KAAK,UAAU,CAAC,UAAU;YACxB,OAAO,UAAU,CAAC;QACpB,KAAK,UAAU,CAAC,UAAU;YACxB,OAAO,UAAU,CAAC;QACpB;YACE,MAAM,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;KAC9C;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Module/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAG/C,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AAMpB,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,IAAY,EACZ,KAAU;IAEV,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAExC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnC,QAAQ,IAAI,EAAE;QACZ,KAAK,UAAU,CAAC,UAAU;YACxB,OAAO,UAAU,CAAC;QACpB,KAAK,QAAQ,CAAC,UAAU;YACtB,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,WAAW,CAAC;QACrB,KAAK,YAAY,CAAC,UAAU;YAC1B,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM,CAAC,UAAU;YACpB,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC,UAAU;YACpB,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC,UAAU;YACpB,OAAO,MAAM,CAAC;QAChB,KAAK,cAAc,CAAC,UAAU;YAC5B,OAAO,cAAc,CAAC;QACxB,KAAK,YAAY,CAAC,UAAU;YAC1B,OAAO,YAAY,CAAC;QACtB,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM,CAAC,UAAU;YACpB,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK,CAAC,UAAU;YACnB,OAAO,KAAK,CAAC;QACf,KAAK,UAAU,CAAC,UAAU;YACxB,OAAO,UAAU,CAAC;QACpB,KAAK,UAAU,CAAC,UAAU;YACxB,OAAO,UAAU,CAAC;QACpB,KAAK,SAAS,CAAC,UAAU;YACvB,OAAO,SAAS,CAAC;QACnB;YACE,MAAM,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;KAC9C;AACH,CAAC"}
@@ -1,13 +1,25 @@
1
+ import { TimeClass } from "tone";
2
+ export interface INote {
3
+ note: string;
4
+ time: string;
5
+ velocity?: number;
6
+ duration?: string;
7
+ }
1
8
  export default class Note {
2
9
  static _notes: Note[];
3
10
  name: string;
4
11
  octave: number;
5
- constructor(eventOrString: MIDIMessageEvent | string);
12
+ time: TimeClass;
13
+ velocity?: number;
14
+ duration?: string;
15
+ constructor(eventOrString: INote | MIDIMessageEvent | string, duration?: string);
6
16
  static notes(octave?: number): Note[];
7
17
  get isSemi(): boolean;
8
18
  get fullName(): string;
9
19
  frequency(range?: number, coarse?: number): number;
10
20
  valueOf(): string;
21
+ serialize(): INote;
11
22
  private fromString;
12
23
  private fromEvent;
24
+ private fromProps;
13
25
  }
@@ -1,3 +1,4 @@
1
+ import { Time } from "tone";
1
2
  import frequencyTable from "./frequencyTable";
2
3
  const Notes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
3
4
  const NotesLength = Notes.length;
@@ -5,13 +6,20 @@ export default class Note {
5
6
  static _notes;
6
7
  name;
7
8
  octave;
8
- constructor(eventOrString) {
9
+ time = Time("0:0:0");
10
+ velocity = 1;
11
+ duration;
12
+ constructor(eventOrString, duration) {
13
+ this.duration = duration;
9
14
  if (typeof eventOrString === "string") {
10
15
  this.fromString(eventOrString);
11
16
  }
12
- else {
17
+ else if (eventOrString instanceof MIDIMessageEvent) {
13
18
  this.fromEvent(eventOrString);
14
19
  }
20
+ else {
21
+ this.fromProps(eventOrString);
22
+ }
15
23
  }
16
24
  static notes(octave = 3) {
17
25
  return Notes.map((note) => new Note(`${note}${octave}`));
@@ -40,6 +48,14 @@ export default class Note {
40
48
  valueOf() {
41
49
  return this.fullName;
42
50
  }
51
+ serialize() {
52
+ return {
53
+ time: this.time.toBarsBeatsSixteenths(),
54
+ note: this.fullName,
55
+ duration: this.duration,
56
+ velocity: 1,
57
+ };
58
+ }
43
59
  fromString(string) {
44
60
  const matches = string.match(/(\w#?)(\d)?/) || [];
45
61
  this.name = matches[1];
@@ -49,5 +65,12 @@ export default class Note {
49
65
  this.name = Notes[event.data[1] % 12];
50
66
  this.octave = Math.floor(event.data[1] / 12) - 2;
51
67
  }
68
+ fromProps(props) {
69
+ const { note, time, duration, velocity } = props;
70
+ this.fromString(note);
71
+ this.time = Time(time);
72
+ this.duration = duration;
73
+ this.velocity = velocity;
74
+ }
52
75
  }
53
76
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Note/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAEhF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,IAAI;IACvB,MAAM,CAAC,MAAM,CAAS;IACtB,IAAI,CAAS;IACb,MAAM,CAAS;IAEf,YAAY,aAAwC;QAClD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;YACrC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;SAC/B;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAAiB,CAAC;QAC7B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;IACrC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC;IAED,SAAS,CAAC,QAAgB,CAAC,EAAE,SAAiB,CAAC;QAC7C,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpC,IAAI,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QACpD,IAAI,SAAS,GAAG,WAAW,CAAC;QAE5B,IAAI,WAAW,IAAI,WAAW,EAAE;YAC9B,SAAS,EAAE,CAAC;YACZ,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;SACvC;aAAM,IAAI,WAAW,GAAG,CAAC,EAAE;YAC1B,SAAS,EAAE,CAAC;YACZ,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;SACrC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAEjC,OAAO,cAAc,CAAC,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEO,UAAU,CAAC,MAAc;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAElD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAEO,SAAS,CAAC,KAAuB;QACvC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Note/index.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { default } from "./Engine";
2
2
  export { default as MidiDevice } from "./MidiDevice";
3
3
  export { default as MidiDeviceManager } from "./MidiDeviceManager";
4
4
  export { default as Note } from "./Note";
5
+ export type { INote } from "./Note";
5
6
  export type { MidiDeviceInterface } from "./MidiDevice";
6
7
  export type { ModuleInterface, AudioModule } from "./Module";
7
8
  export type { SerializeInterface as IOProps } from "./Module/IO";
package/jest.config.js ADDED
@@ -0,0 +1,19 @@
1
+ /** @type {import('ts-jest').JestConfigWithTsJest} */
2
+ module.exports = {
3
+ preset: "ts-jest",
4
+ testEnvironment: "node",
5
+ rootDir: "test",
6
+ moduleNameMapper: {
7
+ "^src/(.*)$": "<rootDir>/../src/$1",
8
+ },
9
+ transform: {
10
+ // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest`
11
+ // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest`
12
+ "^.+\\.tsx?$": [
13
+ "ts-jest",
14
+ {
15
+ diagnostics: false,
16
+ },
17
+ ],
18
+ },
19
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blibliki/engine",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "dependencies": {
@@ -29,10 +29,13 @@
29
29
  ]
30
30
  },
31
31
  "devDependencies": {
32
+ "@types/jest": "^29.2.0",
32
33
  "@types/node": "^16.7.13",
33
34
  "@types/uuid": "^8.3.4",
34
35
  "eslint": "^8.18.0",
36
+ "jest": "^29.2.2",
35
37
  "prettier": "^2.7.1",
38
+ "ts-jest": "^29.0.3",
36
39
  "typescript": "^4.7.4",
37
40
  "typescript-language-server": "^0.11.1"
38
41
  }
package/src/Engine.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Context, setContext } from "tone";
2
2
  import MidiDeviceManager from "./MidiDeviceManager";
3
- import MidiEvent from "./MidiEvent";
3
+ import MidiEvent, { EType } from "./MidiEvent";
4
4
 
5
5
  import { AudioModule, createModule } from "./Module";
6
6
  import Master from "./Module/Master";
@@ -68,6 +68,17 @@ class Engine {
68
68
  return audioModule.serialize();
69
69
  }
70
70
 
71
+ unregisterModule(id: string) {
72
+ this.modules[id].dispose();
73
+ const moduleRouteIds = this.moduleRouteIds(id);
74
+
75
+ moduleRouteIds.forEach((routeId) => delete this.routes[routeId]);
76
+ applyRoutes(Object.values(this.routes));
77
+ delete this.modules[id];
78
+
79
+ return moduleRouteIds;
80
+ }
81
+
71
82
  updateNameModule(id: string, name: string) {
72
83
  const audioModule = this.findById(id);
73
84
  audioModule.name = name;
@@ -117,7 +128,7 @@ class Engine {
117
128
  return masterProps;
118
129
  }
119
130
 
120
- triggerVirtualMidi(id: string, noteName: string, type: string) {
131
+ triggerVirtualMidi(id: string, noteName: string, type: EType) {
121
132
  const virtualMidi = this.findById(id) as VirtualMidi;
122
133
 
123
134
  virtualMidi.sendMidi(MidiEvent.fromNote(noteName, type));
@@ -148,6 +159,18 @@ class Engine {
148
159
 
149
160
  return props.polyNumber !== audioModule.polyNumber;
150
161
  }
162
+
163
+ private moduleRouteIds(id: string) {
164
+ const cloneRoutes = { ...this.routes };
165
+
166
+ const routeIds = Object.keys(cloneRoutes).filter((routeId) => {
167
+ const { sourceId, destinationId } = cloneRoutes[routeId];
168
+
169
+ return sourceId === id || destinationId === id;
170
+ });
171
+
172
+ return routeIds;
173
+ }
151
174
  }
152
175
 
153
176
  export default Engine.getInstance();
package/src/MidiEvent.ts CHANGED
@@ -1,31 +1,43 @@
1
1
  import { now } from "tone";
2
- import Note from "./Note";
2
+ import Note, { INote } from "./Note";
3
3
 
4
- const EventType: { [key: number]: string } = {
4
+ const EventType: { [key: number]: EType } = {
5
5
  8: "noteOff",
6
6
  9: "noteOn",
7
7
  };
8
8
 
9
+ export type EType = "noteOn" | "noteOff";
10
+
9
11
  export default class MidiEvent {
10
12
  note?: Note;
11
13
  readonly triggeredAt: number;
12
- _type: string;
14
+ _type: EType;
13
15
  private data: Uint8Array;
14
16
  private event: MIDIMessageEvent;
15
17
 
16
- static fromNote(noteName: string, type: string) {
18
+ static fromNote(
19
+ noteName: string | Note | INote,
20
+ type: EType,
21
+ triggeredAt?: number
22
+ ) {
17
23
  const event = new MidiEvent(
18
- new MIDIMessageEvent("", { data: new Uint8Array([0, 0, 0]) })
24
+ new MIDIMessageEvent("", { data: new Uint8Array([0, 0, 0]) }),
25
+ triggeredAt
19
26
  );
20
- event.note = new Note(noteName);
27
+
28
+ if (noteName instanceof Note) {
29
+ event.note = noteName;
30
+ } else {
31
+ event.note = new Note(noteName);
32
+ }
21
33
  event._type = type;
22
34
 
23
35
  return event;
24
36
  }
25
37
 
26
- constructor(event: MIDIMessageEvent) {
38
+ constructor(event: MIDIMessageEvent, triggeredAt?: number) {
27
39
  this.event = event;
28
- this.triggeredAt = now();
40
+ this.triggeredAt = triggeredAt || now();
29
41
  this.data = event.data;
30
42
  this.defineNote();
31
43
  }
@@ -14,6 +14,7 @@ export interface Connectable {
14
14
  export interface Triggerable {
15
15
  triggerAttack: Function;
16
16
  triggerRelease: Function;
17
+ triggerAttackRelease: Function;
17
18
  }
18
19
 
19
20
  export interface Voicable {
@@ -121,7 +122,7 @@ class Module<InternalModule extends Connectable, PropsInterface>
121
122
  this.internalModule.dispose();
122
123
  }
123
124
 
124
- triggerAttack(midiEvent: MidiEvent) {
125
+ triggerAttack(midiEvent: MidiEvent, duration?: number) {
125
126
  throw Error("triggerAttack not implemented");
126
127
  }
127
128
 
@@ -129,10 +130,14 @@ class Module<InternalModule extends Connectable, PropsInterface>
129
130
  throw Error("triggerRelease not implemented");
130
131
  }
131
132
 
132
- midiTriggered = (midiEvent: MidiEvent) => {
133
+ triggerAttackRelease(midiEvent: MidiEvent) {
134
+ throw Error("triggerAttackRelease not implemented");
135
+ }
136
+
137
+ midiTriggered = (midiEvent: MidiEvent, duration?: number) => {
133
138
  switch (midiEvent.type) {
134
139
  case "noteOn":
135
- this.triggerAttack(midiEvent);
140
+ this.triggerAttack(midiEvent, duration);
136
141
  break;
137
142
  case "noteOff":
138
143
  this.triggerRelease(midiEvent);
@@ -93,7 +93,12 @@ export default abstract class EnvelopeModule<EnvelopeLike extends Env>
93
93
 
94
94
  this.activeNote = note?.fullName;
95
95
  this.triggeredAt = triggeredAt;
96
- this.internalModule.triggerAttack(triggeredAt);
96
+
97
+ if (note?.duration) {
98
+ this.internalModule.triggerAttackRelease(note.duration, triggeredAt);
99
+ } else {
100
+ this.internalModule.triggerAttack(triggeredAt);
101
+ }
97
102
  }
98
103
 
99
104
  triggerRelease(midiEvent: MidiEvent) {
@@ -1,4 +1,4 @@
1
- import { Filter as InternalFilter } from "tone";
1
+ import { Filter as InternalFilter, FilterRollOff } from "tone";
2
2
 
3
3
  import { FreqEnvelope, MonoFreqEnvelope } from "./Envelope";
4
4
  import Module, { Voicable } from "./Base";
@@ -8,6 +8,7 @@ interface FilterInterface extends Voicable {
8
8
  cutoff: number;
9
9
  filterType: BiquadFilterType;
10
10
  resonance: number;
11
+ slope: FilterRollOff;
11
12
  envelopeAmount: number;
12
13
  voiceNo?: number;
13
14
  }
@@ -18,6 +19,7 @@ const InitialProps: FilterInterface = {
18
19
  cutoff: 20000,
19
20
  resonance: 0,
20
21
  envelopeAmount: 0,
22
+ slope: -24,
21
23
  filterType: "lowpass",
22
24
  };
23
25
 
@@ -45,6 +47,24 @@ class MonoFilter extends Module<InternalFilter, FilterInterface> {
45
47
  }
46
48
  }
47
49
 
50
+ get filterType() {
51
+ return this._props["filterType"];
52
+ }
53
+
54
+ set filterType(value: BiquadFilterType) {
55
+ this._props = { ...this.props, filterType: value };
56
+ this.internalModule.type = value;
57
+ }
58
+
59
+ get slope() {
60
+ return this._props["slope"];
61
+ }
62
+
63
+ set slope(value: FilterRollOff) {
64
+ this._props = { ...this.props, slope: value };
65
+ this.internalModule.rolloff = value;
66
+ }
67
+
48
68
  get frequency() {
49
69
  return this.internalModule.frequency;
50
70
  }
package/src/Module/IO.ts CHANGED
@@ -39,11 +39,11 @@ abstract class IO {
39
39
  }
40
40
 
41
41
  plug(io: IO) {
42
+ this.connections.push(io);
43
+
42
44
  if (this.onPlug) this.onPlug(io);
43
45
 
44
46
  if (this.ioType === IOType.Output) io.plug(this);
45
-
46
- this.connections.push(io);
47
47
  }
48
48
 
49
49
  unPlug(io: IO) {
@@ -0,0 +1,89 @@
1
+ import { Part } from "tone";
2
+ import Module, { DummnyInternalModule } from "./Base";
3
+ import Note, { INote } from "../Note";
4
+ import { Output } from "./IO";
5
+ import MidiEvent from "../MidiEvent";
6
+
7
+ interface ISequencer {
8
+ notes: INote[];
9
+ }
10
+
11
+ const InitialProps: ISequencer = {
12
+ notes: [],
13
+ };
14
+
15
+ export default class Sequencer extends Module<
16
+ DummnyInternalModule,
17
+ ISequencer
18
+ > {
19
+ static moduleName = "Sequencer";
20
+ midiOutput: Output;
21
+ private _part: Part;
22
+
23
+ constructor(name: string, props: Partial<ISequencer>) {
24
+ super(new DummnyInternalModule(), {
25
+ name,
26
+ props: { ...InitialProps, ...props },
27
+ });
28
+
29
+ this.registerOutputs();
30
+ this.start();
31
+ }
32
+
33
+ get notes() {
34
+ return this._props["notes"];
35
+ }
36
+
37
+ set notes(value: INote[]) {
38
+ const notes = value;
39
+ this._props = { ...this.props, notes };
40
+ this.updateNotesToPart();
41
+ }
42
+
43
+ start() {
44
+ this.part.start();
45
+ }
46
+
47
+ stop() {
48
+ this.part.stop();
49
+ }
50
+
51
+ private registerOutputs() {
52
+ this.midiOutput = this.registerOutput({ name: "midi out" });
53
+ }
54
+
55
+ private get part() {
56
+ if (this._part) return this._part;
57
+
58
+ this._part = new Part(this.onEvent, this.notes);
59
+ this._part.loop = true;
60
+ this._part.loopEnd = this.loopEnd;
61
+
62
+ return this._part;
63
+ }
64
+
65
+ private updateNotesToPart() {
66
+ this.part.clear();
67
+
68
+ this.notes.forEach((note) => {
69
+ this.part.add(note.time, note);
70
+ });
71
+ }
72
+
73
+ private get loopEnd() {
74
+ const end =
75
+ Math.max(
76
+ ...this.notes.map((note) => parseInt(note.time.split(":")[0], 10))
77
+ ) + 1;
78
+
79
+ return `${end}:0:0`;
80
+ }
81
+
82
+ private onEvent = (time: number, note: INote) => {
83
+ const event = MidiEvent.fromNote(note, "noteOn", time);
84
+
85
+ this.midiOutput.connections.forEach((input) => {
86
+ input.pluggable(event);
87
+ });
88
+ };
89
+ }
@@ -13,6 +13,7 @@ import Reverb from "./Reverb";
13
13
  import Delay from "./Delay";
14
14
  import Distortion from "./Distortion";
15
15
  import BitCrusher from "./BitCrusher";
16
+ import Sequencer from "./Sequencer";
16
17
 
17
18
  export { default } from "./Base";
18
19
  export { default as PolyModule } from "./PolyModule";
@@ -73,6 +74,8 @@ function moduleClassFromType(type: string) {
73
74
  return Distortion;
74
75
  case BitCrusher.moduleName:
75
76
  return BitCrusher;
77
+ case Sequencer.moduleName:
78
+ return Sequencer;
76
79
  default:
77
80
  throw Error(`Unknown module type ${type}`);
78
81
  }
package/src/Note/index.ts CHANGED
@@ -1,19 +1,38 @@
1
+ import { TimeClass, Time } from "tone";
2
+ import MidiEvent from "../MidiEvent";
1
3
  import frequencyTable from "./frequencyTable";
2
4
 
3
5
  const Notes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
4
6
 
5
7
  const NotesLength = Notes.length;
6
8
 
9
+ export interface INote {
10
+ note: string;
11
+ time: string;
12
+ velocity?: number;
13
+ duration?: string;
14
+ }
15
+
7
16
  export default class Note {
8
17
  static _notes: Note[];
9
18
  name: string;
10
19
  octave: number;
20
+ time: TimeClass = Time("0:0:0");
21
+ velocity?: number = 1;
22
+ duration?: string;
23
+
24
+ constructor(
25
+ eventOrString: INote | MIDIMessageEvent | string,
26
+ duration?: string
27
+ ) {
28
+ this.duration = duration;
11
29
 
12
- constructor(eventOrString: MIDIMessageEvent | string) {
13
30
  if (typeof eventOrString === "string") {
14
31
  this.fromString(eventOrString);
15
- } else {
32
+ } else if (eventOrString instanceof MIDIMessageEvent) {
16
33
  this.fromEvent(eventOrString);
34
+ } else {
35
+ this.fromProps(eventOrString);
17
36
  }
18
37
  }
19
38
 
@@ -51,6 +70,15 @@ export default class Note {
51
70
  return this.fullName;
52
71
  }
53
72
 
73
+ serialize(): INote {
74
+ return {
75
+ time: this.time.toBarsBeatsSixteenths(),
76
+ note: this.fullName,
77
+ duration: this.duration,
78
+ velocity: 1,
79
+ };
80
+ }
81
+
54
82
  private fromString(string: string) {
55
83
  const matches = string.match(/(\w#?)(\d)?/) || [];
56
84
 
@@ -62,4 +90,13 @@ export default class Note {
62
90
  this.name = Notes[event.data[1] % 12];
63
91
  this.octave = Math.floor(event.data[1] / 12) - 2;
64
92
  }
93
+
94
+ private fromProps(props: INote) {
95
+ const { note, time, duration, velocity } = props;
96
+
97
+ this.fromString(note);
98
+ this.time = Time(time);
99
+ this.duration = duration;
100
+ this.velocity = velocity;
101
+ }
65
102
  }
package/src/index.ts CHANGED
@@ -3,6 +3,7 @@ export { default as MidiDevice } from "./MidiDevice";
3
3
  export { default as MidiDeviceManager } from "./MidiDeviceManager";
4
4
  export { default as Note } from "./Note";
5
5
 
6
+ export type { INote } from "./Note";
6
7
  export type { MidiDeviceInterface } from "./MidiDevice";
7
8
  export type { ModuleInterface, AudioModule } from "./Module";
8
9
 
@@ -0,0 +1,9 @@
1
+ import { describe, expect, it } from "@jest/globals";
2
+
3
+ import { Oscillator } from "../../src/Module";
4
+
5
+ describe("Oscillator", () => {
6
+ it("has proper module name", () => {
7
+ expect(Oscillator.moduleName).toBe("Oscillator");
8
+ });
9
+ });