@blibliki/engine 0.1.17 → 0.1.19

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 (161) hide show
  1. package/README.md +13 -1
  2. package/{build → dist/build}/Engine.d.ts +14 -22
  3. package/dist/build/core/IO/AudioNode.d.ts +35 -0
  4. package/dist/build/core/IO/Collection.d.ts +13 -0
  5. package/dist/build/core/IO/ForwardNode.d.ts +38 -0
  6. package/dist/build/core/IO/MidiNode.d.ts +30 -0
  7. package/dist/build/core/IO/Node.d.ts +36 -0
  8. package/dist/build/core/IO/index.d.ts +12 -0
  9. package/dist/build/core/Module/MonoModule.d.ts +67 -0
  10. package/dist/build/core/Module/PolyModule.d.ts +57 -0
  11. package/dist/build/core/Module/index.d.ts +6 -0
  12. package/{build → dist/build/core}/Note/index.d.ts +3 -0
  13. package/{build → dist/build/core/midi}/MidiDevice.d.ts +1 -1
  14. package/dist/build/core/midi/MidiEvent.d.ts +21 -0
  15. package/dist/build/core/midi/index.d.ts +5 -0
  16. package/dist/build/index.d.ts +9 -0
  17. package/{build/Module → dist/build/modules}/BitCrusher.d.ts +5 -1
  18. package/{build/Module → dist/build/modules}/Delay.d.ts +5 -1
  19. package/{build/Module → dist/build/modules}/Distortion.d.ts +5 -1
  20. package/{build/Module → dist/build/modules}/Effect.d.ts +7 -2
  21. package/{build/Module → dist/build/modules}/Envelope/AmpEnvelope.d.ts +10 -2
  22. package/{build/Module → dist/build/modules}/Envelope/Base.d.ts +30 -11
  23. package/{build/Module → dist/build/modules}/Envelope/FreqEnvelope.d.ts +10 -3
  24. package/{build/Module → dist/build/modules}/Filter.d.ts +13 -13
  25. package/{build/Module → dist/build/modules}/Master.d.ts +5 -2
  26. package/{build/Module → dist/build/modules}/MidiSelector.d.ts +9 -5
  27. package/{build/Module → dist/build/modules}/Oscillator.d.ts +15 -9
  28. package/{build/Module → dist/build/modules}/Reverb.d.ts +5 -1
  29. package/{build/Module → dist/build/modules}/Sequencer.d.ts +9 -5
  30. package/{build/Module → dist/build/modules}/VirtualMidi.d.ts +12 -8
  31. package/dist/build/modules/VoiceScheduler.d.ts +43 -0
  32. package/dist/build/modules/Volume.d.ts +26 -0
  33. package/dist/build/modules/index.d.ts +16 -0
  34. package/{build → dist/build}/routes.d.ts +6 -5
  35. package/dist/build/types.d.ts +5 -0
  36. package/dist/build/utils.d.ts +1 -0
  37. package/dist/main.cjs.js +33 -0
  38. package/dist/main.cjs.js.map +1 -0
  39. package/dist/main.esm.js +33 -0
  40. package/dist/main.esm.js.map +1 -0
  41. package/package.json +26 -22
  42. package/src/Engine.ts +27 -36
  43. package/src/core/IO/AudioNode.ts +77 -0
  44. package/src/core/IO/Collection.ts +76 -0
  45. package/src/core/IO/ForwardNode.ts +192 -0
  46. package/src/core/IO/MidiNode.ts +67 -0
  47. package/src/core/IO/Node.ts +117 -0
  48. package/src/core/IO/index.ts +47 -0
  49. package/src/core/Module/MonoModule.ts +219 -0
  50. package/src/core/Module/PolyModule.ts +206 -0
  51. package/src/core/Module/index.ts +15 -0
  52. package/src/{Note → core/Note}/index.ts +19 -4
  53. package/src/{MidiDeviceManager.ts → core/midi/MidiDeviceManager.ts} +20 -15
  54. package/src/core/midi/MidiEvent.ts +91 -0
  55. package/src/core/midi/index.ts +5 -0
  56. package/src/index.ts +8 -12
  57. package/src/{Module → modules}/BitCrusher.ts +15 -4
  58. package/src/{Module → modules}/Delay.ts +15 -4
  59. package/src/{Module → modules}/Distortion.ts +15 -4
  60. package/src/{Module → modules}/Effect.ts +10 -6
  61. package/src/modules/Envelope/AmpEnvelope.ts +23 -0
  62. package/src/{Module → modules}/Envelope/Base.ts +50 -31
  63. package/src/{Module → modules}/Envelope/FreqEnvelope.ts +18 -23
  64. package/src/{Module → modules}/Filter.ts +18 -46
  65. package/src/{Module → modules}/Master.ts +8 -2
  66. package/src/{Module → modules}/MidiSelector.ts +18 -14
  67. package/src/{Module → modules}/Oscillator.ts +27 -16
  68. package/src/{Module → modules}/Reverb.ts +15 -4
  69. package/src/{Module → modules}/Sequencer.ts +17 -13
  70. package/src/{Module → modules}/VirtualMidi.ts +16 -12
  71. package/src/modules/VoiceScheduler.ts +145 -0
  72. package/src/{Module → modules}/Volume.ts +23 -15
  73. package/src/{Module → modules}/index.ts +14 -21
  74. package/src/routes.ts +19 -18
  75. package/src/types.ts +3 -0
  76. package/src/utils.ts +18 -0
  77. package/build/Engine.js +0 -165
  78. package/build/Engine.js.map +0 -1
  79. package/build/MidiDevice.js +0 -45
  80. package/build/MidiDevice.js.map +0 -1
  81. package/build/MidiDeviceManager.js +0 -59
  82. package/build/MidiDeviceManager.js.map +0 -1
  83. package/build/MidiEvent.d.ts +0 -18
  84. package/build/MidiEvent.js +0 -64
  85. package/build/MidiEvent.js.map +0 -1
  86. package/build/Module/Base.d.ts +0 -63
  87. package/build/Module/Base.js +0 -138
  88. package/build/Module/Base.js.map +0 -1
  89. package/build/Module/BitCrusher.js +0 -22
  90. package/build/Module/BitCrusher.js.map +0 -1
  91. package/build/Module/DataSequencer.d.ts +0 -26
  92. package/build/Module/DataSequencer.js +0 -91
  93. package/build/Module/DataSequencer.js.map +0 -1
  94. package/build/Module/Delay.js +0 -30
  95. package/build/Module/Delay.js.map +0 -1
  96. package/build/Module/Distortion.js +0 -22
  97. package/build/Module/Distortion.js.map +0 -1
  98. package/build/Module/Effect.js +0 -22
  99. package/build/Module/Effect.js.map +0 -1
  100. package/build/Module/Envelope/AmpEnvelope.js +0 -14
  101. package/build/Module/Envelope/AmpEnvelope.js.map +0 -1
  102. package/build/Module/Envelope/Base.js +0 -106
  103. package/build/Module/Envelope/Base.js.map +0 -1
  104. package/build/Module/Envelope/FreqEnvelope.js +0 -50
  105. package/build/Module/Envelope/FreqEnvelope.js.map +0 -1
  106. package/build/Module/Envelope/index.js +0 -4
  107. package/build/Module/Envelope/index.js.map +0 -1
  108. package/build/Module/Filter.js +0 -100
  109. package/build/Module/Filter.js.map +0 -1
  110. package/build/Module/IO.d.ts +0 -39
  111. package/build/Module/IO.js +0 -59
  112. package/build/Module/IO.js.map +0 -1
  113. package/build/Module/Master.js +0 -12
  114. package/build/Module/Master.js.map +0 -1
  115. package/build/Module/MidiSelector.js +0 -50
  116. package/build/Module/MidiSelector.js.map +0 -1
  117. package/build/Module/Oscillator.js +0 -136
  118. package/build/Module/Oscillator.js.map +0 -1
  119. package/build/Module/PolyModule.d.ts +0 -49
  120. package/build/Module/PolyModule.js +0 -175
  121. package/build/Module/PolyModule.js.map +0 -1
  122. package/build/Module/Reverb.js +0 -30
  123. package/build/Module/Reverb.js.map +0 -1
  124. package/build/Module/Sequencer.js +0 -131
  125. package/build/Module/Sequencer.js.map +0 -1
  126. package/build/Module/VirtualMidi.js +0 -53
  127. package/build/Module/VirtualMidi.js.map +0 -1
  128. package/build/Module/VoiceScheduler.d.ts +0 -38
  129. package/build/Module/VoiceScheduler.js +0 -130
  130. package/build/Module/VoiceScheduler.js.map +0 -1
  131. package/build/Module/Volume.d.ts +0 -20
  132. package/build/Module/Volume.js +0 -48
  133. package/build/Module/Volume.js.map +0 -1
  134. package/build/Module/index.d.ts +0 -14
  135. package/build/Module/index.js +0 -66
  136. package/build/Module/index.js.map +0 -1
  137. package/build/Note/frequencyTable.js +0 -146
  138. package/build/Note/frequencyTable.js.map +0 -1
  139. package/build/Note/index.js +0 -81
  140. package/build/Note/index.js.map +0 -1
  141. package/build/index.d.ts +0 -8
  142. package/build/index.js +0 -5
  143. package/build/index.js.map +0 -1
  144. package/build/routes.js +0 -31
  145. package/build/routes.js.map +0 -1
  146. package/jest.config.js +0 -19
  147. package/src/MidiEvent.ts +0 -93
  148. package/src/Module/Base.ts +0 -223
  149. package/src/Module/DataSequencer.ts +0 -121
  150. package/src/Module/Envelope/AmpEnvelope.ts +0 -17
  151. package/src/Module/IO.ts +0 -85
  152. package/src/Module/PolyModule.ts +0 -234
  153. package/src/Module/VoiceScheduler.ts +0 -161
  154. package/test/Module/Oscillator.test.ts +0 -9
  155. package/tsconfig.json +0 -22
  156. /package/{build → dist/build/core}/Note/frequencyTable.d.ts +0 -0
  157. /package/{build → dist/build/core/midi}/MidiDeviceManager.d.ts +0 -0
  158. /package/{build/Module → dist/build/modules}/Envelope/index.d.ts +0 -0
  159. /package/src/{Note → core/Note}/frequencyTable.ts +0 -0
  160. /package/src/{MidiDevice.ts → core/midi/MidiDevice.ts} +0 -0
  161. /package/src/{Module → modules}/Envelope/index.ts +0 -0
