@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
@@ -1,53 +0,0 @@
1
- import Engine from "../Engine";
2
- import Module, { DummnyInternalModule } from "./Base";
3
- const InitialProps = {
4
- activeNotes: [],
5
- };
6
- export default class VirtualMidi extends Module {
7
- static moduleName = "VirtualMidi";
8
- midiOutput;
9
- constructor(name, props) {
10
- super(new DummnyInternalModule(), {
11
- name,
12
- props: { ...InitialProps, ...props },
13
- });
14
- this.registerInputs();
15
- this.registerOutputs();
16
- }
17
- get activeNotes() {
18
- return this._props["activeNotes"];
19
- }
20
- // can't set externaly
21
- set activeNotes(value) {
22
- this._props = { ...this.props, activeNotes: value };
23
- }
24
- sendMidi(midiEvent) {
25
- this.midiOutput.connections.forEach((input) => {
26
- input.pluggable(midiEvent);
27
- });
28
- }
29
- triggerAttack = (note) => {
30
- this.activeNotes = [...this.activeNotes, note.fullName];
31
- Engine._triggerPropsUpdate(this.id, this.props);
32
- };
33
- triggerRelease = (note) => {
34
- this.activeNotes = this.activeNotes.filter((name) => name !== note.fullName);
35
- Engine._triggerPropsUpdate(this.id, this.props);
36
- };
37
- serialize() {
38
- return {
39
- ...super.serialize(),
40
- activeNotes: this.activeNotes,
41
- };
42
- }
43
- registerInputs() {
44
- this.registerInput({
45
- name: "midi in",
46
- pluggable: this.midiTriggered,
47
- });
48
- }
49
- registerOutputs() {
50
- this.midiOutput = this.registerOutput({ name: "midi out" });
51
- }
52
- }
53
- //# sourceMappingURL=VirtualMidi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VirtualMidi.js","sourceRoot":"","sources":["../../src/Module/VirtualMidi.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,OAAO,MAAM,EAAE,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAOtD,MAAM,YAAY,GAAyB;IACzC,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,MAGxC;IACC,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC;IAClC,UAAU,CAAS;IAEnB,YAAY,IAAY,EAAE,KAA2B;QACnD,KAAK,CAAC,IAAI,oBAAoB,EAAE,EAAE;YAChC,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IAED,sBAAsB;IACtB,IAAI,WAAW,CAAC,KAAe;QAC7B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACtD,CAAC;IAED,QAAQ,CAAC,SAAoB;QAC3B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5C,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa,GAAG,CAAC,IAAU,EAAE,EAAE;QAC7B,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,cAAc,GAAG,CAAC,IAAU,EAAE,EAAE;QAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACxC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CACjC,CAAC;QACF,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,SAAS;QACP,OAAO;YACL,GAAG,KAAK,CAAC,SAAS,EAAE;YACpB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,aAAa,CAAC;YACjB,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI,CAAC,aAAa;SAC9B,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC"}
@@ -1,38 +0,0 @@
1
- import Module, { DummnyInternalModule, Voicable } from "./Base";
2
- import MidiEvent from "../MidiEvent";
3
- import { Output } from "./IO";
4
- import PolyModule from "./PolyModule";
5
- export interface VoiceSchedulerInterface extends Voicable {
6
- polyNumber: number;
7
- }
8
- export default class VoiceScheduler extends PolyModule<Voice, VoiceSchedulerInterface> {
9
- static moduleName: string;
10
- midiOutput: Output;
11
- numberOfVoicesOut: Output;
12
- constructor(name: string, props: VoiceSchedulerInterface);
13
- set polyNumber(value: number);
14
- get polyNumber(): number;
15
- midiTriggered: (midiEvent: MidiEvent) => void;
16
- serialize(): {
17
- props: any;
18
- id: string;
19
- type: string;
20
- inputs: import("./IO").SerializeInterface[];
21
- outputs: import("./IO").SerializeInterface[];
22
- name: string;
23
- };
24
- private findFreeVoices;
25
- private registerInputs;
26
- private registerOutputs;
27
- }
28
- export interface VoiceInterface extends Voicable {
29
- }
30
- declare class Voice extends Module<DummnyInternalModule, VoiceInterface> {
31
- midiEvent: MidiEvent | null;
32
- activeNote: string | null;
33
- triggeredAt: number;
34
- midiOutput: Output;
35
- constructor(name: string, props: VoiceInterface);
36
- midiTriggered: (midiEvent: MidiEvent, noteIndex?: number) => void;
37
- }
38
- export {};
@@ -1,130 +0,0 @@
1
- import Module, { DummnyInternalModule } from "./Base";
2
- import PolyModule from "./PolyModule";
3
- export default class VoiceScheduler extends PolyModule {
4
- static moduleName = "VoiceScheduler";
5
- midiOutput;
6
- numberOfVoicesOut;
7
- constructor(name, props) {
8
- super({
9
- name,
10
- child: Voice,
11
- props,
12
- });
13
- this.registerInputs();
14
- this.registerOutputs();
15
- this.polyNumber = this.numberOfVoices;
16
- }
17
- set polyNumber(value) {
18
- super.numberOfVoices = value;
19
- if (!this.numberOfVoicesOut)
20
- return;
21
- this.numberOfVoicesOut.connections.forEach((input) => {
22
- if (input.audioModule instanceof Module)
23
- return;
24
- input.audioModule.numberOfVoices = value;
25
- });
26
- }
27
- get polyNumber() {
28
- return this.numberOfVoices;
29
- }
30
- midiTriggered = (midiEvent) => {
31
- let voices;
32
- switch (midiEvent.type) {
33
- case "noteOn":
34
- voices = this.findFreeVoices(midiEvent.notes.length);
35
- break;
36
- case "noteOff":
37
- voices = midiEvent.notes.map((note) => {
38
- return this.audioModules.find((v) => v.activeNote === note.fullName);
39
- });
40
- break;
41
- default:
42
- throw Error("This type is not a note");
43
- }
44
- if (voices.length === 0)
45
- return;
46
- voices.forEach((voice, i) => {
47
- if (!voice)
48
- return;
49
- voice.midiTriggered(midiEvent, i);
50
- this.midiOutput.connections.forEach((input) => {
51
- input.pluggable(midiEvent, voice.voiceNo, i);
52
- });
53
- });
54
- };
55
- serialize() {
56
- const serialize = super.serialize();
57
- delete serialize.props.voiceNo;
58
- return {
59
- ...serialize,
60
- props: { ...serialize.props, polyNumber: this.polyNumber },
61
- };
62
- }
63
- findFreeVoices(num = 1) {
64
- let voices = this.audioModules.filter((v) => !v.activeNote).slice(0, num);
65
- if (voices.length === 0) {
66
- voices = this.audioModules
67
- .sort((a, b) => {
68
- if (!a || !b)
69
- return 0;
70
- return a.triggeredAt - b.triggeredAt;
71
- })
72
- .slice(0, num);
73
- }
74
- return voices;
75
- }
76
- registerInputs() {
77
- this.registerInput({
78
- name: "midi in",
79
- pluggable: this.midiTriggered,
80
- });
81
- }
82
- registerOutputs() {
83
- this.numberOfVoicesOut = this.registerOutput({
84
- name: "number of voices",
85
- onPlug: (input) => {
86
- if (input.audioModule instanceof Module)
87
- return;
88
- input.audioModule.numberOfVoices = this.numberOfVoices;
89
- },
90
- });
91
- this.midiOutput = this.registerOutput({ name: "midi out" });
92
- }
93
- }
94
- class Voice extends Module {
95
- midiEvent;
96
- activeNote;
97
- triggeredAt;
98
- midiOutput;
99
- constructor(name, props) {
100
- super(new DummnyInternalModule(), {
101
- name,
102
- props,
103
- });
104
- }
105
- midiTriggered = (midiEvent, noteIndex) => {
106
- if (this.voiceNo === undefined)
107
- throw Error("Voice without voiceNo");
108
- if (noteIndex === undefined)
109
- return;
110
- const { triggeredAt, notes, type } = midiEvent;
111
- const note = notes[noteIndex];
112
- if (!note)
113
- return;
114
- const noteName = note.fullName;
115
- switch (type) {
116
- case "noteOn":
117
- this.activeNote = noteName;
118
- this.triggeredAt = triggeredAt;
119
- this.midiEvent = midiEvent;
120
- break;
121
- case "noteOff":
122
- this.activeNote = null;
123
- this.midiEvent = null;
124
- break;
125
- default:
126
- throw Error("This type is not a note");
127
- }
128
- };
129
- }
130
- //# sourceMappingURL=VoiceScheduler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VoiceScheduler.js","sourceRoot":"","sources":["../../src/Module/VoiceScheduler.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { Volume as Vol } from "tone";
2
- import Module, { Voicable } from "./Base";
3
- import PolyModule from "./PolyModule";
4
- import Note from "../Note";
5
- export interface VolumeInterface extends Voicable {
6
- volume: number;
7
- }
8
- declare class MonoVolume extends Module<Vol, VolumeInterface> {
9
- constructor(name: string, props: Partial<VolumeInterface>);
10
- get volume(): number;
11
- set volume(value: number);
12
- triggerAttack: (note: Note, triggeredAt: number) => void;
13
- triggerRelease: (note: Note, triggeredAt: number) => void;
14
- }
15
- export default class Volume extends PolyModule<MonoVolume, VolumeInterface> {
16
- static moduleName: string;
17
- constructor(name: string, props: Partial<VolumeInterface>);
18
- private registerInputs;
19
- }
20
- export {};
@@ -1,48 +0,0 @@
1
- import { Volume as Vol } from "tone";
2
- import Module from "./Base";
3
- import PolyModule from "./PolyModule";
4
- const InitialProps = {
5
- volume: -Infinity,
6
- };
7
- class MonoVolume extends Module {
8
- constructor(name, props) {
9
- super(new Vol(), {
10
- name,
11
- props: { ...InitialProps, ...props },
12
- });
13
- }
14
- get volume() {
15
- return this._props["volume"];
16
- }
17
- set volume(value) {
18
- this._props = { ...this.props, volume: value };
19
- this.internalModule.volume.value = this.volume;
20
- }
21
- triggerAttack = (note, triggeredAt) => {
22
- const db = 20 * Math.log10(note.velocity);
23
- this.internalModule.volume.exponentialRampToValueAtTime(db, triggeredAt);
24
- };
25
- triggerRelease = (note, triggeredAt) => {
26
- // Do nothing
27
- };
28
- }
29
- export default class Volume extends PolyModule {
30
- static moduleName = "Volume";
31
- constructor(name, props) {
32
- super({
33
- name,
34
- child: MonoVolume,
35
- props: { ...InitialProps, ...props },
36
- });
37
- this.registerBasicInputs();
38
- this.registerBasicOutputs();
39
- this.registerInputs();
40
- }
41
- registerInputs() {
42
- this.registerInput({
43
- name: "midi in",
44
- pluggable: this.midiTriggered,
45
- });
46
- }
47
- }
48
- //# sourceMappingURL=Volume.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Volume.js","sourceRoot":"","sources":["../../src/Module/Volume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,MAAoB,MAAM,QAAQ,CAAC;AAC1C,OAAO,UAAU,MAAM,cAAc,CAAC;AAOtC,MAAM,YAAY,GAAoB;IACpC,MAAM,EAAE,CAAC,QAAQ;CAClB,CAAC;AAEF,MAAM,UAAW,SAAQ,MAA4B;IACnD,YAAY,IAAY,EAAE,KAA+B;QACvD,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE;YACf,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,CAAC,KAAa;QACtB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAE/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,CAAC;IAED,aAAa,GAAG,CAAC,IAAU,EAAE,WAAmB,EAAE,EAAE;QAClD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,4BAA4B,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC,CAAC;IAEF,cAAc,GAAG,CAAC,IAAU,EAAE,WAAmB,EAAE,EAAE;QACnD,aAAa;IACf,CAAC,CAAC;CACH;AAED,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,UAAuC;IACzE,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC;IAE7B,YAAY,IAAY,EAAE,KAA+B;QACvD,KAAK,CAAC;YACJ,IAAI;YACJ,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,aAAa,CAAC;YACjB,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,IAAI,CAAC,aAAa;SAC9B,CAAC,CAAC;IACL,CAAC"}
@@ -1,14 +0,0 @@
1
- import Module, { Connectable } from "./Base";
2
- import PolyModule from "./PolyModule";
3
- export { default } from "./Base";
4
- export { default as PolyModule } from "./PolyModule";
5
- export type { ModuleInterface, Connectable, Triggerable } from "./Base";
6
- export { default as Filter } from "./Filter";
7
- export { default as Oscillator } from "./Oscillator";
8
- export { default as Sequencer } from "./Sequencer";
9
- export { default as DataSequencer } from "./DataSequencer";
10
- export type { ISequence } from "./Sequencer";
11
- export type { IDataSequence } from "./DataSequencer";
12
- export { Envelope, AmpEnvelope, FreqEnvelope, EnvelopeStages, } from "./Envelope";
13
- export declare type AudioModule = Module<Connectable, any> | PolyModule<Module<Connectable, any>, any>;
14
- export declare function createModule(name: string, type: string, props: any): AudioModule;
@@ -1,66 +0,0 @@
1
- import { camelCase, upperFirst } from "lodash";
2
- import Oscillator from "./Oscillator";
3
- import { Envelope, AmpEnvelope, FreqEnvelope } from "./Envelope";
4
- import Filter from "./Filter";
5
- import Master from "./Master";
6
- import VoiceScheduler from "./VoiceScheduler";
7
- import MidiSelector from "./MidiSelector";
8
- import Volume from "./Volume";
9
- import VirtualMidi from "./VirtualMidi";
10
- import Reverb from "./Reverb";
11
- import Delay from "./Delay";
12
- import Distortion from "./Distortion";
13
- import BitCrusher from "./BitCrusher";
14
- import Sequencer from "./Sequencer";
15
- import DataSequencer from "./DataSequencer";
16
- export { default } from "./Base";
17
- export { default as PolyModule } from "./PolyModule";
18
- export { default as Filter } from "./Filter";
19
- export { default as Oscillator } from "./Oscillator";
20
- export { default as Sequencer } from "./Sequencer";
21
- export { default as DataSequencer } from "./DataSequencer";
22
- export { Envelope, AmpEnvelope, FreqEnvelope, EnvelopeStages, } from "./Envelope";
23
- export function createModule(name, type, props) {
24
- const klass = moduleClassFromType(type);
25
- return new klass(name, props);
26
- }
27
- function moduleClassFromType(type) {
28
- type = upperFirst(camelCase(type));
29
- switch (type) {
30
- case Oscillator.moduleName:
31
- return Oscillator;
32
- case Envelope.moduleName:
33
- return Envelope;
34
- case AmpEnvelope.moduleName:
35
- return AmpEnvelope;
36
- case FreqEnvelope.moduleName:
37
- return FreqEnvelope;
38
- case Filter.moduleName:
39
- return Filter;
40
- case Volume.moduleName:
41
- return Volume;
42
- case Master.moduleName:
43
- return Master;
44
- case VoiceScheduler.moduleName:
45
- return VoiceScheduler;
46
- case MidiSelector.moduleName:
47
- return MidiSelector;
48
- case VirtualMidi.moduleName:
49
- return VirtualMidi;
50
- case Reverb.moduleName:
51
- return Reverb;
52
- case Delay.moduleName:
53
- return Delay;
54
- case Distortion.moduleName:
55
- return Distortion;
56
- case BitCrusher.moduleName:
57
- return BitCrusher;
58
- case Sequencer.moduleName:
59
- return Sequencer;
60
- case DataSequencer.moduleName:
61
- return DataSequencer;
62
- default:
63
- throw Error(`Unknown module type ${type}`);
64
- }
65
- }
66
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
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;AACpC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,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,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAI3D,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,KAAK,aAAa,CAAC,UAAU;YAC3B,OAAO,aAAa,CAAC;QACvB;YACE,MAAM,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;KAC9C;AACH,CAAC"}
@@ -1,4 +0,0 @@
1
- declare const frequencyTable: {
2
- [key: string]: number;
3
- };
4
- export default frequencyTable;
@@ -1,146 +0,0 @@
1
- const frequencyTable = {
2
- C0: 16.35,
3
- "C#0": 17.32,
4
- Db0: 17.32,
5
- D0: 18.35,
6
- "D#0": 19.45,
7
- Eb0: 19.45,
8
- E0: 20.6,
9
- F0: 21.83,
10
- "F#0": 23.12,
11
- Gb0: 23.12,
12
- G0: 24.5,
13
- "G#0": 25.96,
14
- Ab0: 25.96,
15
- A0: 27.5,
16
- "A#0": 29.14,
17
- Bb0: 29.14,
18
- B0: 30.87,
19
- C1: 32.7,
20
- "C#1": 34.65,
21
- Db1: 34.65,
22
- D1: 36.71,
23
- "D#1": 38.89,
24
- Eb1: 38.89,
25
- E1: 41.2,
26
- F1: 43.65,
27
- "F#1": 46.25,
28
- Gb1: 46.25,
29
- G1: 49.0,
30
- "G#1": 51.91,
31
- Ab1: 51.91,
32
- A1: 55.0,
33
- "A#1": 58.27,
34
- Bb1: 58.27,
35
- B1: 61.74,
36
- C2: 65.41,
37
- "C#2": 69.3,
38
- Db2: 69.3,
39
- D2: 73.42,
40
- "D#2": 77.78,
41
- Eb2: 77.78,
42
- E2: 82.41,
43
- F2: 87.31,
44
- "F#2": 92.5,
45
- Gb2: 92.5,
46
- G2: 98.0,
47
- "G#2": 103.83,
48
- Ab2: 103.83,
49
- A2: 110.0,
50
- "A#2": 116.54,
51
- Bb2: 116.54,
52
- B2: 123.47,
53
- C3: 130.81,
54
- "C#3": 138.59,
55
- Db3: 138.59,
56
- D3: 146.83,
57
- "D#3": 155.56,
58
- Eb3: 155.56,
59
- E3: 164.81,
60
- F3: 174.61,
61
- "F#3": 185.0,
62
- Gb3: 185.0,
63
- G3: 196.0,
64
- "G#3": 207.65,
65
- Ab3: 207.65,
66
- A3: 220.0,
67
- "A#3": 233.08,
68
- Bb3: 233.08,
69
- B3: 246.94,
70
- C4: 261.63,
71
- "C#4": 277.18,
72
- Db4: 277.18,
73
- D4: 293.66,
74
- "D#4": 311.13,
75
- Eb4: 311.13,
76
- E4: 329.63,
77
- F4: 349.23,
78
- "F#4": 369.99,
79
- Gb4: 369.99,
80
- G4: 392.0,
81
- "G#4": 415.3,
82
- Ab4: 415.3,
83
- A4: 440.0,
84
- "A#4": 466.16,
85
- Bb4: 466.16,
86
- B4: 493.88,
87
- C5: 523.25,
88
- "C#5": 554.37,
89
- Db5: 554.37,
90
- D5: 587.33,
91
- "D#5": 622.25,
92
- Eb5: 622.25,
93
- E5: 659.26,
94
- F5: 698.46,
95
- "F#5": 739.99,
96
- Gb5: 739.99,
97
- G5: 783.99,
98
- "G#5": 830.61,
99
- Ab5: 830.61,
100
- A5: 880.0,
101
- "A#5": 932.33,
102
- Bb5: 932.33,
103
- B5: 987.77,
104
- C6: 1046.5,
105
- "C#6": 1108.73,
106
- Db6: 1108.73,
107
- D6: 1174.66,
108
- "D#6": 1244.51,
109
- Eb6: 1244.51,
110
- E6: 1318.51,
111
- F6: 1396.91,
112
- "F#6": 1479.98,
113
- Gb6: 1479.98,
114
- G6: 1567.98,
115
- "G#6": 1661.22,
116
- Ab6: 1661.22,
117
- A6: 1760.0,
118
- "A#6": 1864.66,
119
- Bb6: 1864.66,
120
- B6: 1975.53,
121
- C7: 2093.0,
122
- "C#7": 2217.46,
123
- Db7: 2217.46,
124
- D7: 2349.32,
125
- "D#7": 2489.02,
126
- Eb7: 2489.02,
127
- E7: 2637.02,
128
- F7: 2793.83,
129
- "F#7": 2959.96,
130
- Gb7: 2959.96,
131
- G7: 3135.96,
132
- "G#7": 3322.44,
133
- Ab7: 3322.44,
134
- A7: 3520.0,
135
- "A#7": 3729.31,
136
- Bb7: 3729.31,
137
- B7: 3951.07,
138
- C8: 4186.01,
139
- "C#8": 4434.92,
140
- Db8: 4434.92,
141
- D8: 4698.64,
142
- "D#8": 4978.03,
143
- Eb8: 4978.03,
144
- };
145
- export default frequencyTable;
146
- //# sourceMappingURL=frequencyTable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frequencyTable.js","sourceRoot":"","sources":["../../src/Note/frequencyTable.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- export interface INote {
2
- note: string;
3
- frequency: number;
4
- duration: string;
5
- velocity?: number;
6
- }
7
- export default class Note {
8
- static _notes: Note[];
9
- name: string;
10
- octave: number;
11
- velocity: number;
12
- duration: string;
13
- frequency: number;
14
- constructor(eventOrString: Partial<INote> | MIDIMessageEvent | string | number);
15
- static notes(octave?: number): Note[];
16
- get isSemi(): boolean;
17
- get fullName(): string;
18
- adjustFrequency(range?: number, coarse?: number): number;
19
- valueOf(): string;
20
- serialize(): INote;
21
- private fromFrequency;
22
- private fromString;
23
- private fromEvent;
24
- private fromProps;
25
- }
@@ -1,81 +0,0 @@
1
- import frequencyTable from "./frequencyTable";
2
- const Notes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
3
- const NotesLength = Notes.length;
4
- export default class Note {
5
- static _notes;
6
- name;
7
- octave;
8
- velocity = 1;
9
- duration;
10
- frequency;
11
- constructor(eventOrString) {
12
- if (typeof eventOrString === "number") {
13
- this.fromFrequency(eventOrString);
14
- }
15
- else if (typeof eventOrString === "string") {
16
- this.fromString(eventOrString);
17
- }
18
- else if (eventOrString instanceof MIDIMessageEvent) {
19
- this.fromEvent(eventOrString);
20
- }
21
- else {
22
- this.fromProps(eventOrString);
23
- }
24
- }
25
- static notes(octave = 3) {
26
- return Notes.map((note) => new Note(`${note}${octave}`));
27
- }
28
- get isSemi() {
29
- return this.name.slice(-1) === "#";
30
- }
31
- get fullName() {
32
- return `${this.name}${this.octave}`;
33
- }
34
- adjustFrequency(range = 0, coarse = 0) {
35
- if (this.frequency)
36
- return this.frequency;
37
- let newOctave = this.octave + range;
38
- let coarseIndex = Notes.indexOf(this.name) + coarse;
39
- let nameIndex = coarseIndex;
40
- if (coarseIndex >= NotesLength) {
41
- newOctave++;
42
- nameIndex = coarseIndex % NotesLength;
43
- }
44
- else if (coarseIndex < 0) {
45
- newOctave--;
46
- nameIndex = NotesLength + nameIndex;
47
- }
48
- const newName = Notes[nameIndex];
49
- return frequencyTable[`${newName}${newOctave}`];
50
- }
51
- valueOf() {
52
- return this.fullName;
53
- }
54
- serialize() {
55
- return {
56
- note: this.fullName,
57
- frequency: this.frequency,
58
- velocity: this.velocity,
59
- duration: this.duration,
60
- };
61
- }
62
- fromFrequency(frequency) {
63
- this.frequency = frequency;
64
- }
65
- fromString(string) {
66
- const matches = string.match(/(\w#?)(\d)?/) || [];
67
- this.name = matches[1];
68
- this.octave = matches[2] ? parseInt(matches[2]) : 1;
69
- }
70
- fromEvent(event) {
71
- this.name = Notes[event.data[1] % 12];
72
- this.octave = Math.floor(event.data[1] / 12) - 2;
73
- }
74
- fromProps(props) {
75
- Object.assign(this, props);
76
- if (!props.note)
77
- throw Error("note props is mandatory");
78
- this.fromString(props.note);
79
- }
80
- }
81
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Note/index.ts"],"names":[],"mappings":"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"}