@blibliki/engine 0.1.16 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/.eslintrc.js +14 -0
  2. package/.parcerc +6 -0
  3. package/README.md +122 -0
  4. package/dist/main.cjs.js +33 -0
  5. package/package.json +21 -22
  6. package/rollup.config.mjs +21 -0
  7. package/src/Engine.ts +43 -42
  8. package/src/core/IO/AudioNode.ts +77 -0
  9. package/src/core/IO/Collection.ts +76 -0
  10. package/src/core/IO/ForwardNode.ts +192 -0
  11. package/src/core/IO/MidiNode.ts +67 -0
  12. package/src/core/IO/Node.ts +117 -0
  13. package/src/core/IO/index.ts +47 -0
  14. package/src/core/Module/MonoModule.ts +219 -0
  15. package/src/core/Module/PolyModule.ts +206 -0
  16. package/src/core/Module/index.ts +15 -0
  17. package/src/{Note → core/Note}/index.ts +19 -4
  18. package/src/{MidiDeviceManager.ts → core/midi/MidiDeviceManager.ts} +20 -15
  19. package/src/core/midi/MidiEvent.ts +91 -0
  20. package/src/core/midi/index.ts +5 -0
  21. package/src/index.ts +8 -12
  22. package/src/{Module → modules}/BitCrusher.ts +15 -4
  23. package/src/{Module → modules}/Delay.ts +15 -4
  24. package/src/{Module → modules}/Distortion.ts +15 -4
  25. package/src/{Module → modules}/Effect.ts +11 -7
  26. package/src/modules/Envelope/AmpEnvelope.ts +23 -0
  27. package/src/{Module → modules}/Envelope/Base.ts +50 -31
  28. package/src/{Module → modules}/Envelope/FreqEnvelope.ts +18 -23
  29. package/src/{Module → modules}/Filter.ts +18 -46
  30. package/src/{Module → modules}/Master.ts +8 -2
  31. package/src/{Module → modules}/MidiSelector.ts +18 -14
  32. package/src/{Module → modules}/Oscillator.ts +27 -16
  33. package/src/{Module → modules}/Reverb.ts +15 -4
  34. package/src/{Module → modules}/Sequencer.ts +17 -13
  35. package/src/{Module → modules}/VirtualMidi.ts +16 -12
  36. package/src/modules/VoiceScheduler.ts +145 -0
  37. package/src/{Module → modules}/Volume.ts +23 -15
  38. package/src/{Module → modules}/index.ts +14 -21
  39. package/src/routes.ts +19 -18
  40. package/src/types.ts +3 -0
  41. package/src/utils.ts +18 -0
  42. package/test/MockingModules.ts +27 -0
  43. package/test/Module/Oscillator.test.ts +1 -1
  44. package/test/core/IO.test.ts +172 -0
  45. package/build/Engine.d.ts +0 -94
  46. package/build/Engine.js +0 -158
  47. package/build/Engine.js.map +0 -1
  48. package/build/MidiDevice.d.ts +0 -25
  49. package/build/MidiDevice.js +0 -45
  50. package/build/MidiDevice.js.map +0 -1
  51. package/build/MidiDeviceManager.d.ts +0 -13
  52. package/build/MidiDeviceManager.js +0 -59
  53. package/build/MidiDeviceManager.js.map +0 -1
  54. package/build/MidiEvent.d.ts +0 -18
  55. package/build/MidiEvent.js +0 -64
  56. package/build/MidiEvent.js.map +0 -1
  57. package/build/Module/Base.d.ts +0 -65
  58. package/build/Module/Base.js +0 -138
  59. package/build/Module/Base.js.map +0 -1
  60. package/build/Module/BitCrusher.d.ts +0 -12
  61. package/build/Module/BitCrusher.js +0 -22
  62. package/build/Module/BitCrusher.js.map +0 -1
  63. package/build/Module/DataSequencer.d.ts +0 -25
  64. package/build/Module/DataSequencer.js +0 -72
  65. package/build/Module/DataSequencer.js.map +0 -1
  66. package/build/Module/Delay.d.ts +0 -15
  67. package/build/Module/Delay.js +0 -30
  68. package/build/Module/Delay.js.map +0 -1
  69. package/build/Module/Distortion.d.ts +0 -12
  70. package/build/Module/Distortion.js +0 -22
  71. package/build/Module/Distortion.js.map +0 -1
  72. package/build/Module/Effect.d.ts +0 -14
  73. package/build/Module/Effect.js +0 -22
  74. package/build/Module/Effect.js.map +0 -1
  75. package/build/Module/Envelope/AmpEnvelope.d.ts +0 -10
  76. package/build/Module/Envelope/AmpEnvelope.js +0 -14
  77. package/build/Module/Envelope/AmpEnvelope.js.map +0 -1
  78. package/build/Module/Envelope/Base.d.ts +0 -47
  79. package/build/Module/Envelope/Base.js +0 -106
  80. package/build/Module/Envelope/Base.js.map +0 -1
  81. package/build/Module/Envelope/FreqEnvelope.d.ts +0 -18
  82. package/build/Module/Envelope/FreqEnvelope.js +0 -50
  83. package/build/Module/Envelope/FreqEnvelope.js.map +0 -1
  84. package/build/Module/Envelope/index.d.ts +0 -3
  85. package/build/Module/Envelope/index.js +0 -4
  86. package/build/Module/Envelope/index.js.map +0 -1
  87. package/build/Module/Filter.d.ts +0 -37
  88. package/build/Module/Filter.js +0 -100
  89. package/build/Module/Filter.js.map +0 -1
  90. package/build/Module/IO.d.ts +0 -39
  91. package/build/Module/IO.js +0 -59
  92. package/build/Module/IO.js.map +0 -1
  93. package/build/Module/Master.d.ts +0 -8
  94. package/build/Module/Master.js +0 -12
  95. package/build/Module/Master.js.map +0 -1
  96. package/build/Module/MidiSelector.d.ts +0 -17
  97. package/build/Module/MidiSelector.js +0 -50
  98. package/build/Module/MidiSelector.js.map +0 -1
  99. package/build/Module/Oscillator.d.ts +0 -45
  100. package/build/Module/Oscillator.js +0 -136
  101. package/build/Module/Oscillator.js.map +0 -1
  102. package/build/Module/PolyModule.d.ts +0 -49
  103. package/build/Module/PolyModule.js +0 -175
  104. package/build/Module/PolyModule.js.map +0 -1
  105. package/build/Module/Reverb.d.ts +0 -15
  106. package/build/Module/Reverb.js +0 -30
  107. package/build/Module/Reverb.js.map +0 -1
  108. package/build/Module/Sequencer.d.ts +0 -38
  109. package/build/Module/Sequencer.js +0 -131
  110. package/build/Module/Sequencer.js.map +0 -1
  111. package/build/Module/VirtualMidi.d.ts +0 -28
  112. package/build/Module/VirtualMidi.js +0 -53
  113. package/build/Module/VirtualMidi.js.map +0 -1
  114. package/build/Module/VoiceScheduler.d.ts +0 -38
  115. package/build/Module/VoiceScheduler.js +0 -130
  116. package/build/Module/VoiceScheduler.js.map +0 -1
  117. package/build/Module/Volume.d.ts +0 -20
  118. package/build/Module/Volume.js +0 -48
  119. package/build/Module/Volume.js.map +0 -1
  120. package/build/Module/index.d.ts +0 -14
  121. package/build/Module/index.js +0 -66
  122. package/build/Module/index.js.map +0 -1
  123. package/build/Note/frequencyTable.d.ts +0 -4
  124. package/build/Note/frequencyTable.js +0 -146
  125. package/build/Note/frequencyTable.js.map +0 -1
  126. package/build/Note/index.d.ts +0 -25
  127. package/build/Note/index.js +0 -81
  128. package/build/Note/index.js.map +0 -1
  129. package/build/index.d.ts +0 -8
  130. package/build/index.js +0 -5
  131. package/build/index.js.map +0 -1
  132. package/build/routes.d.ts +0 -17
  133. package/build/routes.js +0 -31
  134. package/build/routes.js.map +0 -1
  135. package/src/MidiEvent.ts +0 -93
  136. package/src/Module/Base.ts +0 -220
  137. package/src/Module/DataSequencer.ts +0 -101
  138. package/src/Module/Envelope/AmpEnvelope.ts +0 -17
  139. package/src/Module/IO.ts +0 -85
  140. package/src/Module/PolyModule.ts +0 -234
  141. package/src/Module/VoiceScheduler.ts +0 -161
  142. /package/src/{Note → core/Note}/frequencyTable.ts +0 -0
  143. /package/src/{MidiDevice.ts → core/midi/MidiDevice.ts} +0 -0
  144. /package/src/{Module → modules}/Envelope/index.ts +0 -0