package/build/Engine.js DELETED
@@ -1,165 +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
- return new Promise((resolve) => {
30
- if (this.context)
31
- return resolve({ master: this.master });
32
- this.context = new Context(props.context);
33
- setContext(this.context);
34
- this.context.transport.start();
35
- this.midiDeviceManager = new MidiDeviceManager();
36
- setTimeout(() => {
37
- resolve({ master: this.master });
38
- }, 0);
39
- });
40
- }
41
- addModule(params) {
42
- const { name, type, props = {} } = params;
43
- const audioModule = createModule(name, type, {});
44
- audioModule.props = props;
45
- this.modules[audioModule.id] = audioModule;
46
- this.updateRoutes();
47
- return audioModule.serialize();
48
- }
49
- removeModule(id) {
50
- this.modules[id].dispose();
51
- const moduleRouteIds = this.moduleRouteIds(id);
52
- moduleRouteIds.forEach((routeId) => delete this.routes[routeId]);
53
- this.updateRoutes();
54
- delete this.modules[id];
55
- return moduleRouteIds;
56
- }
57
- updateNameModule(id, name) {
58
- const audioModule = this.findById(id);
59
- audioModule.name = name;
60
- return audioModule.serialize();
61
- }
62
- onPropsUpdate(callback) {
63
- this.propsUpdateCallbacks.push(callback);
64
- }
65
- _triggerPropsUpdate(id, props) {
66
- this.propsUpdateCallbacks.forEach((callback) => callback(id, props));
67
- }
68
- updatePropsModule(id, props) {
69
- const audioModule = this.findById(id);
70
- const applyRoutesRequired = this.applyRoutesRequired(audioModule, props);
71
- audioModule.props = props;
72
- if (applyRoutesRequired)
73
- this.updateRoutes();
74
- return audioModule.serialize();
75
- }
76
- addRoute(props) {
77
- const route = createRoute(props);
78
- const newRoutes = { ...this.routes, [route.id]: route };
79
- this.routes = newRoutes;
80
- this.updateRoutes();
81
- return route;
82
- }
83
- removeRoute(id) {
84
- delete this.routes[id];
85
- this.updateRoutes();
86
- }
87
- get master() {
88
- if (this._master)
89
- return this._master.serialize();
90
- const masterProps = this.addModule({ name: "Master", type: "Master" });
91
- this._master = this.modules[masterProps.id];
92
- return masterProps;
93
- }
94
- triggerVirtualMidi(id, noteName, type) {
95
- const virtualMidi = this.findById(id);
96
- virtualMidi.sendMidi(MidiEvent.fromNote(noteName, type));
97
- }
98
- dispose() {
99
- Object.values(this.modules).forEach((m) => {
100
- if (m instanceof Master)
101
- return;
102
- m.dispose();
103
- });
104
- this.modules = this._master ? { [this._master.id]: this._master } : {};
105
- this.routes = {};
106
- }
107
- findById(id) {
108
- const audioModule = this.modules[id];
109
- if (!audioModule)
110
- throw Error(`Audio module with id ${id} not exists`);
111
- return audioModule;
112
- }
113
- get isStarted() {
114
- return (this.context !== undefined &&
115
- this.context.transport.state === "started" &&
116
- this._isStarted);
117
- }
118
- start() {
119
- const startTime = now();
120
- this._isStarted = true;
121
- this.updateRoutes();
122
- Object.values(this.modules).forEach((audioModule) => {
123
- const am = audioModule;
124
- if (!am.start)
125
- return;
126
- am.start(startTime);
127
- });
128
- }
129
- stop() {
130
- const startTime = now();
131
- Object.values(this.modules).forEach((audioModule) => {
132
- const am = audioModule;
133
- if (!am.stop)
134
- return;
135
- am.stop(startTime);
136
- });
137
- this._isStarted = false;
138
- }
139
- get bpm() {
140
- return this.context.transport.bpm.value;
141
- }
142
- set bpm(value) {
143
- this.context.transport.bpm.value = value;
144
- }
145
- updateRoutes() {
146
- applyRoutes(Object.values(this.routes));
147
- }
148
- applyRoutesRequired(audioModule, props) {
149
- if (!props.polyNumber)
150
- return false;
151
- if (!(audioModule instanceof VoiceScheduler))
152
- return false;
153
- return props.polyNumber !== audioModule.polyNumber;
154
- }
155
- moduleRouteIds(id) {
156
- const cloneRoutes = { ...this.routes };
157
- const routeIds = Object.keys(cloneRoutes).filter((routeId) => {
158
- const { sourceId, destinationId } = cloneRoutes[routeId];
159
- return sourceId === id || destinationId === id;
160
- });
161
- return routeIds;
162
- }
163
- }
164
- export default Engine.getInstance();
165
- //# 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,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,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":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAG3B,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,KAAK,CAAS;IACL,WAAW,CAAS;IAC7B,KAAK,CAAQ;IACL,IAAI,CAAa;IACjB,KAAK,CAAmB;IAEhC,MAAM,CAAC,gBAAgB,CAAC,QAAuB,EAAE,WAAmB;QAClE,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;QACF,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;QACnC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QAErB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,QAAmB,EAAE,WAAmB;QAC1D,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;QACF,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;QACvB,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,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,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC1B;aAAM;YACL,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;SACpC;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,WAAW,EAAE,CAAC;IACrB,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,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QAEvB,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -1,63 +0,0 @@
1
- import { InputNode } from "tone";
2
- import { Input, Output, IOInterface } from "./IO";
3
- import MidiEvent from "../MidiEvent";
4
- import { AudioModule } from "../Module";
5
- import Note from "../Note";
6
- export interface Connectable {
7
- connect: (inputNode: InputNode) => void;
8
- disconnect: (inputNode?: InputNode) => void;
9
- dispose: () => void;
10
- }
11
- export interface Triggerable {
12
- triggerAttack: Function;
13
- triggerRelease: Function;
14
- }
15
- export interface Voicable {
16
- voiceNo?: number;
17
- }
18
- export interface ModuleInterface<PropsInterface> {
19
- name: string;
20
- props: PropsInterface;
21
- voiceNo?: number;
22
- }
23
- export declare class DummnyInternalModule implements Connectable {
24
- connect(inputNode: InputNode): void;
25
- disconnect(inputNode?: InputNode): void;
26
- dispose(): void;
27
- }
28
- declare class Module<InternalModule extends Connectable, PropsInterface> implements ModuleInterface<PropsInterface> {
29
- static readonly moduleName: string;
30
- readonly id: string;
31
- name: string;
32
- internalModule: InternalModule;
33
- inputs: Input[];
34
- outputs: Output[];
35
- readonly voiceNo?: number;
36
- updatedAt: Date;
37
- _props: PropsInterface;
38
- constructor(internalModule: InternalModule, props: Partial<ModuleInterface<PropsInterface>>);
39
- set props(value: PropsInterface);
40
- get props(): PropsInterface;
41
- plug(audioModule: AudioModule, from: string, to: string): void;
42
- unplugAll(): void;
43
- connect: (inputAudioModule: AudioModule, attribute?: string) => void;
44
- disconnect: (inputAudioModule: AudioModule, attribute?: string) => void;
45
- dispose(): void;
46
- triggerAttack(note: Note, triggeredAt: number): void;
47
- triggerRelease(note: Note, triggeredAt: number): void;
48
- midiTriggered: (midiEvent: MidiEvent, noteIndex?: number) => void;
49
- private triggerer;
50
- serialize(): {
51
- id: string;
52
- name: string;
53
- type: string;
54
- props: PropsInterface;
55
- inputs: import("./IO").SerializeInterface[];
56
- outputs: import("./IO").SerializeInterface[];
57
- };
58
- protected registerInput(props: IOInterface): Input;
59
- protected registerOutput(props: IOInterface): Output;
60
- protected registerBasicOutputs(): void;
61
- protected registerBasicInputs(): void;
62
- }
63
- export default Module;
@@ -1,138 +0,0 @@
1
- import { v4 as uuidv4 } from "uuid";
2
- import { Input, Output } from "./IO";
3
- import { PolyModule } from "../Module";
4
- export class DummnyInternalModule {
5
- connect(inputNode) {
6
- throw Error("This module is not connectable");
7
- }
8
- disconnect(inputNode) { }
9
- dispose() { }
10
- }
11
- class Module {
12
- static moduleName;
13
- id;
14
- name;
15
- internalModule;
16
- inputs = [];
17
- outputs = [];
18
- voiceNo;
19
- updatedAt;
20
- _props = {};
21
- constructor(internalModule, props) {
22
- this.internalModule = internalModule;
23
- this.id = uuidv4();
24
- Object.assign(this, props);
25
- }
26
- set props(value) {
27
- if (!value)
28
- return;
29
- this.updatedAt = new Date();
30
- Object.assign(this, value);
31
- }
32
- get props() {
33
- return this._props;
34
- }
35
- plug(audioModule, from, to) {
36
- const output = this.outputs.find((i) => i.name === from);
37
- if (!output)
38
- throw Error(`Output ${from} not exist`);
39
- const input = audioModule.inputs.find((i) => i.name === to);
40
- if (!input)
41
- throw Error(`Input ${to} in module ${audioModule.name} not exist`);
42
- output.plug(input);
43
- }
44
- unplugAll() {
45
- this.outputs.forEach((o) => o.unPlugAll());
46
- }
47
- connect = (inputAudioModule, attribute = "internalModule") => {
48
- if (inputAudioModule instanceof PolyModule) {
49
- inputAudioModule.audioModules.forEach((m) => {
50
- this.internalModule.connect(m[attribute]);
51
- });
52
- return;
53
- }
54
- this.internalModule.connect(inputAudioModule[attribute]);
55
- };
56
- disconnect = (inputAudioModule, attribute = "internalModule") => {
57
- if (inputAudioModule instanceof PolyModule) {
58
- inputAudioModule.audioModules.forEach((m) => {
59
- this.internalModule.disconnect(m[attribute]);
60
- });
61
- return;
62
- }
63
- this.internalModule.disconnect(inputAudioModule[attribute]);
64
- };
65
- dispose() {
66
- this.internalModule.dispose();
67
- }
68
- triggerAttack(note, triggeredAt) {
69
- throw Error("triggerAttack not implemented");
70
- }
71
- triggerRelease(note, triggeredAt) {
72
- throw Error("triggerRelease not implemented");
73
- }
74
- midiTriggered = (midiEvent, noteIndex) => {
75
- const { notes, triggeredAt } = midiEvent;
76
- switch (midiEvent.type) {
77
- case "noteOn":
78
- const { duration } = notes[0];
79
- this.triggerer(this.triggerAttack, notes, triggeredAt, noteIndex);
80
- if (duration) {
81
- const releaseTriggeredAt = triggeredAt + this.internalModule.toSeconds(duration);
82
- this.triggerer(this.triggerRelease, notes, releaseTriggeredAt, noteIndex);
83
- }
84
- break;
85
- case "noteOff":
86
- this.triggerer(this.triggerRelease, notes, triggeredAt, noteIndex);
87
- break;
88
- default:
89
- throw Error("This type is not a note");
90
- }
91
- };
92
- triggerer(trigger, notes, triggeredAt, noteIndex) {
93
- if (noteIndex !== undefined && this.voiceNo !== undefined) {
94
- trigger(notes[noteIndex], triggeredAt);
95
- return;
96
- }
97
- notes.forEach((note) => trigger(note, triggeredAt));
98
- }
99
- serialize() {
100
- const klass = this.constructor;
101
- return {
102
- id: this.id,
103
- name: this.name,
104
- type: klass.moduleName,
105
- props: this.props,
106
- inputs: this.inputs.map((i) => i.serialize()),
107
- outputs: this.outputs.map((i) => i.serialize()),
108
- };
109
- }
110
- registerInput(props) {
111
- const input = new Input(this, props);
112
- this.inputs.push(input);
113
- return input;
114
- }
115
- registerOutput(props) {
116
- const output = new Output(this, props);
117
- this.outputs.push(output);
118
- return output;
119
- }
120
- registerBasicOutputs() {
121
- this.registerOutput({
122
- name: "output",
123
- onPlug: (output) => {
124
- this.connect(output.audioModule);
125
- },
126
- onUnPlug: (output) => {
127
- this.disconnect(output.audioModule);
128
- },
129
- });
130
- }
131
- registerBasicInputs() {
132
- this.registerInput({
133
- name: "input",
134
- });
135
- }
136
- }
137
- export default Module;
138
- //# sourceMappingURL=Base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../src/Module/Base.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { BitCrusher as InternalBitCrasher } from "tone";
2
- import Effect from "./Effect";
3
- const InitialProps = {
4
- bits: 16,
5
- };
6
- export default class BitCrusher extends Effect {
7
- static moduleName = "BitCrusher";
8
- constructor(name, props) {
9
- super(name, new InternalBitCrasher(), {
10
- ...InitialProps,
11
- ...props,
12
- });
13
- }
14
- get bits() {
15
- return this._props["bits"];
16
- }
17
- set bits(value) {
18
- this._props = { ...this.props, bits: value };
19
- this.internalModule.bits.value = this.bits;
20
- }
21
- }
22
- //# sourceMappingURL=BitCrusher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BitCrusher.js","sourceRoot":"","sources":["../../src/Module/BitCrusher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAExD,OAAO,MAA2B,MAAM,UAAU,CAAC;AAMnD,MAAM,YAAY,GAAiC;IACjD,IAAI,EAAE,EAAE;CACT,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,MAGvC;IACC,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC;IAEjC,YAAY,IAAY,EAAE,KAAmC;QAC3D,KAAK,CAAC,IAAI,EAAE,IAAI,kBAAkB,EAAE,EAAE;YACpC,GAAG,YAAY;YACf,GAAG,KAAK;SACT,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,KAAa;QACpB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7C,CAAC"}
@@ -1,26 +0,0 @@
1
- import Module, { DummnyInternalModule } from "./Base";
2
- interface IDataSequencer {
3
- sequences: IDataSequence[];
4
- }
5
- export interface IDataSequence {
6
- voiceNo: number;
7
- time: number;
8
- frequency: number;
9
- amplitude: number;
10
- }
11
- export default class DataSequencer extends Module<DummnyInternalModule, IDataSequencer> {
12
- static moduleName: string;
13
- private midiOutput;
14
- private prevNumberOfVoices;
15
- private loop;
16
- constructor(name: string, props: Partial<IDataSequence>);
17
- get sequences(): IDataSequence[];
18
- set sequences(value: IDataSequence[]);
19
- start(time: number): void;
20
- stop(): void;
21
- private onPartEvent;
22
- private get numberOfVoices();
23
- private updateNumberOfVoices;
24
- private registerOutputs;
25
- }
26
- export {};