@blibliki/engine 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/build/Engine.d.ts +114 -0
- package/build/Engine.js +81 -0
- package/build/Engine.js.map +1 -0
- package/build/MidiDevice.d.ts +25 -0
- package/build/MidiDevice.js +45 -0
- package/build/MidiDevice.js.map +1 -0
- package/build/MidiDeviceManager.d.ts +12 -0
- package/build/MidiDeviceManager.js +45 -0
- package/build/MidiDeviceManager.js.map +1 -0
- package/build/MidiEvent.d.ts +12 -0
- package/build/MidiEvent.js +37 -0
- package/build/MidiEvent.js.map +1 -0
- package/build/Module/Base.d.ts +72 -0
- package/build/Module/Base.js +139 -0
- package/build/Module/Base.js.map +1 -0
- package/build/Module/Envelope/AmpEnvelope.d.ts +8 -0
- package/build/Module/Envelope/AmpEnvelope.js +15 -0
- package/build/Module/Envelope/AmpEnvelope.js.map +1 -0
- package/build/Module/Envelope/Base.d.ts +45 -0
- package/build/Module/Envelope/Base.js +110 -0
- package/build/Module/Envelope/Base.js.map +1 -0
- package/build/Module/Envelope/FreqEnvelope.d.ts +17 -0
- package/build/Module/Envelope/FreqEnvelope.js +51 -0
- package/build/Module/Envelope/FreqEnvelope.js.map +1 -0
- package/build/Module/Envelope/index.d.ts +3 -0
- package/build/Module/Envelope/index.js +4 -0
- package/build/Module/Envelope/index.js.map +1 -0
- package/build/Module/Filter.d.ts +31 -0
- package/build/Module/Filter.js +83 -0
- package/build/Module/Filter.js.map +1 -0
- package/build/Module/IO.d.ts +39 -0
- package/build/Module/IO.js +59 -0
- package/build/Module/IO.js.map +1 -0
- package/build/Module/Master.d.ts +7 -0
- package/build/Module/Master.js +12 -0
- package/build/Module/Master.js.map +1 -0
- package/build/Module/MidiSelector.d.ts +16 -0
- package/build/Module/MidiSelector.js +44 -0
- package/build/Module/MidiSelector.js.map +1 -0
- package/build/Module/Oscillator.d.ts +42 -0
- package/build/Module/Oscillator.js +123 -0
- package/build/Module/Oscillator.js.map +1 -0
- package/build/Module/PolyModule.d.ts +57 -0
- package/build/Module/PolyModule.js +191 -0
- package/build/Module/PolyModule.js.map +1 -0
- package/build/Module/VoiceScheduler.d.ts +37 -0
- package/build/Module/VoiceScheduler.js +117 -0
- package/build/Module/VoiceScheduler.js.map +1 -0
- package/build/Module/Volume.d.ts +15 -0
- package/build/Module/Volume.js +34 -0
- package/build/Module/Volume.js.map +1 -0
- package/build/Module/index.d.ts +20 -0
- package/build/Module/index.js +60 -0
- package/build/Module/index.js.map +1 -0
- package/build/Note/frequencyTable.d.ts +4 -0
- package/build/Note/frequencyTable.js +146 -0
- package/build/Note/frequencyTable.js.map +1 -0
- package/build/Note/index.d.ts +13 -0
- package/build/Note/index.js +53 -0
- package/build/Note/index.js.map +1 -0
- package/build/index.d.ts +8 -0
- package/build/index.js +6 -0
- package/build/index.js.map +1 -0
- package/build/routes.d.ts +17 -0
- package/build/routes.js +23 -0
- package/build/routes.js.map +1 -0
- package/package.json +37 -0
- package/src/Engine.ts +129 -0
- package/src/MidiDevice.ts +67 -0
- package/src/MidiDeviceManager.ts +61 -0
- package/src/MidiEvent.ts +44 -0
- package/src/Module/Base.ts +200 -0
- package/src/Module/Envelope/AmpEnvelope.ts +17 -0
- package/src/Module/Envelope/Base.ts +159 -0
- package/src/Module/Envelope/FreqEnvelope.ts +69 -0
- package/src/Module/Envelope/index.ts +3 -0
- package/src/Module/Filter.ts +111 -0
- package/src/Module/IO.ts +85 -0
- package/src/Module/Master.ts +18 -0
- package/src/Module/MidiSelector.ts +64 -0
- package/src/Module/Oscillator.ts +166 -0
- package/src/Module/PolyModule.ts +243 -0
- package/src/Module/VoiceScheduler.ts +153 -0
- package/src/Module/Volume.ts +46 -0
- package/src/Module/index.ts +78 -0
- package/src/Note/frequencyTable.ts +146 -0
- package/src/Note/index.ts +65 -0
- package/src/index.ts +10 -0
- package/src/routes.ts +41 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Envelope as Env } from "tone";
|
|
2
|
+
import Module, { ModuleType, Connectable, Triggerable } from "../index";
|
|
3
|
+
import PolyModule, { PolyModuleType } from "../PolyModule";
|
|
4
|
+
import MidiEvent from "../../MidiEvent";
|
|
5
|
+
export declare const enum EnvelopeStages {
|
|
6
|
+
Attack = "attack",
|
|
7
|
+
Decay = "decay",
|
|
8
|
+
Sustain = "sustain",
|
|
9
|
+
Release = "release"
|
|
10
|
+
}
|
|
11
|
+
export interface EnvelopeInterface {
|
|
12
|
+
attack: number;
|
|
13
|
+
decay: number;
|
|
14
|
+
sustain: number;
|
|
15
|
+
release: number;
|
|
16
|
+
voiceNo?: number;
|
|
17
|
+
}
|
|
18
|
+
export default abstract class EnvelopeModule<EnvelopeLike extends Env> extends Module<EnvelopeLike, EnvelopeInterface> implements Triggerable {
|
|
19
|
+
activeNote?: string;
|
|
20
|
+
triggeredAt: number;
|
|
21
|
+
constructor(name: string, type: ModuleType, internalModule: EnvelopeLike, props: EnvelopeInterface);
|
|
22
|
+
get attack(): number;
|
|
23
|
+
set attack(value: number);
|
|
24
|
+
get decay(): number;
|
|
25
|
+
set decay(value: number);
|
|
26
|
+
get sustain(): number;
|
|
27
|
+
set sustain(value: number);
|
|
28
|
+
get release(): number;
|
|
29
|
+
set release(value: number);
|
|
30
|
+
setStage(stage: EnvelopeStages, value: number): void;
|
|
31
|
+
triggerAttack(midiEvent: MidiEvent): void;
|
|
32
|
+
triggerRelease(midiEvent: MidiEvent): void;
|
|
33
|
+
private maxTime;
|
|
34
|
+
private minTime;
|
|
35
|
+
}
|
|
36
|
+
export declare abstract class PolyBase<EnvelopeModule extends Module<Connectable, any>> extends PolyModule<EnvelopeModule, EnvelopeInterface> {
|
|
37
|
+
constructor(name: string, type: ModuleType, polyType: PolyModuleType, props: Partial<EnvelopeInterface>);
|
|
38
|
+
private registerInputs;
|
|
39
|
+
}
|
|
40
|
+
export declare class Envelope extends EnvelopeModule<Env> {
|
|
41
|
+
constructor(name: string, props: EnvelopeInterface);
|
|
42
|
+
}
|
|
43
|
+
export declare class PolyEnvelope extends PolyBase<Envelope> {
|
|
44
|
+
constructor(name: string, props: Partial<EnvelopeInterface>);
|
|
45
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Envelope as Env } from "tone";
|
|
2
|
+
import Module, { ModuleType } from "../index";
|
|
3
|
+
import PolyModule, { PolyModuleType } from "../PolyModule";
|
|
4
|
+
export var EnvelopeStages;
|
|
5
|
+
(function (EnvelopeStages) {
|
|
6
|
+
EnvelopeStages["Attack"] = "attack";
|
|
7
|
+
EnvelopeStages["Decay"] = "decay";
|
|
8
|
+
EnvelopeStages["Sustain"] = "sustain";
|
|
9
|
+
EnvelopeStages["Release"] = "release";
|
|
10
|
+
})(EnvelopeStages || (EnvelopeStages = {}));
|
|
11
|
+
const MAX_TIME = 2;
|
|
12
|
+
const MIN_TIME = 0.01;
|
|
13
|
+
const SUSTAIN_MAX_VALUE = 1;
|
|
14
|
+
const SUSTAIN_MIN_VALUE = 0;
|
|
15
|
+
const InitialProps = {
|
|
16
|
+
attack: MIN_TIME,
|
|
17
|
+
decay: MIN_TIME,
|
|
18
|
+
sustain: SUSTAIN_MAX_VALUE,
|
|
19
|
+
release: MIN_TIME,
|
|
20
|
+
};
|
|
21
|
+
export default class EnvelopeModule extends Module {
|
|
22
|
+
activeNote;
|
|
23
|
+
triggeredAt;
|
|
24
|
+
constructor(name, type, internalModule, props) {
|
|
25
|
+
super(internalModule, {
|
|
26
|
+
name,
|
|
27
|
+
type,
|
|
28
|
+
props: { ...InitialProps, ...props },
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
get attack() {
|
|
32
|
+
return this._props["attack"];
|
|
33
|
+
}
|
|
34
|
+
set attack(value) {
|
|
35
|
+
this.setStage(EnvelopeStages.Attack, value);
|
|
36
|
+
}
|
|
37
|
+
get decay() {
|
|
38
|
+
return this._props["decay"];
|
|
39
|
+
}
|
|
40
|
+
set decay(value) {
|
|
41
|
+
this.setStage(EnvelopeStages.Decay, value);
|
|
42
|
+
}
|
|
43
|
+
get sustain() {
|
|
44
|
+
return this._props["sustain"];
|
|
45
|
+
}
|
|
46
|
+
set sustain(value) {
|
|
47
|
+
this.setStage(EnvelopeStages.Sustain, value);
|
|
48
|
+
}
|
|
49
|
+
get release() {
|
|
50
|
+
return this._props["release"];
|
|
51
|
+
}
|
|
52
|
+
set release(value) {
|
|
53
|
+
this.setStage(EnvelopeStages.Release, value);
|
|
54
|
+
}
|
|
55
|
+
setStage(stage, value) {
|
|
56
|
+
const calculatedValue = value === 0 ? this.minTime(stage) : this.maxTime(stage) * value;
|
|
57
|
+
this._props = { ...this.props, [stage]: value };
|
|
58
|
+
this.internalModule[stage] = calculatedValue;
|
|
59
|
+
}
|
|
60
|
+
triggerAttack(midiEvent) {
|
|
61
|
+
const { note, triggeredAt } = midiEvent;
|
|
62
|
+
this.activeNote = note?.fullName;
|
|
63
|
+
this.triggeredAt = triggeredAt;
|
|
64
|
+
this.internalModule.triggerAttack(triggeredAt);
|
|
65
|
+
}
|
|
66
|
+
triggerRelease(midiEvent) {
|
|
67
|
+
const { note, triggeredAt } = midiEvent;
|
|
68
|
+
if (this.activeNote && this.activeNote !== note?.fullName)
|
|
69
|
+
return;
|
|
70
|
+
this.internalModule.triggerRelease(triggeredAt);
|
|
71
|
+
}
|
|
72
|
+
maxTime(stage) {
|
|
73
|
+
return stage === EnvelopeStages.Sustain ? SUSTAIN_MAX_VALUE : MAX_TIME;
|
|
74
|
+
}
|
|
75
|
+
minTime(stage) {
|
|
76
|
+
return stage === EnvelopeStages.Sustain ? SUSTAIN_MIN_VALUE : MIN_TIME;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export class PolyBase extends PolyModule {
|
|
80
|
+
constructor(name, type, polyType, props) {
|
|
81
|
+
super(polyType, {
|
|
82
|
+
name,
|
|
83
|
+
type,
|
|
84
|
+
props: { ...InitialProps, ...props },
|
|
85
|
+
});
|
|
86
|
+
this.registerBasicInputs();
|
|
87
|
+
this.registerBasicOutputs();
|
|
88
|
+
this.registerInputs();
|
|
89
|
+
}
|
|
90
|
+
registerInputs() {
|
|
91
|
+
this.registerInput({
|
|
92
|
+
name: "midi in",
|
|
93
|
+
pluggable: this.midiTriggered,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export class Envelope extends EnvelopeModule {
|
|
98
|
+
constructor(name, props) {
|
|
99
|
+
super(name, ModuleType.Envelope, new Env(), props);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export class PolyEnvelope extends PolyBase {
|
|
103
|
+
constructor(name, props) {
|
|
104
|
+
super(name, ModuleType.Envelope, PolyModuleType.Envelope, {
|
|
105
|
+
...InitialProps,
|
|
106
|
+
...props,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=Base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Base.js","sourceRoot":"","sources":["../../../src/Module/Envelope/Base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FrequencyEnvelope } from "tone";
|
|
2
|
+
import Filter from "../Filter";
|
|
3
|
+
import Base, { EnvelopeInterface, PolyBase } from "./Base";
|
|
4
|
+
export default class FreqEnvelope extends Base<FrequencyEnvelope> {
|
|
5
|
+
private _frequency;
|
|
6
|
+
private _amount;
|
|
7
|
+
filter: Filter;
|
|
8
|
+
constructor(name: string, props: EnvelopeInterface);
|
|
9
|
+
get frequency(): number;
|
|
10
|
+
set frequency(value: number);
|
|
11
|
+
get amount(): number;
|
|
12
|
+
set amount(value: number);
|
|
13
|
+
}
|
|
14
|
+
export declare class PolyFreqEnvelope extends PolyBase<FreqEnvelope> {
|
|
15
|
+
constructor(name: string, props: Partial<EnvelopeInterface>);
|
|
16
|
+
protected registerOutputs(): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { FrequencyEnvelope } from "tone";
|
|
2
|
+
import { ModuleType } from "../Base";
|
|
3
|
+
import { PolyModuleType } from "../PolyModule";
|
|
4
|
+
import Base, { PolyBase } from "./Base";
|
|
5
|
+
const InitialProps = {
|
|
6
|
+
amount: 0,
|
|
7
|
+
};
|
|
8
|
+
export default class FreqEnvelope extends Base {
|
|
9
|
+
_frequency;
|
|
10
|
+
_amount;
|
|
11
|
+
filter;
|
|
12
|
+
constructor(name, props) {
|
|
13
|
+
super(name, ModuleType.FreqEnvelope, new FrequencyEnvelope(), {
|
|
14
|
+
...InitialProps,
|
|
15
|
+
...props,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
get frequency() {
|
|
19
|
+
return this._frequency;
|
|
20
|
+
}
|
|
21
|
+
set frequency(value) {
|
|
22
|
+
this._frequency = value;
|
|
23
|
+
this.internalModule.baseFrequency = value;
|
|
24
|
+
}
|
|
25
|
+
get amount() {
|
|
26
|
+
return this._amount;
|
|
27
|
+
}
|
|
28
|
+
set amount(value) {
|
|
29
|
+
this._amount = value;
|
|
30
|
+
this.internalModule.octaves = value;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class PolyFreqEnvelope extends PolyBase {
|
|
34
|
+
constructor(name, props) {
|
|
35
|
+
super(name, ModuleType.FreqEnvelope, PolyModuleType.FreqEnvelope, props);
|
|
36
|
+
this.registerOutputs();
|
|
37
|
+
}
|
|
38
|
+
registerOutputs() {
|
|
39
|
+
this.registerOutput({
|
|
40
|
+
name: "frequency",
|
|
41
|
+
pluggable: this,
|
|
42
|
+
onPlug: (output) => {
|
|
43
|
+
this.connect(output.audioModule, output.pluggable);
|
|
44
|
+
},
|
|
45
|
+
onUnPlug: (output) => {
|
|
46
|
+
this.disconnect(output.audioModule, output.pluggable);
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=FreqEnvelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FreqEnvelope.js","sourceRoot":"","sources":["../../../src/Module/Envelope/FreqEnvelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,IAAI,EAAE,EAAqB,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAM3D,MAAM,YAAY,GAA0B;IAC1C,MAAM,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,IAAuB;IACvD,UAAU,CAAS;IACnB,OAAO,CAAS;IACxB,MAAM,CAAS;IAEf,YAAY,IAAY,EAAE,KAAwB;QAChD,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,EAAE,IAAI,iBAAiB,EAAE,EAAE;YAC5D,GAAG,YAAY;YACf,GAAG,KAAK;SACT,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,SAAS,CAAC,KAAa;QACzB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,KAAK,CAAC;IAC5C,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,MAAM,CAAC,KAAa;QACtB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAsB;IAC1D,YAAY,IAAY,EAAE,KAAiC;QACzD,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,EAAE,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAEzE,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAES,eAAe;QACvB,IAAI,CAAC,cAAc,CAAC;YAClB,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE;gBACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACrD,CAAC;YACD,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE;gBAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Module/Envelope/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Filter as InternalFilter } from "tone";
|
|
2
|
+
import { FreqEnvelope } from "./Envelope";
|
|
3
|
+
import Module from "./Base";
|
|
4
|
+
import PolyModule from "./PolyModule";
|
|
5
|
+
import { PolyFreqEnvelope } from "./Envelope/FreqEnvelope";
|
|
6
|
+
interface FilterInterface {
|
|
7
|
+
cutoff: number;
|
|
8
|
+
resonance: number;
|
|
9
|
+
envelopeAmount: number;
|
|
10
|
+
voiceNo?: number;
|
|
11
|
+
}
|
|
12
|
+
interface FilterProps extends Partial<FilterInterface> {
|
|
13
|
+
}
|
|
14
|
+
export default class Filter extends Module<InternalFilter, FilterInterface> {
|
|
15
|
+
private _envelope;
|
|
16
|
+
constructor(name: string, props: FilterProps);
|
|
17
|
+
get cutoff(): number;
|
|
18
|
+
set cutoff(value: number);
|
|
19
|
+
get frequency(): import("tone").Signal<"frequency">;
|
|
20
|
+
get resonance(): number;
|
|
21
|
+
set resonance(value: number);
|
|
22
|
+
get envelopeAmount(): number;
|
|
23
|
+
set envelopeAmount(value: number);
|
|
24
|
+
conntectedEnvelope(envelope: FreqEnvelope): void;
|
|
25
|
+
}
|
|
26
|
+
export declare class PolyFilter extends PolyModule<Filter, FilterInterface> {
|
|
27
|
+
constructor(name: string, props: Partial<FilterInterface>);
|
|
28
|
+
private registerInputs;
|
|
29
|
+
conntectedEnvelope(polyFreqEnvelope: PolyFreqEnvelope): void;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Filter as InternalFilter } from "tone";
|
|
2
|
+
import Module, { ModuleType } from "./Base";
|
|
3
|
+
import PolyModule, { PolyModuleType } from "./PolyModule";
|
|
4
|
+
const InitialProps = {
|
|
5
|
+
cutoff: 20000,
|
|
6
|
+
resonance: 0,
|
|
7
|
+
envelopeAmount: 0,
|
|
8
|
+
};
|
|
9
|
+
export default class Filter extends Module {
|
|
10
|
+
_envelope;
|
|
11
|
+
constructor(name, props) {
|
|
12
|
+
super(new InternalFilter({ type: "lowpass" }), {
|
|
13
|
+
name,
|
|
14
|
+
props: { ...InitialProps, ...props },
|
|
15
|
+
type: ModuleType.Filter,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
get cutoff() {
|
|
19
|
+
return this._props["cutoff"];
|
|
20
|
+
}
|
|
21
|
+
set cutoff(value) {
|
|
22
|
+
this._props = { ...this.props, cutoff: value };
|
|
23
|
+
if (this._envelope) {
|
|
24
|
+
this._envelope.frequency = value;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this.internalModule.frequency.value = value;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
get frequency() {
|
|
31
|
+
return this.internalModule.frequency;
|
|
32
|
+
}
|
|
33
|
+
get resonance() {
|
|
34
|
+
return this._props["resonance"];
|
|
35
|
+
}
|
|
36
|
+
set resonance(value) {
|
|
37
|
+
this._props = { ...this.props, resonance: value };
|
|
38
|
+
this.internalModule.Q.value = value;
|
|
39
|
+
}
|
|
40
|
+
get envelopeAmount() {
|
|
41
|
+
return this._props["envelopeAmount"];
|
|
42
|
+
}
|
|
43
|
+
set envelopeAmount(value) {
|
|
44
|
+
this._props = { ...this.props, envelopeAmount: value };
|
|
45
|
+
if (!this._envelope)
|
|
46
|
+
return;
|
|
47
|
+
this._envelope.amount = value;
|
|
48
|
+
}
|
|
49
|
+
conntectedEnvelope(envelope) {
|
|
50
|
+
this._envelope = envelope;
|
|
51
|
+
this._envelope.frequency = this.cutoff;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export class PolyFilter extends PolyModule {
|
|
55
|
+
constructor(name, props) {
|
|
56
|
+
super(PolyModuleType.Filter, {
|
|
57
|
+
name,
|
|
58
|
+
props: { ...InitialProps, ...props },
|
|
59
|
+
type: ModuleType.Filter,
|
|
60
|
+
});
|
|
61
|
+
this.registerBasicInputs();
|
|
62
|
+
this.registerBasicOutputs();
|
|
63
|
+
this.registerInputs();
|
|
64
|
+
}
|
|
65
|
+
registerInputs() {
|
|
66
|
+
this.registerInput({
|
|
67
|
+
name: "frequency",
|
|
68
|
+
pluggable: "frequency",
|
|
69
|
+
onPlug: (output) => {
|
|
70
|
+
this.conntectedEnvelope(output.audioModule);
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
conntectedEnvelope(polyFreqEnvelope) {
|
|
75
|
+
polyFreqEnvelope.audioModules.forEach((envelope) => {
|
|
76
|
+
if (envelope.voiceNo === undefined)
|
|
77
|
+
return;
|
|
78
|
+
const filter = this.findVoice(envelope.voiceNo);
|
|
79
|
+
filter?.conntectedEnvelope(envelope);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=Filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Filter.js","sourceRoot":"","sources":["../../src/Module/Filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,UAAU,EAAE,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAY1D,MAAM,YAAY,GAAoB;IACpC,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,CAAC;IACZ,cAAc,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,MAAuC;IACjE,SAAS,CAAe;IAEhC,YAAY,IAAY,EAAE,KAAkB;QAC1C,KAAK,CAAC,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE;YAC7C,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;YACpC,IAAI,EAAE,UAAU,CAAC,MAAM;SACxB,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,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;SAClC;aAAM;YACL,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;SAC7C;IACH,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,SAAS,CAAC,KAAa;QACzB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAElD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;IACtC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,cAAc,CAAC,KAAa;QAC9B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;QAEvD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,QAAsB;QACvC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,UAAmC;IACjE,YAAY,IAAY,EAAE,KAA+B;QACvD,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE;YAC3B,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;YACpC,IAAI,EAAE,UAAU,CAAC,MAAM;SACxB,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,WAAW;YACjB,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAA+B,CAAC,CAAC;YAClE,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,gBAAkC;QACnD,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACjD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;gBAAE,OAAO;YAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AudioModule } from "../Module";
|
|
2
|
+
export interface IOInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
pluggable?: any;
|
|
5
|
+
onPlug?: (io: IO) => void;
|
|
6
|
+
onUnPlug?: (io: IO) => void;
|
|
7
|
+
}
|
|
8
|
+
export interface SerializeInterface {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
moduleId: string;
|
|
12
|
+
moduleName: string;
|
|
13
|
+
}
|
|
14
|
+
declare enum IOType {
|
|
15
|
+
Input = "input",
|
|
16
|
+
Output = "output"
|
|
17
|
+
}
|
|
18
|
+
declare abstract class IO {
|
|
19
|
+
id: string;
|
|
20
|
+
ioType: IOType;
|
|
21
|
+
name: string;
|
|
22
|
+
audioModule: AudioModule;
|
|
23
|
+
pluggable: any;
|
|
24
|
+
onPlug: (io: IO) => void;
|
|
25
|
+
onUnPlug: (io: IO) => void;
|
|
26
|
+
connections: Input[] | Output[];
|
|
27
|
+
constructor(ioType: IOType, audioModule: AudioModule, props: IOInterface);
|
|
28
|
+
plug(io: IO): void;
|
|
29
|
+
unPlug(io: IO): void;
|
|
30
|
+
unPlugAll(): void;
|
|
31
|
+
serialize(): SerializeInterface;
|
|
32
|
+
}
|
|
33
|
+
export declare class Input extends IO {
|
|
34
|
+
constructor(audioModule: AudioModule, props: IOInterface);
|
|
35
|
+
}
|
|
36
|
+
export declare class Output extends IO {
|
|
37
|
+
constructor(audioModule: AudioModule, props: IOInterface);
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from "uuid";
|
|
2
|
+
var IOType;
|
|
3
|
+
(function (IOType) {
|
|
4
|
+
IOType["Input"] = "input";
|
|
5
|
+
IOType["Output"] = "output";
|
|
6
|
+
})(IOType || (IOType = {}));
|
|
7
|
+
class IO {
|
|
8
|
+
id;
|
|
9
|
+
ioType;
|
|
10
|
+
name;
|
|
11
|
+
audioModule;
|
|
12
|
+
pluggable;
|
|
13
|
+
onPlug;
|
|
14
|
+
onUnPlug;
|
|
15
|
+
connections = [];
|
|
16
|
+
constructor(ioType, audioModule, props) {
|
|
17
|
+
this.id = uuidv4();
|
|
18
|
+
this.ioType = ioType;
|
|
19
|
+
this.audioModule = audioModule;
|
|
20
|
+
Object.assign(this, props);
|
|
21
|
+
}
|
|
22
|
+
plug(io) {
|
|
23
|
+
if (this.onPlug)
|
|
24
|
+
this.onPlug(io);
|
|
25
|
+
if (this.ioType === IOType.Output)
|
|
26
|
+
io.plug(this);
|
|
27
|
+
this.connections.push(io);
|
|
28
|
+
}
|
|
29
|
+
unPlug(io) {
|
|
30
|
+
if (this.onUnPlug)
|
|
31
|
+
this.onUnPlug(io);
|
|
32
|
+
if (this.ioType === IOType.Output) {
|
|
33
|
+
io.unPlug(this);
|
|
34
|
+
}
|
|
35
|
+
this.connections = this.connections.filter((current_io) => current_io.id !== io.id);
|
|
36
|
+
}
|
|
37
|
+
unPlugAll() {
|
|
38
|
+
this.connections.forEach((c) => this.unPlug(c));
|
|
39
|
+
}
|
|
40
|
+
serialize() {
|
|
41
|
+
return {
|
|
42
|
+
id: this.id,
|
|
43
|
+
name: this.name,
|
|
44
|
+
moduleId: this.audioModule.id,
|
|
45
|
+
moduleName: this.audioModule.name,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class Input extends IO {
|
|
50
|
+
constructor(audioModule, props) {
|
|
51
|
+
super(IOType.Input, audioModule, props);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export class Output extends IO {
|
|
55
|
+
constructor(audioModule, props) {
|
|
56
|
+
super(IOType.Output, audioModule, props);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=IO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IO.js","sourceRoot":"","sources":["../../src/Module/IO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAiBpC,IAAK,MAGJ;AAHD,WAAK,MAAM;IACT,yBAAe,CAAA;IACf,2BAAiB,CAAA;AACnB,CAAC,EAHI,MAAM,KAAN,MAAM,QAGV;AAED,MAAe,EAAE;IACf,EAAE,CAAS;IACX,MAAM,CAAS;IACf,IAAI,CAAS;IACb,WAAW,CAAc;IACzB,SAAS,CAAM;IACf,MAAM,CAAmB;IACzB,QAAQ,CAAmB;IAC3B,WAAW,GAAuB,EAAE,CAAC;IAErC,YAAY,MAAc,EAAE,WAAwB,EAAE,KAAkB;QACtE,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,EAAM;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,EAAM;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;YACjC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACxC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CACxC,CAAC;IACJ,CAAC;IAED,SAAS;QACP,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,SAAS;QACP,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;YAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;SAClC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,KAAM,SAAQ,EAAE;IAC3B,YAAY,WAAwB,EAAE,KAAkB;QACtD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,MAAO,SAAQ,EAAE;IAC5B,YAAY,WAAwB,EAAE,KAAkB;QACtD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { getDestination } from "tone";
|
|
2
|
+
import Module, { ModuleType } from "../Module";
|
|
3
|
+
export default class Master extends Module {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(getDestination(), {
|
|
6
|
+
name: "Master",
|
|
7
|
+
type: ModuleType.Master,
|
|
8
|
+
});
|
|
9
|
+
this.registerBasicInputs();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=Master.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Master.js","sourceRoot":"","sources":["../../src/Module/Master.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,cAAc,EAAE,MAAM,MAAM,CAAC;AACnD,OAAO,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI/C,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,MAGnC;IACC;QACE,KAAK,CAAC,cAAc,EAAE,EAAE;YACtB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU,CAAC,MAAM;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import MidiDevice from "../MidiDevice";
|
|
2
|
+
import MidiEvent from "../MidiEvent";
|
|
3
|
+
import Module, { DummnyInternalModule } from "./Base";
|
|
4
|
+
import { Output } from "./IO";
|
|
5
|
+
export interface MidiSelectorInterface {
|
|
6
|
+
selectedId: string | null;
|
|
7
|
+
}
|
|
8
|
+
export default class MidiSelector extends Module<DummnyInternalModule, MidiSelectorInterface> {
|
|
9
|
+
midiOutput: Output;
|
|
10
|
+
constructor(name: string, props: Partial<MidiSelectorInterface>);
|
|
11
|
+
get selectedId(): string | null;
|
|
12
|
+
set selectedId(value: string | null);
|
|
13
|
+
onMidiEvent: (midiEvent: MidiEvent) => void;
|
|
14
|
+
availableDevices(): Promise<MidiDevice[]>;
|
|
15
|
+
private registerOutputs;
|
|
16
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import MidiDeviceManager from "../MidiDeviceManager";
|
|
2
|
+
import Module, { ModuleType, DummnyInternalModule } from "./Base";
|
|
3
|
+
const InitialProps = {
|
|
4
|
+
selectedId: null,
|
|
5
|
+
};
|
|
6
|
+
export default class MidiSelector extends Module {
|
|
7
|
+
midiOutput;
|
|
8
|
+
constructor(name, props) {
|
|
9
|
+
super(new DummnyInternalModule(), {
|
|
10
|
+
name,
|
|
11
|
+
props: { ...InitialProps, ...props },
|
|
12
|
+
type: ModuleType.MidiSelector,
|
|
13
|
+
});
|
|
14
|
+
this.registerOutputs();
|
|
15
|
+
}
|
|
16
|
+
get selectedId() {
|
|
17
|
+
return this._props["selectedId"];
|
|
18
|
+
}
|
|
19
|
+
set selectedId(value) {
|
|
20
|
+
if (this.selectedId) {
|
|
21
|
+
MidiDeviceManager.find(this.selectedId).then((midiDevice) => {
|
|
22
|
+
midiDevice.removeEventListener(this.onMidiEvent);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
this._props = { ...this.props, selectedId: value };
|
|
26
|
+
if (!value)
|
|
27
|
+
return;
|
|
28
|
+
MidiDeviceManager.find(value).then((midiDevice) => {
|
|
29
|
+
midiDevice.addEventListener(this.onMidiEvent);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
onMidiEvent = (midiEvent) => {
|
|
33
|
+
this.midiOutput.connections.forEach((input) => {
|
|
34
|
+
input.pluggable(midiEvent);
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
async availableDevices() {
|
|
38
|
+
return MidiDeviceManager.fetchDevices();
|
|
39
|
+
}
|
|
40
|
+
registerOutputs() {
|
|
41
|
+
this.midiOutput = this.registerOutput({ name: "midi out" });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=MidiSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MidiSelector.js","sourceRoot":"","sources":["../../src/Module/MidiSelector.ts"],"names":[],"mappings":"AACA,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AAErD,OAAO,MAAM,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAOlE,MAAM,YAAY,GAA0B;IAC1C,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,MAGzC;IACC,UAAU,CAAS;IAEnB,YAAY,IAAY,EAAE,KAAqC;QAC7D,KAAK,CAAC,IAAI,oBAAoB,EAAE,EAAE;YAChC,IAAI;YACJ,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE;YACpC,IAAI,EAAE,UAAU,CAAC,YAAY;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,UAAU,CAAC,KAAoB;QACjC,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,UAAsB,EAAE,EAAE;gBACtE,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAEnD,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,UAAsB,EAAE,EAAE;YAC5D,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,GAAG,CAAC,SAAoB,EAAE,EAAE;QACrC,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,CAAC;IAEF,KAAK,CAAC,gBAAgB;QACpB,OAAO,iBAAiB,CAAC,YAAY,EAAE,CAAC;IAC1C,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import MidiEvent from "../MidiEvent";
|
|
2
|
+
import { Oscillator as Osc } from "tone";
|
|
3
|
+
import Module from "../Module";
|
|
4
|
+
import Note from "../Note";
|
|
5
|
+
import PolyModule from "./PolyModule";
|
|
6
|
+
export interface OscillatorInterface {
|
|
7
|
+
noteName: string;
|
|
8
|
+
fine: number;
|
|
9
|
+
coarse: number;
|
|
10
|
+
wave: string;
|
|
11
|
+
volume: number;
|
|
12
|
+
range: number;
|
|
13
|
+
voiceNo?: number;
|
|
14
|
+
}
|
|
15
|
+
export default class Oscillator extends Module<Osc, OscillatorInterface> {
|
|
16
|
+
private _note;
|
|
17
|
+
constructor(name: string, props: Partial<OscillatorInterface>);
|
|
18
|
+
get note(): Note;
|
|
19
|
+
setNoteAt(value: Note | string, time: number): void;
|
|
20
|
+
set note(value: Note | string);
|
|
21
|
+
get noteName(): string;
|
|
22
|
+
set noteName(value: string);
|
|
23
|
+
get fine(): number;
|
|
24
|
+
set fine(value: number);
|
|
25
|
+
get coarse(): number;
|
|
26
|
+
set coarse(value: number);
|
|
27
|
+
get wave(): string;
|
|
28
|
+
set wave(value: string);
|
|
29
|
+
get volume(): number;
|
|
30
|
+
set volume(value: number);
|
|
31
|
+
get range(): number;
|
|
32
|
+
set range(value: number);
|
|
33
|
+
start(): void;
|
|
34
|
+
triggerAttack(midiEvent: MidiEvent): void;
|
|
35
|
+
triggerRelease(midiEvent: MidiEvent): void;
|
|
36
|
+
private updateFrequency;
|
|
37
|
+
private getNote;
|
|
38
|
+
}
|
|
39
|
+
export declare class PolyOscillator extends PolyModule<Oscillator, OscillatorInterface> {
|
|
40
|
+
constructor(name: string, props: Partial<OscillatorInterface>);
|
|
41
|
+
private registerInputs;
|
|
42
|
+
}
|