@@ -0,0 +1,172 @@
1
+ import { describe, expect, it, beforeEach } from "@jest/globals";
2
+ import { MonoMocking, PolyMocking } from "../MockingModules";
3
+ import {
4
+ ForwardInput,
5
+ ForwardOutput,
6
+ MidiInput,
7
+ MidiOutput,
8
+ } from "../../src/core/IO";
9
+
10
+ describe("IO", () => {
11
+ let monoModule1: MonoMocking, monoModule2: MonoMocking;
12
+ let polyModule: PolyMocking;
13
+ let midiIn: MidiInput, midiOut: MidiOutput;
14
+ let forwardMidiIn: ForwardInput, forwardMidiOut: ForwardOutput;
15
+
16
+ beforeEach(() => {
17
+ monoModule1 = new MonoMocking("module1", {});
18
+ monoModule2 = new MonoMocking("module2", {});
19
+ polyModule = new PolyMocking("polyModule", {});
20
+
21
+ midiIn = monoModule1.inputs.findByName("midi in") as MidiInput;
22
+ midiOut = monoModule2.outputs.findByName("midi out") as MidiOutput;
23
+ forwardMidiIn = polyModule.inputs.findByName("midi in") as ForwardInput;
24
+ forwardMidiOut = polyModule.outputs.findByName("midi out") as ForwardOutput;
25
+ });
26
+
27
+ describe("plug midi with midi", () => {
28
+ beforeEach(() => {
29
+ midiOut.plug(midiIn);
30
+ });
31
+
32
+ it("has one connection", () => {
33
+ expect(midiIn.connections.length).toBe(1);
34
+ expect(midiOut.connections.length).toBe(1);
35
+ });
36
+
37
+ it("has midi in connected with midi out", () => {
38
+ expect(
39
+ midiIn.connections.find((con) => con.id === midiOut.id)
40
+ ).toBeDefined();
41
+ });
42
+
43
+ it("has midi out connected with midi in", () => {
44
+ expect(
45
+ midiOut.connections.find((con) => con.id === midiIn.id)
46
+ ).toBeDefined();
47
+ });
48
+
49
+ describe("unplug midi", () => {
50
+ beforeEach(() => {
51
+ midiOut.unPlug(midiIn);
52
+ });
53
+
54
+ it("unplugged midi in from midi out", () => {
55
+ expect(
56
+ midiIn.connections.find((con) => con.id === midiOut.id)
57
+ ).toBeUndefined();
58
+ });
59
+
60
+ it("unplugged midi out from midi in", () => {
61
+ expect(
62
+ midiOut.connections.find((con) => con.id === midiIn.id)
63
+ ).toBeUndefined();
64
+ });
65
+ });
66
+
67
+ describe("unplug all", () => {
68
+ beforeEach(() => {
69
+ midiOut.unPlugAll();
70
+ });
71
+
72
+ it("unplugged midi in from midi out", () => {
73
+ expect(midiIn.connections.length).toBe(0);
74
+ });
75
+
76
+ it("unplugged midi out from midi in", () => {
77
+ expect(midiOut.connections.length).toBe(0);
78
+ });
79
+ });
80
+ });
81
+
82
+ describe("plug midi out with forward in", () => {
83
+ beforeEach(() => {
84
+ midiOut.plug(forwardMidiIn);
85
+ });
86
+
87
+ it("has one connection", () => {
88
+ expect(forwardMidiIn.connections.length).toBe(1);
89
+ expect(midiOut.connections.length).toBe(2);
90
+ });
91
+
92
+ describe("unplug all", () => {
93
+ beforeEach(() => {
94
+ midiOut.unPlugAll();
95
+ });
96
+
97
+ it("unplugged midi in from midi out", () => {
98
+ expect(forwardMidiIn.connections.length).toBe(0);
99
+ expect(
100
+ forwardMidiIn.subInputs.map((input) => input.connections).flat()
101
+ .length
102
+ ).toBe(0);
103
+ });
104
+
105
+ it("unplugged midi out from midi in", () => {
106
+ expect(midiOut.connections.length).toBe(0);
107
+ });
108
+ });
109
+ });
110
+
111
+ describe("plug forwardMidiOut with midiIn", () => {
112
+ beforeEach(() => {
113
+ forwardMidiOut.plug(midiIn);
114
+ });
115
+
116
+ it("has one connection", () => {
117
+ expect(forwardMidiOut.connections.length).toBe(1);
118
+ expect(midiIn.connections.length).toBe(2);
119
+ });
120
+
121
+ describe("unplug all", () => {
122
+ beforeEach(() => {
123
+ forwardMidiOut.unPlugAll();
124
+ });
125
+
126
+ it("unplugged midi in from midi out", () => {
127
+ expect(forwardMidiOut.connections.length).toBe(0);
128
+ expect(
129
+ forwardMidiOut.subOutputs.map((input) => input.connections).flat()
130
+ .length
131
+ ).toBe(0);
132
+ });
133
+
134
+ it("unplugged midi out from midi in", () => {
135
+ expect(midiIn.connections.length).toBe(0);
136
+ });
137
+ });
138
+ });
139
+
140
+ describe("plug forwardMidiOut with forwardMidiIn", () => {
141
+ beforeEach(() => {
142
+ forwardMidiOut.plug(forwardMidiIn);
143
+ });
144
+
145
+ it("has one connection", () => {
146
+ expect(forwardMidiOut.connections.length).toBe(1);
147
+ expect(forwardMidiIn.connections.length).toBe(1);
148
+ });
149
+
150
+ describe("unplug all", () => {
151
+ beforeEach(() => {
152
+ forwardMidiOut.unPlugAll();
153
+ });
154
+
155
+ it("unplugged midi in from midi out", () => {
156
+ expect(forwardMidiOut.connections.length).toBe(0);
157
+ expect(
158
+ forwardMidiOut.subOutputs.map((input) => input.connections).flat()
159
+ .length
160
+ ).toBe(0);
161
+ });
162
+
163
+ it("unplugged midi out from midi in", () => {
164
+ expect(forwardMidiIn.connections.length).toBe(0);
165
+ expect(
166
+ forwardMidiIn.subInputs.map((input) => input.connections).flat()
167
+ .length
168
+ ).toBe(0);
169
+ });
170
+ });
171
+ });
172
+ });
package/build/Engine.d.ts DELETED
@@ -1,94 +0,0 @@
1
- import MidiDeviceManager from "./MidiDeviceManager";
2
- import { EType } from "./MidiEvent";
3
- import { AudioModule } from "./Module";
4
- import { RouteInterface, RouteProps } from "./routes";
5
- declare type LatencyHint = "interactive" | "playback" | "balanced";
6
- interface ContextInterface {
7
- latencyHint: LatencyHint;
8
- lookAhead: number;
9
- }
10
- interface InitializeInterface {
11
- context?: Partial<ContextInterface>;
12
- }
13
- declare class Engine {
14
- midiDeviceManager: MidiDeviceManager;
15
- private static instance;
16
- private _master;
17
- private context;
18
- private propsUpdateCallbacks;
19
- private _isStarted;
20
- modules: {
21
- [Identifier: string]: AudioModule;
22
- };
23
- routes: {
24
- [Identifier: string]: RouteInterface;
25
- };
26
- private constructor();
27
- static getInstance(): Engine;
28
- initialize(props: InitializeInterface): {
29
- master: {
30
- id: string;
31
- name: string;
32
- type: string;
33
- props: any;
34
- inputs: import(".").IOProps[];
35
- outputs: import(".").IOProps[];
36
- };
37
- };
38
- registerModule(name: string, type: string, props?: any): {
39
- id: string;
40
- name: string;
41
- type: string;
42
- props: any;
43
- inputs: import(".").IOProps[];
44
- outputs: import(".").IOProps[];
45
- };
46
- unregisterModule(id: string): string[];
47
- updateNameModule(id: string, name: string): {
48
- id: string;
49
- name: string;
50
- type: string;
51
- props: any;
52
- inputs: import(".").IOProps[];
53
- outputs: import(".").IOProps[];
54
- };
55
- onPropsUpdate(callback: (id: string, props: any) => void): void;
56
- _triggerPropsUpdate(id: string, props: any): void;
57
- updatePropsModule(id: string, props: any): {
58
- id: string;
59
- name: string;
60
- type: string;
61
- props: any;
62
- inputs: import(".").IOProps[];
63
- outputs: import(".").IOProps[];
64
- };
65
- addRoute(props: RouteProps): {
66
- id: string;
67
- sourceId: string;
68
- outputName: string;
69
- destinationId: string;
70
- inputName: string;
71
- };
72
- removeRoute(id: string): void;
73
- get master(): {
74
- id: string;
75
- name: string;
76
- type: string;
77
- props: any;
78
- inputs: import(".").IOProps[];
79
- outputs: import(".").IOProps[];
80
- };
81
- triggerVirtualMidi(id: string, noteName: string, type: EType): void;
82
- dispose(): void;
83
- findById(id: string): AudioModule;
84
- get isStarted(): boolean;
85
- start(): void;
86
- stop(): void;
87
- get bpm(): number;
88
- set bpm(value: number);
89
- updateRoutes(): void;
90
- private applyRoutesRequired;
91
- private moduleRouteIds;
92
- }
93
- declare const _default: Engine;
94
- export default _default;
package/build/Engine.js DELETED
@@ -1,158 +0,0 @@
1
- import { Context, now, setContext } from "tone";
2
- import MidiDeviceManager from "./MidiDeviceManager";
3
- import MidiEvent from "./MidiEvent";
4
- import { createModule } from "./Module";
5
- import Master from "./Module/Master";
6
- import VoiceScheduler from "./Module/VoiceScheduler";
7
- import { applyRoutes, createRoute } from "./routes";
8
- class Engine {
9
- midiDeviceManager;
10
- static instance;
11
- _master;
12
- context;
13
- propsUpdateCallbacks;
14
- _isStarted = false;
15
- modules;
16
- routes;
17
- constructor() {
18
- this.modules = {};
19
- this.routes = {};
20
- this.propsUpdateCallbacks = [];
21
- }
22
- static getInstance() {
23
- if (!Engine.instance) {
24
- Engine.instance = new Engine();
25
- }
26
- return Engine.instance;
27
- }
28
- initialize(props) {
29
- this.context = new Context(props.context);
30
- setContext(this.context);
31
- this.context.transport.start();
32
- this.midiDeviceManager = new MidiDeviceManager();
33
- return {
34
- master: this.master,
35
- };
36
- }
37
- registerModule(name, type, props = {}) {
38
- const audioModule = createModule(name, type, {});
39
- audioModule.props = props;
40
- this.modules[audioModule.id] = audioModule;
41
- this.updateRoutes();
42
- return audioModule.serialize();
43
- }
44
- unregisterModule(id) {
45
- this.modules[id].dispose();
46
- const moduleRouteIds = this.moduleRouteIds(id);
47
- moduleRouteIds.forEach((routeId) => delete this.routes[routeId]);
48
- this.updateRoutes();
49
- delete this.modules[id];
50
- return moduleRouteIds;
51
- }
52
- updateNameModule(id, name) {
53
- const audioModule = this.findById(id);
54
- audioModule.name = name;
55
- return audioModule.serialize();
56
- }
57
- onPropsUpdate(callback) {
58
- this.propsUpdateCallbacks.push(callback);
59
- }
60
- _triggerPropsUpdate(id, props) {
61
- this.propsUpdateCallbacks.forEach((callback) => callback(id, props));
62
- }
63
- updatePropsModule(id, props) {
64
- const audioModule = this.findById(id);
65
- const applyRoutesRequired = this.applyRoutesRequired(audioModule, props);
66
- audioModule.props = props;
67
- if (applyRoutesRequired)
68
- this.updateRoutes();
69
- return audioModule.serialize();
70
- }
71
- addRoute(props) {
72
- const route = createRoute(props);
73
- const newRoutes = { ...this.routes, [route.id]: route };
74
- this.routes = newRoutes;
75
- this.updateRoutes();
76
- return route;
77
- }
78
- removeRoute(id) {
79
- delete this.routes[id];
80
- this.updateRoutes();
81
- }
82
- get master() {
83
- if (this._master)
84
- return this._master.serialize();
85
- const masterProps = this.registerModule("Master", "Master");
86
- this._master = this.modules[masterProps.id];
87
- return masterProps;
88
- }
89
- triggerVirtualMidi(id, noteName, type) {
90
- const virtualMidi = this.findById(id);
91
- virtualMidi.sendMidi(MidiEvent.fromNote(noteName, type));
92
- }
93
- dispose() {
94
- Object.values(this.modules).forEach((m) => {
95
- if (m instanceof Master)
96
- return;
97
- m.dispose();
98
- });
99
- this.modules = { [this._master.id]: this._master };
100
- this.routes = {};
101
- }
102
- findById(id) {
103
- const audioModule = this.modules[id];
104
- if (!audioModule)
105
- throw Error(`Audio module with id ${id} not exists`);
106
- return audioModule;
107
- }
108
- get isStarted() {
109
- return this.context.transport.state === "started" && this._isStarted;
110
- }
111
- start() {
112
- const startTime = now();
113
- this._isStarted = true;
114
- this.updateRoutes();
115
- Object.values(this.modules).forEach((audioModule) => {
116
- const am = audioModule;
117
- if (!am.start)
118
- return;
119
- am.start(startTime);
120
- });
121
- }
122
- stop() {
123
- const startTime = now();
124
- Object.values(this.modules).forEach((audioModule) => {
125
- const am = audioModule;
126
- if (!am.stop)
127
- return;
128
- am.stop(startTime);
129
- });
130
- this._isStarted = false;
131
- }
132
- get bpm() {
133
- return this.context.transport.bpm.value;
134
- }
135
- set bpm(value) {
136
- this.context.transport.bpm.value = value;
137
- }
138
- updateRoutes() {
139
- applyRoutes(Object.values(this.routes));
140
- }
141
- applyRoutesRequired(audioModule, props) {
142
- if (!props.polyNumber)
143
- return false;
144
- if (!(audioModule instanceof VoiceScheduler))
145
- return false;
146
- return props.polyNumber !== audioModule.polyNumber;
147
- }
148
- moduleRouteIds(id) {
149
- const cloneRoutes = { ...this.routes };
150
- const routeIds = Object.keys(cloneRoutes).filter((routeId) => {
151
- const { sourceId, destinationId } = cloneRoutes[routeId];
152
- return sourceId === id || destinationId === id;
153
- });
154
- return routeIds;
155
- }
156
- }
157
- export default Engine.getInstance();
158
- //# sourceMappingURL=Engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import MidiEvent from "./MidiEvent";
2
- export interface MidiDeviceInterface {
3
- id: string;
4
- name: string;
5
- state: string;
6
- }
7
- export declare type EventListerCallback = (event: MidiEvent) => void;
8
- export default class MidiDevice implements MidiDeviceInterface {
9
- id: string;
10
- name: string;
11
- state: string;
12
- eventListerCallbacks: EventListerCallback[];
13
- private _midi;
14
- constructor(midi: MIDIInput);
15
- connect(): void;
16
- disconnect(): void;
17
- serialize(): {
18
- id: string;
19
- name: string;
20
- state: string;
21
- };
22
- addEventListener(callback: EventListerCallback): void;
23
- removeEventListener(callback: EventListerCallback): void;
24
- private processEvent;
25
- }
@@ -1,45 +0,0 @@
1
- import MidiEvent from "./MidiEvent";
2
- export default class MidiDevice {
3
- id;
4
- name;
5
- state;
6
- eventListerCallbacks = [];
7
- _midi;
8
- constructor(midi) {
9
- this.id = midi.id;
10
- this.name = midi.name || `Device ${midi.id}`;
11
- this.state = midi.state;
12
- this._midi = midi;
13
- this.connect();
14
- }
15
- connect() {
16
- this._midi.onmidimessage = (e) => {
17
- const isMidiEvent = e instanceof MIDIMessageEvent;
18
- if (!isMidiEvent)
19
- return;
20
- this.processEvent(e);
21
- };
22
- }
23
- disconnect() {
24
- this._midi.onmidimessage = null;
25
- }
26
- serialize() {
27
- const { id, name, state } = this;
28
- return { id, name, state };
29
- }
30
- addEventListener(callback) {
31
- this.eventListerCallbacks.push(callback);
32
- }
33
- removeEventListener(callback) {
34
- this.eventListerCallbacks = this.eventListerCallbacks.filter((c) => c !== callback);
35
- }
36
- processEvent(e) {
37
- const event = new MidiEvent(e);
38
- switch (event.type) {
39
- case "noteOn":
40
- case "noteOff":
41
- this.eventListerCallbacks.forEach((callback) => callback(event));
42
- }
43
- }
44
- }
45
- //# sourceMappingURL=MidiDevice.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MidiDevice.js","sourceRoot":"","sources":["../src/MidiDevice.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAUpC,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,EAAE,CAAS;IACX,IAAI,CAAS;IACb,KAAK,CAAS;IACd,oBAAoB,GAA0B,EAAE,CAAC;IAEzC,KAAK,CAAY;IAEzB,YAAY,IAAe;QACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE;YAC/B,MAAM,WAAW,GAAG,CAAC,YAAY,gBAAgB,CAAC;YAElD,IAAI,CAAC,WAAW;gBAAE,OAAO;YAEzB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;IAED,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,SAAS;QACP,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAEjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,gBAAgB,CAAC,QAA6B;QAC5C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,mBAAmB,CAAC,QAA6B;QAC/C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAC1D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CACtB,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,CAAmB;QACtC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;QAE/B,QAAQ,KAAK,CAAC,IAAI,EAAE;YAClB,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;SACpE;IACH,CAAC;CACF"}
@@ -1,13 +0,0 @@
1
- import MidiDevice from "./MidiDevice";
2
- export default class MidiDeviceManager {
3
- devices: {
4
- [Key: string]: MidiDevice;
5
- };
6
- private initialized;
7
- constructor();
8
- find(id: string): MidiDevice | null;
9
- onStateChange(callback: (device: MidiDevice) => void): void;
10
- private listenChanges;
11
- private initializeDevices;
12
- private inputs;
13
- }
@@ -1,59 +0,0 @@
1
- import MidiDevice from "./MidiDevice";
2
- export default class MidiDeviceManager {
3
- devices = {};
4
- initialized = false;
5
- constructor() {
6
- this.initializeDevices().then(() => {
7
- this.listenChanges();
8
- this.initialized = true;
9
- });
10
- }
11
- find(id) {
12
- const device = this.devices[id];
13
- if (!device)
14
- return null;
15
- return device;
16
- }
17
- onStateChange(callback) {
18
- navigator.requestMIDIAccess().then((access) => {
19
- access.onstatechange = (e) => {
20
- const isMidiEvent = e instanceof MIDIConnectionEvent;
21
- if (!isMidiEvent)
22
- return;
23
- if (e.port instanceof MIDIOutput)
24
- return;
25
- const input = e.port;
26
- const midi = new MidiDevice(input);
27
- callback(midi);
28
- };
29
- });
30
- }
31
- listenChanges() {
32
- this.onStateChange((device) => {
33
- if (device.state === "disconnected") {
34
- device.disconnect();
35
- delete this.devices[device.id];
36
- }
37
- else {
38
- this.devices[device.id] = device;
39
- }
40
- });
41
- }
42
- async initializeDevices() {
43
- if (this.initialized)
44
- return Object.values(this.devices);
45
- (await this.inputs()).forEach((input) => {
46
- if (this.devices[input.id])
47
- return;
48
- this.devices[input.id] = new MidiDevice(input);
49
- });
50
- return Object.values(this.devices);
51
- }
52
- async inputs() {
53
- const inputs = [];
54
- const access = await navigator.requestMIDIAccess();
55
- access.inputs.forEach((input) => inputs.push(input));
56
- return inputs;
57
- }
58
- }
59
- //# sourceMappingURL=MidiDeviceManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MidiDeviceManager.js","sourceRoot":"","sources":["../src/MidiDeviceManager.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,GAAkC,EAAE,CAAC;IACpC,WAAW,GAAY,KAAK,CAAC;IAErC;QACE,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,EAAU;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEhC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,QAAsC;QAClD,SAAS,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAkB,EAAE,EAAE;YACxD,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE;gBAC3B,MAAM,WAAW,GAAG,CAAC,YAAY,mBAAmB,CAAC;gBAErD,IAAI,CAAC,WAAW;oBAAE,OAAO;gBACzB,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU;oBAAE,OAAO;gBAEzC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAiB,CAAC;gBAElC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;gBAEnC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE;YAC5B,IAAI,MAAM,CAAC,KAAK,KAAK,cAAc,EAAE;gBACnC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aAChC;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;aAClC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzD,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACtC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,OAAO;YAEnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,MAAM,MAAM,GAAqB,EAAE,CAAC;QAEpC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -1,18 +0,0 @@
1
- import { ISequence } from "./Module/Sequencer";
2
- import { IDataSequence } from "./Module/DataSequencer";
3
- import Note, { INote } from "./Note";
4
- export declare type EType = "noteOn" | "noteOff";
5
- export default class MidiEvent {
6
- notes: Note[];
7
- readonly triggeredAt: number;
8
- _type: EType;
9
- private data;
10
- private event;
11
- static fromDataSequence(sequence: IDataSequence, triggeredAt: number): MidiEvent;
12
- static fromSequence(sequence: ISequence, triggeredAt: number): MidiEvent;
13
- static fromNote(noteName: string | Note | INote, type: EType, triggeredAt?: number): MidiEvent;
14
- constructor(event: MIDIMessageEvent, triggeredAt?: number);
15
- get type(): EType;
16
- get isNote(): boolean;
17
- defineNotes(): void;
18
- }
@@ -1,64 +0,0 @@
1
- import { now } from "tone";
2
- import Note from "./Note";
3
- const EventType = {
4
- 8: "noteOff",
5
- 9: "noteOn",
6
- };
7
- export default class MidiEvent {
8
- notes;
9
- triggeredAt;
10
- _type;
11
- data;
12
- event;
13
- static fromDataSequence(sequence, triggeredAt) {
14
- const event = new MidiEvent(new MIDIMessageEvent("", { data: new Uint8Array([0, 0, 0]) }), triggeredAt);
15
- event._type = "noteOn";
16
- const note = new Note(sequence.frequency);
17
- note.velocity = sequence.amplitude;
18
- event.notes = [note];
19
- return event;
20
- }
21
- static fromSequence(sequence, triggeredAt) {
22
- const event = new MidiEvent(new MIDIMessageEvent("", { data: new Uint8Array([0, 0, 0]) }), triggeredAt);
23
- event._type = "noteOn";
24
- event.notes = sequence.notes.map((n) => new Note(n));
25
- return event;
26
- }
27
- static fromNote(noteName, type, triggeredAt) {
28
- const event = new MidiEvent(new MIDIMessageEvent("", { data: new Uint8Array([0, 0, 0]) }), triggeredAt);
29
- if (noteName instanceof Note) {
30
- event.notes = [noteName];
31
- }
32
- else {
33
- event.notes = [new Note(noteName)];
34
- }
35
- event._type = type;
36
- return event;
37
- }
38
- constructor(event, triggeredAt) {
39
- this.event = event;
40
- this.triggeredAt = triggeredAt || now();
41
- this.data = event.data;
42
- this.defineNotes();
43
- }
44
- get type() {
45
- if (this._type)
46
- return this._type;
47
- let type = EventType[this.data[0] >> 4];
48
- if (type === "noteOn" && this.data[2] === 0) {
49
- type = "noteOff";
50
- }
51
- return (this._type = type);
52
- }
53
- get isNote() {
54
- return this.type === "noteOn" || this.type === "noteOff";
55
- }
56
- defineNotes() {
57
- if (!this.isNote)
58
- return;
59
- if (this.notes)
60
- return;
61
- this.notes = [new Note(this.event)];
62
- }
63
- }
64
- //# sourceMappingURL=MidiEvent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MidiEvent.js","sourceRoot":"","sources":["../src/MidiEvent.ts"],"names":[],"mappings":"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"}