@opendaw/studio-adapters 0.3.3 → 0.3.5
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/dist/BoxAdapters.d.ts.map +1 -1
- package/dist/BoxAdapters.js +8 -0
- package/dist/DeviceAdapter.d.ts +17 -1
- package/dist/DeviceAdapter.d.ts.map +1 -1
- package/dist/DeviceManualUrls.d.ts +3 -0
- package/dist/DeviceManualUrls.d.ts.map +1 -1
- package/dist/DeviceManualUrls.js +3 -0
- package/dist/Validator.d.ts.map +1 -1
- package/dist/Validator.js +4 -19
- package/dist/audio-unit/AudioUnitBoxAdapter.d.ts +2 -1
- package/dist/audio-unit/AudioUnitBoxAdapter.d.ts.map +1 -1
- package/dist/audio-unit/AudioUnitBoxAdapter.js +1 -0
- package/dist/audio-unit/AuxSendBoxAdapter.d.ts +1 -0
- package/dist/audio-unit/AuxSendBoxAdapter.d.ts.map +1 -1
- package/dist/audio-unit/AuxSendBoxAdapter.js +1 -0
- package/dist/devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter.d.ts +2 -1
- package/dist/devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter.d.ts.map +1 -1
- package/dist/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.d.ts +8 -5
- package/dist/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.d.ts.map +1 -1
- package/dist/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.js +9 -3
- package/dist/devices/audio-effects/AudioEffectCompositeBoxAdapter.d.ts +2 -0
- package/dist/devices/audio-effects/AudioEffectCompositeBoxAdapter.d.ts.map +1 -1
- package/dist/devices/audio-effects/AudioEffectCompositeBoxAdapter.js +1 -0
- package/dist/devices/audio-effects/AudioSinkDeviceBoxAdapter.d.ts +33 -0
- package/dist/devices/audio-effects/AudioSinkDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/AudioSinkDeviceBoxAdapter.js +60 -0
- package/dist/devices/audio-effects/CrusherDeviceBoxAdapter.js +1 -1
- package/dist/devices/audio-effects/FrequencySplitBoxAdapter.d.ts +3 -0
- package/dist/devices/audio-effects/FrequencySplitBoxAdapter.d.ts.map +1 -1
- package/dist/devices/audio-effects/FrequencySplitBoxAdapter.js +8 -0
- package/dist/devices/audio-effects/StereoCompositeBoxAdapter.d.ts +2 -0
- package/dist/devices/audio-effects/StereoCompositeBoxAdapter.d.ts.map +1 -1
- package/dist/devices/audio-effects/StereoCompositeBoxAdapter.js +1 -0
- package/dist/devices/instruments/Cubed/CubedStep.js +1 -1
- package/dist/devices/instruments/InstrumentComposite/InstrumentCompositeCellBoxAdapter.d.ts +49 -0
- package/dist/devices/instruments/InstrumentComposite/InstrumentCompositeCellBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/InstrumentComposite/InstrumentCompositeCellBoxAdapter.js +88 -0
- package/dist/devices/instruments/InstrumentCompositeBoxAdapter.d.ts +33 -0
- package/dist/devices/instruments/InstrumentCompositeBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/InstrumentCompositeBoxAdapter.js +55 -0
- package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts +14 -1
- package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts.map +1 -1
- package/dist/devices/instruments/NanoDeviceBoxAdapter.js +28 -5
- package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts +2 -1
- package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts.map +1 -1
- package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.js +1 -0
- package/dist/devices/instruments/Tubular/Dx7Sysex.d.ts +23 -0
- package/dist/devices/instruments/Tubular/Dx7Sysex.d.ts.map +1 -0
- package/dist/devices/instruments/Tubular/Dx7Sysex.js +159 -0
- package/dist/devices/instruments/Tubular/TubularPreset.d.ts +6 -0
- package/dist/devices/instruments/Tubular/TubularPreset.d.ts.map +1 -0
- package/dist/devices/instruments/Tubular/TubularPreset.js +39 -0
- package/dist/devices/instruments/TubularDeviceBoxAdapter.d.ts +100 -0
- package/dist/devices/instruments/TubularDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/TubularDeviceBoxAdapter.js +177 -0
- package/dist/factories/InstrumentBox.d.ts +2 -2
- package/dist/factories/InstrumentBox.d.ts.map +1 -1
- package/dist/factories/InstrumentFactories.d.ts +9 -2
- package/dist/factories/InstrumentFactories.d.ts.map +1 -1
- package/dist/factories/InstrumentFactories.js +40 -4
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/preset/PresetDecoder.d.ts +3 -2
- package/dist/preset/PresetDecoder.d.ts.map +1 -1
- package/dist/preset/PresetDecoder.js +51 -6
- package/dist/preset/PresetEncoder.d.ts +1 -0
- package/dist/preset/PresetEncoder.d.ts.map +1 -1
- package/dist/preset/PresetEncoder.js +36 -0
- package/dist/timeline/RegionOverlap.d.ts +13 -0
- package/dist/timeline/RegionOverlap.d.ts.map +1 -0
- package/dist/timeline/RegionOverlap.js +32 -0
- package/dist/transfer/TransferUtils.d.ts +4 -1
- package/dist/transfer/TransferUtils.d.ts.map +1 -1
- package/dist/transfer/TransferUtils.js +18 -0
- package/package.json +11 -11
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Dx7Sysex } from "./Dx7Sysex";
|
|
2
|
+
// Moves a 155-byte DX7 voice into and out of a TubularDeviceBox. Box operators are OP1..OP6 (panel order),
|
|
3
|
+
// the voice stores OP6 first. Call `apply` inside `editing.modify` so a load is one undoable transaction.
|
|
4
|
+
export var TubularPreset;
|
|
5
|
+
(function (TubularPreset) {
|
|
6
|
+
const operatorFields = (operator) => [
|
|
7
|
+
operator.rate1, operator.rate2, operator.rate3, operator.rate4,
|
|
8
|
+
operator.level1, operator.level2, operator.level3, operator.level4,
|
|
9
|
+
operator.breakPoint, operator.leftDepth, operator.rightDepth, operator.leftCurve, operator.rightCurve,
|
|
10
|
+
operator.rateScaling, operator.ampModSens, operator.velocitySens, operator.outputLevel,
|
|
11
|
+
operator.mode, operator.coarse, operator.fine, operator.detune
|
|
12
|
+
];
|
|
13
|
+
const globalFields = (box) => [
|
|
14
|
+
box.pitchEnvelope.rate1, box.pitchEnvelope.rate2, box.pitchEnvelope.rate3, box.pitchEnvelope.rate4,
|
|
15
|
+
box.pitchEnvelope.level1, box.pitchEnvelope.level2, box.pitchEnvelope.level3, box.pitchEnvelope.level4,
|
|
16
|
+
box.algorithm, box.feedback, box.oscKeySync,
|
|
17
|
+
box.lfo.speed, box.lfo.delay, box.lfo.pmDepth, box.lfo.amDepth, box.lfo.sync, box.lfo.wave,
|
|
18
|
+
box.pitchModSens, box.transpose
|
|
19
|
+
];
|
|
20
|
+
TubularPreset.apply = (box, voice) => {
|
|
21
|
+
box.operators.fields().forEach((operator, index) => {
|
|
22
|
+
const offset = (5 - index) * 21;
|
|
23
|
+
operatorFields(operator).forEach((field, key) => field.setValue(voice[offset + key]));
|
|
24
|
+
operator.enabled.setValue(1);
|
|
25
|
+
});
|
|
26
|
+
globalFields(box).forEach((field, index) => field.setValue(voice[126 + index]));
|
|
27
|
+
box.label.setValue(Dx7Sysex.voiceName(voice));
|
|
28
|
+
box.voiceLoad.setValue(box.voiceLoad.getValue() + 1);
|
|
29
|
+
};
|
|
30
|
+
TubularPreset.read = (box) => {
|
|
31
|
+
const voice = new Uint8Array(Dx7Sysex.PATCH_SIZE);
|
|
32
|
+
box.operators.fields().forEach((operator, index) => {
|
|
33
|
+
const offset = (5 - index) * 21;
|
|
34
|
+
operatorFields(operator).forEach((field, key) => voice[offset + key] = field.getValue());
|
|
35
|
+
});
|
|
36
|
+
globalFields(box).forEach((field, index) => voice[126 + index] = field.getValue());
|
|
37
|
+
return Dx7Sysex.withName(voice, box.label.getValue());
|
|
38
|
+
};
|
|
39
|
+
})(TubularPreset || (TubularPreset = {}));
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { UUID } from "@opendaw/lib-std";
|
|
2
|
+
import { TubularDeviceBox } from "@opendaw/studio-boxes";
|
|
3
|
+
import { Address, BooleanField, StringField } from "@opendaw/lib-box";
|
|
4
|
+
import { DeviceHost, InstrumentDeviceBoxAdapter } from "../../DeviceAdapter";
|
|
5
|
+
import { LabeledAudioOutput } from "../../LabeledAudioOutputsOwner";
|
|
6
|
+
import { BoxAdaptersContext } from "../../BoxAdaptersContext";
|
|
7
|
+
import { TrackType } from "../../timeline/TrackType";
|
|
8
|
+
import { AudioUnitBoxAdapter } from "../../audio-unit/AudioUnitBoxAdapter";
|
|
9
|
+
export declare namespace Tubular {
|
|
10
|
+
const Algorithms: string[];
|
|
11
|
+
const Curves: string[];
|
|
12
|
+
const Modes: string[];
|
|
13
|
+
const Detunes: string[];
|
|
14
|
+
const LfoWaves: string[];
|
|
15
|
+
const Switch: string[];
|
|
16
|
+
const Engines: string[];
|
|
17
|
+
type OperatorRole = {
|
|
18
|
+
carrier: boolean;
|
|
19
|
+
targets: ReadonlyArray<number>;
|
|
20
|
+
feedback: boolean;
|
|
21
|
+
};
|
|
22
|
+
const roles: (algorithm: number) => ReadonlyArray<OperatorRole>;
|
|
23
|
+
const Transposes: string[];
|
|
24
|
+
}
|
|
25
|
+
export declare class TubularDeviceBoxAdapter implements InstrumentDeviceBoxAdapter {
|
|
26
|
+
#private;
|
|
27
|
+
readonly type = "instrument";
|
|
28
|
+
readonly accepts = "midi";
|
|
29
|
+
readonly manualUrl = "manuals/devices/instruments/tubular";
|
|
30
|
+
readonly namedParameter: {
|
|
31
|
+
readonly cutoff: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
32
|
+
readonly resonance: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
33
|
+
readonly volume: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
34
|
+
readonly voicingMode: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
35
|
+
readonly tune: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
36
|
+
readonly algorithm: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
37
|
+
readonly feedback: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
38
|
+
readonly oscKeySync: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
39
|
+
readonly lfo: {
|
|
40
|
+
readonly speed: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
41
|
+
readonly delay: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
42
|
+
readonly pmDepth: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
43
|
+
readonly amDepth: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
44
|
+
readonly sync: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
45
|
+
readonly wave: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
46
|
+
};
|
|
47
|
+
readonly pitchModSens: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
48
|
+
readonly transpose: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
49
|
+
readonly pitchEnvelope: {
|
|
50
|
+
readonly rate1: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
51
|
+
readonly rate2: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
52
|
+
readonly rate3: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
53
|
+
readonly rate4: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
54
|
+
readonly level1: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
55
|
+
readonly level2: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
56
|
+
readonly level3: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
57
|
+
readonly level4: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
58
|
+
};
|
|
59
|
+
readonly operators: {
|
|
60
|
+
rate1: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
61
|
+
rate2: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
62
|
+
rate3: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
63
|
+
rate4: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
64
|
+
level1: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
65
|
+
level2: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
66
|
+
level3: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
67
|
+
level4: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
68
|
+
breakPoint: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
69
|
+
leftDepth: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
70
|
+
rightDepth: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
71
|
+
leftCurve: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
72
|
+
rightCurve: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
73
|
+
rateScaling: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
74
|
+
ampModSens: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
75
|
+
velocitySens: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
76
|
+
outputLevel: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
77
|
+
mode: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
78
|
+
coarse: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
79
|
+
fine: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
80
|
+
detune: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
81
|
+
enabled: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
82
|
+
}[];
|
|
83
|
+
};
|
|
84
|
+
constructor(context: BoxAdaptersContext, box: TubularDeviceBox);
|
|
85
|
+
get box(): TubularDeviceBox;
|
|
86
|
+
get uuid(): UUID.Bytes;
|
|
87
|
+
get address(): Address;
|
|
88
|
+
get spectrum(): Address;
|
|
89
|
+
get labelField(): StringField;
|
|
90
|
+
get iconField(): StringField;
|
|
91
|
+
get defaultTrackType(): TrackType;
|
|
92
|
+
get enabledField(): BooleanField;
|
|
93
|
+
get minimizedField(): BooleanField;
|
|
94
|
+
get acceptsMidiEvents(): boolean;
|
|
95
|
+
deviceHost(): DeviceHost;
|
|
96
|
+
audioUnitBoxAdapter(): AudioUnitBoxAdapter;
|
|
97
|
+
labeledAudioOutputs(): Iterable<LabeledAudioOutput>;
|
|
98
|
+
terminate(): void;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=TubularDeviceBoxAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TubularDeviceBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/instruments/TubularDeviceBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,IAAI,EAAe,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAC,gBAAgB,EAAkB,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAC,OAAO,EAAE,YAAY,EAAc,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAE/E,OAAO,EAAC,UAAU,EAAW,0BAA0B,EAAC,MAAM,qBAAqB,CAAA;AACnF,OAAO,EAAC,kBAAkB,EAAC,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAG3D,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAA;AAExE,yBAAiB,OAAO,CAAC;IACd,MAAM,UAAU,UAA4D,CAAA;IAC5E,MAAM,MAAM,UAAmC,CAAA;IAC/C,MAAM,KAAK,UAAqB,CAAA;IAChC,MAAM,OAAO,UAA8G,CAAA;IAC3H,MAAM,QAAQ,UAA8D,CAAA;IAC5E,MAAM,MAAM,UAAgB,CAAA;IAC5B,MAAM,OAAO,UAAuB,CAAA;IAiB3C,KAAY,YAAY,GAAG;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAC,CAAA;IAMzF,MAAM,KAAK,GAAI,WAAW,MAAM,KAAG,aAAa,CAAC,YAAY,CAsBnE,CAAA;IAGM,MAAM,UAAU,UAGrB,CAAA;CACL;AAID,qBAAa,uBAAwB,YAAW,0BAA0B;;IACtE,QAAQ,CAAC,IAAI,gBAAe;IAC5B,QAAQ,CAAC,OAAO,UAAS;IACzB,QAAQ,CAAC,SAAS,yCAA2B;IAM7C,QAAQ,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAA;gBAEX,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB;IAO9D,IAAI,GAAG,IAAI,gBAAgB,CAAmB;IAC9C,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,QAAQ,IAAI,OAAO,CAAyC;IAChE,IAAI,UAAU,IAAI,WAAW,CAAyB;IACtD,IAAI,SAAS,IAAI,WAAW,CAAwB;IACpD,IAAI,gBAAgB,IAAI,SAAS,CAAyB;IAC1D,IAAI,YAAY,IAAI,YAAY,CAA2B;IAC3D,IAAI,cAAc,IAAI,YAAY,CAA6B;IAC/D,IAAI,iBAAiB,IAAI,OAAO,CAAc;IAE9C,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAEzC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIpD,SAAS,IAAI,IAAI;CA8EpB"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _TubularDeviceBoxAdapter_instances, _TubularDeviceBoxAdapter_context, _TubularDeviceBoxAdapter_box, _TubularDeviceBoxAdapter_parametric, _TubularDeviceBoxAdapter_wrapParameters;
|
|
13
|
+
import { Option, StringMapping, ValueMapping } from "@opendaw/lib-std";
|
|
14
|
+
import { VoicingMode } from "@opendaw/studio-enums";
|
|
15
|
+
import { Devices } from "../../DeviceAdapter";
|
|
16
|
+
import { DeviceManualUrls } from "../../DeviceManualUrls";
|
|
17
|
+
import { ParameterAdapterSet } from "../../ParameterAdapterSet";
|
|
18
|
+
import { TrackType } from "../../timeline/TrackType";
|
|
19
|
+
export var Tubular;
|
|
20
|
+
(function (Tubular) {
|
|
21
|
+
Tubular.Algorithms = Array.from({ length: 32 }, (_, index) => String(index + 1));
|
|
22
|
+
Tubular.Curves = ["-LIN", "-EXP", "+EXP", "+LIN"];
|
|
23
|
+
Tubular.Modes = ["Ratio", "Fixed"];
|
|
24
|
+
Tubular.Detunes = Array.from({ length: 15 }, (_, index) => index === 7 ? "0" : index > 7 ? `+${index - 7}` : String(index - 7));
|
|
25
|
+
Tubular.LfoWaves = ["Triangle", "Saw Down", "Saw Up", "Square", "Sine", "S&H"];
|
|
26
|
+
Tubular.Switch = ["Off", "On"];
|
|
27
|
+
Tubular.Engines = ["Mark I", "Modern"];
|
|
28
|
+
// The 32 algorithms as msfa bus flags per operator in SYSEX order (OP6 first): bits 0-1 out bus (0 =
|
|
29
|
+
// output), bit 2 add to bus, bits 4-5 in bus, bits 6-7 feedback. Mirrors `ALGORITHMS` in fm.rs.
|
|
30
|
+
const ALGORITHMS = [
|
|
31
|
+
[0xc1, 0x11, 0x11, 0x14, 0x01, 0x14], [0x01, 0x11, 0x11, 0x14, 0xc1, 0x14], [0xc1, 0x11, 0x14, 0x01, 0x11, 0x14],
|
|
32
|
+
[0xc1, 0x11, 0x94, 0x01, 0x11, 0x14], [0xc1, 0x14, 0x01, 0x14, 0x01, 0x14], [0xc1, 0x94, 0x01, 0x14, 0x01, 0x14],
|
|
33
|
+
[0xc1, 0x11, 0x05, 0x14, 0x01, 0x14], [0x01, 0x11, 0xc5, 0x14, 0x01, 0x14], [0x01, 0x11, 0x05, 0x14, 0xc1, 0x14],
|
|
34
|
+
[0x01, 0x05, 0x14, 0xc1, 0x11, 0x14], [0xc1, 0x05, 0x14, 0x01, 0x11, 0x14], [0x01, 0x05, 0x05, 0x14, 0xc1, 0x14],
|
|
35
|
+
[0xc1, 0x05, 0x05, 0x14, 0x01, 0x14], [0xc1, 0x05, 0x11, 0x14, 0x01, 0x14], [0x01, 0x05, 0x11, 0x14, 0xc1, 0x14],
|
|
36
|
+
[0xc1, 0x11, 0x02, 0x25, 0x05, 0x14], [0x01, 0x11, 0x02, 0x25, 0xc5, 0x14], [0x01, 0x11, 0x11, 0xc5, 0x05, 0x14],
|
|
37
|
+
[0xc1, 0x14, 0x14, 0x01, 0x11, 0x14], [0x01, 0x05, 0x14, 0xc1, 0x14, 0x14], [0x01, 0x14, 0x14, 0xc1, 0x14, 0x14],
|
|
38
|
+
[0xc1, 0x14, 0x14, 0x14, 0x01, 0x14], [0xc1, 0x14, 0x14, 0x01, 0x14, 0x04], [0xc1, 0x14, 0x14, 0x14, 0x04, 0x04],
|
|
39
|
+
[0xc1, 0x14, 0x14, 0x04, 0x04, 0x04], [0xc1, 0x05, 0x14, 0x01, 0x14, 0x04], [0x01, 0x05, 0x14, 0xc1, 0x14, 0x04],
|
|
40
|
+
[0x04, 0xc1, 0x11, 0x14, 0x01, 0x14], [0xc1, 0x14, 0x01, 0x14, 0x04, 0x04], [0x04, 0xc1, 0x11, 0x14, 0x04, 0x04],
|
|
41
|
+
[0xc1, 0x14, 0x04, 0x04, 0x04, 0x04], [0xc4, 0x04, 0x04, 0x04, 0x04, 0x04]
|
|
42
|
+
];
|
|
43
|
+
// Each operator's role in `algorithm` (0-based), indexed by PANEL operator (0 = OP1): what it modulates
|
|
44
|
+
// (panel numbers 1-6), whether it reaches the output, whether it feeds back into itself. Follows the
|
|
45
|
+
// engine's bus walk: an operator writing a bus replaces (or adds to) its content, a reader takes all
|
|
46
|
+
// current writers.
|
|
47
|
+
Tubular.roles = (algorithm) => {
|
|
48
|
+
const flags = ALGORITHMS[Math.max(0, Math.min(31, algorithm))];
|
|
49
|
+
const result = Array.from({ length: 6 }, () => ({ carrier: false, targets: [], feedback: false }));
|
|
50
|
+
const writers = [[], []];
|
|
51
|
+
flags.forEach((flag, index) => {
|
|
52
|
+
const panel = 5 - index;
|
|
53
|
+
const outBus = flag & 3;
|
|
54
|
+
const add = (flag & 4) !== 0;
|
|
55
|
+
const inBus = (flag >> 4) & 3;
|
|
56
|
+
result[panel].feedback = (flag & 0xc0) === 0xc0;
|
|
57
|
+
if (inBus > 0) {
|
|
58
|
+
writers[inBus - 1].forEach(writer => result[writer].targets.push(panel + 1));
|
|
59
|
+
}
|
|
60
|
+
if (outBus === 0) {
|
|
61
|
+
result[panel].carrier = true;
|
|
62
|
+
}
|
|
63
|
+
else if (add) {
|
|
64
|
+
writers[outBus - 1].push(panel);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
writers[outBus - 1] = [panel];
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
result.forEach(role => role.targets.sort((a, b) => a - b));
|
|
71
|
+
return result;
|
|
72
|
+
};
|
|
73
|
+
// Transpose 0..48 around 24 = C3 (the DX7 panel's key display)
|
|
74
|
+
Tubular.Transposes = Array.from({ length: 49 }, (_, index) => {
|
|
75
|
+
const names = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
|
|
76
|
+
return `${names[index % 12]}${Math.floor(index / 12) + 1}`;
|
|
77
|
+
});
|
|
78
|
+
})(Tubular || (Tubular = {}));
|
|
79
|
+
export class TubularDeviceBoxAdapter {
|
|
80
|
+
constructor(context, box) {
|
|
81
|
+
_TubularDeviceBoxAdapter_instances.add(this);
|
|
82
|
+
this.type = "instrument";
|
|
83
|
+
this.accepts = "midi";
|
|
84
|
+
this.manualUrl = DeviceManualUrls.Tubular;
|
|
85
|
+
_TubularDeviceBoxAdapter_context.set(this, void 0);
|
|
86
|
+
_TubularDeviceBoxAdapter_box.set(this, void 0);
|
|
87
|
+
_TubularDeviceBoxAdapter_parametric.set(this, void 0);
|
|
88
|
+
__classPrivateFieldSet(this, _TubularDeviceBoxAdapter_context, context, "f");
|
|
89
|
+
__classPrivateFieldSet(this, _TubularDeviceBoxAdapter_box, box, "f");
|
|
90
|
+
__classPrivateFieldSet(this, _TubularDeviceBoxAdapter_parametric, new ParameterAdapterSet(__classPrivateFieldGet(this, _TubularDeviceBoxAdapter_context, "f")), "f");
|
|
91
|
+
this.namedParameter = __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_instances, "m", _TubularDeviceBoxAdapter_wrapParameters).call(this, box);
|
|
92
|
+
}
|
|
93
|
+
get box() { return __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_box, "f"); }
|
|
94
|
+
get uuid() { return __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_box, "f").address.uuid; }
|
|
95
|
+
get address() { return __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_box, "f").address; }
|
|
96
|
+
get spectrum() { return __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_box, "f").address.append(0xFFF); }
|
|
97
|
+
get labelField() { return __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_box, "f").label; }
|
|
98
|
+
get iconField() { return __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_box, "f").icon; }
|
|
99
|
+
get defaultTrackType() { return TrackType.Notes; }
|
|
100
|
+
get enabledField() { return __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_box, "f").enabled; }
|
|
101
|
+
get minimizedField() { return __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_box, "f").minimized; }
|
|
102
|
+
get acceptsMidiEvents() { return true; }
|
|
103
|
+
deviceHost() {
|
|
104
|
+
return __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_context, "f").boxAdapters
|
|
105
|
+
.adapterFor(__classPrivateFieldGet(this, _TubularDeviceBoxAdapter_box, "f").host.targetVertex.unwrap("no device-host").box, Devices.isHost);
|
|
106
|
+
}
|
|
107
|
+
audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }
|
|
108
|
+
*labeledAudioOutputs() {
|
|
109
|
+
yield { address: this.address, label: this.labelField.getValue(), children: () => Option.None };
|
|
110
|
+
}
|
|
111
|
+
terminate() {
|
|
112
|
+
__classPrivateFieldGet(this, _TubularDeviceBoxAdapter_parametric, "f").terminate();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
_TubularDeviceBoxAdapter_context = new WeakMap(), _TubularDeviceBoxAdapter_box = new WeakMap(), _TubularDeviceBoxAdapter_parametric = new WeakMap(), _TubularDeviceBoxAdapter_instances = new WeakSet(), _TubularDeviceBoxAdapter_wrapParameters = function _TubularDeviceBoxAdapter_wrapParameters(box) {
|
|
116
|
+
const VoiceModes = [VoicingMode.Monophonic, VoicingMode.Polyphonic];
|
|
117
|
+
const byte = (field, max, name) => __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_parametric, "f").createParameter(field, ValueMapping.linearInteger(0, max), StringMapping.numeric({ unit: "", fractionDigits: 0 }), name);
|
|
118
|
+
const choice = (field, labels, name) => __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_parametric, "f").createParameter(field, ValueMapping.linearInteger(0, labels.length - 1), StringMapping.indices("", labels), name);
|
|
119
|
+
const operator = (fields, index) => {
|
|
120
|
+
const prefix = `OP${index + 1}`;
|
|
121
|
+
return {
|
|
122
|
+
rate1: byte(fields.rate1, 99, `${prefix} Rate 1`),
|
|
123
|
+
rate2: byte(fields.rate2, 99, `${prefix} Rate 2`),
|
|
124
|
+
rate3: byte(fields.rate3, 99, `${prefix} Rate 3`),
|
|
125
|
+
rate4: byte(fields.rate4, 99, `${prefix} Rate 4`),
|
|
126
|
+
level1: byte(fields.level1, 99, `${prefix} Level 1`),
|
|
127
|
+
level2: byte(fields.level2, 99, `${prefix} Level 2`),
|
|
128
|
+
level3: byte(fields.level3, 99, `${prefix} Level 3`),
|
|
129
|
+
level4: byte(fields.level4, 99, `${prefix} Level 4`),
|
|
130
|
+
breakPoint: byte(fields.breakPoint, 99, `${prefix} Break Point`),
|
|
131
|
+
leftDepth: byte(fields.leftDepth, 99, `${prefix} Left Depth`),
|
|
132
|
+
rightDepth: byte(fields.rightDepth, 99, `${prefix} Right Depth`),
|
|
133
|
+
leftCurve: choice(fields.leftCurve, Tubular.Curves, `${prefix} Left Curve`),
|
|
134
|
+
rightCurve: choice(fields.rightCurve, Tubular.Curves, `${prefix} Right Curve`),
|
|
135
|
+
rateScaling: byte(fields.rateScaling, 7, `${prefix} Rate Scaling`),
|
|
136
|
+
ampModSens: byte(fields.ampModSens, 3, `${prefix} Amp Mod Sens`),
|
|
137
|
+
velocitySens: byte(fields.velocitySens, 7, `${prefix} Velocity Sens`),
|
|
138
|
+
outputLevel: byte(fields.outputLevel, 99, `${prefix} Level`),
|
|
139
|
+
mode: choice(fields.mode, Tubular.Modes, `${prefix} Mode`),
|
|
140
|
+
coarse: byte(fields.coarse, 31, `${prefix} Coarse`),
|
|
141
|
+
fine: byte(fields.fine, 99, `${prefix} Fine`),
|
|
142
|
+
detune: choice(fields.detune, Tubular.Detunes, `${prefix} Detune`),
|
|
143
|
+
enabled: choice(fields.enabled, Tubular.Switch, `${prefix} Switch`)
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
cutoff: __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_parametric, "f").createParameter(box.cutoff, ValueMapping.unipolar(), StringMapping.percent({ fractionDigits: 0 }), "Cutoff", 1.0),
|
|
148
|
+
resonance: __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_parametric, "f").createParameter(box.resonance, ValueMapping.unipolar(), StringMapping.percent({ fractionDigits: 0 }), "Resonance"),
|
|
149
|
+
volume: __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_parametric, "f").createParameter(box.volume, ValueMapping.unipolar(), StringMapping.percent({ fractionDigits: 0 }), "Volume", 1.0),
|
|
150
|
+
voicingMode: __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_parametric, "f").createParameter(box.voicingMode, ValueMapping.values(VoiceModes), StringMapping.values("", VoiceModes, ["mono", "poly"]), "Play Mode", 0.5),
|
|
151
|
+
tune: __classPrivateFieldGet(this, _TubularDeviceBoxAdapter_parametric, "f").createParameter(box.tune, ValueMapping.linear(-100, 100), StringMapping.numeric({ unit: "ct", fractionDigits: 0 }), "Tune", 0.5),
|
|
152
|
+
algorithm: choice(box.algorithm, Tubular.Algorithms, "Algorithm"),
|
|
153
|
+
feedback: byte(box.feedback, 7, "Feedback"),
|
|
154
|
+
oscKeySync: choice(box.oscKeySync, Tubular.Switch, "Osc Key Sync"),
|
|
155
|
+
lfo: {
|
|
156
|
+
speed: byte(box.lfo.speed, 99, "LFO Speed"),
|
|
157
|
+
delay: byte(box.lfo.delay, 99, "LFO Delay"),
|
|
158
|
+
pmDepth: byte(box.lfo.pmDepth, 99, "LFO PM Depth"),
|
|
159
|
+
amDepth: byte(box.lfo.amDepth, 99, "LFO AM Depth"),
|
|
160
|
+
sync: choice(box.lfo.sync, Tubular.Switch, "LFO Key Sync"),
|
|
161
|
+
wave: choice(box.lfo.wave, Tubular.LfoWaves, "LFO Wave")
|
|
162
|
+
},
|
|
163
|
+
pitchModSens: byte(box.pitchModSens, 7, "Pitch Mod Sens"),
|
|
164
|
+
transpose: choice(box.transpose, Tubular.Transposes, "Transpose"),
|
|
165
|
+
pitchEnvelope: {
|
|
166
|
+
rate1: byte(box.pitchEnvelope.rate1, 99, "Pitch EG Rate 1"),
|
|
167
|
+
rate2: byte(box.pitchEnvelope.rate2, 99, "Pitch EG Rate 2"),
|
|
168
|
+
rate3: byte(box.pitchEnvelope.rate3, 99, "Pitch EG Rate 3"),
|
|
169
|
+
rate4: byte(box.pitchEnvelope.rate4, 99, "Pitch EG Rate 4"),
|
|
170
|
+
level1: byte(box.pitchEnvelope.level1, 99, "Pitch EG Level 1"),
|
|
171
|
+
level2: byte(box.pitchEnvelope.level2, 99, "Pitch EG Level 2"),
|
|
172
|
+
level3: byte(box.pitchEnvelope.level3, 99, "Pitch EG Level 3"),
|
|
173
|
+
level4: byte(box.pitchEnvelope.level4, 99, "Pitch EG Level 4")
|
|
174
|
+
},
|
|
175
|
+
operators: box.operators.fields().map(operator)
|
|
176
|
+
};
|
|
177
|
+
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ApparatDeviceBox, CubedDeviceBox, NeonDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, SoundfontDeviceBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
-
export type InstrumentBox = ApparatDeviceBox | CubedDeviceBox | TapeDeviceBox | VaporisateurDeviceBox | NeonDeviceBox | NanoDeviceBox | PlayfieldDeviceBox | SoundfontDeviceBox | MIDIOutputDeviceBox;
|
|
1
|
+
import { ApparatDeviceBox, CubedDeviceBox, NeonDeviceBox, TubularDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, InstrumentCompositeBox, PlayfieldDeviceBox, SoundfontDeviceBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
+
export type InstrumentBox = ApparatDeviceBox | CubedDeviceBox | TapeDeviceBox | VaporisateurDeviceBox | NeonDeviceBox | TubularDeviceBox | NanoDeviceBox | PlayfieldDeviceBox | InstrumentCompositeBox | SoundfontDeviceBox | MIDIOutputDeviceBox;
|
|
3
3
|
//# sourceMappingURL=InstrumentBox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstrumentBox.d.ts","sourceRoot":"","sources":["../../src/factories/InstrumentBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACxB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,aAAa,GACnB,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,qBAAqB,GACrB,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,kBAAkB,GAClB,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"InstrumentBox.d.ts","sourceRoot":"","sources":["../../src/factories/InstrumentBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACxB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,aAAa,GACnB,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,qBAAqB,GACrB,aAAa,GACb,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,sBAAsB,GACtB,kBAAkB,GAClB,mBAAmB,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { ApparatDeviceBox, AudioFileBox, CubedDeviceBox, NeonDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, SoundfontDeviceBox, SoundfontFileBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
-
import { byte, UUID } from "@opendaw/lib-std";
|
|
1
|
+
import { ApparatDeviceBox, AudioFileBox, CubedDeviceBox, NeonDeviceBox, TubularDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, InstrumentCompositeBox, PlayfieldDeviceBox, SoundfontDeviceBox, SoundfontFileBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
+
import { byte, Optional, UUID } from "@opendaw/lib-std";
|
|
3
|
+
import { Box } from "@opendaw/lib-box";
|
|
3
4
|
import { InstrumentFactory } from "./InstrumentFactory";
|
|
4
5
|
export declare namespace InstrumentFactories {
|
|
5
6
|
const Tape: InstrumentFactory<void, TapeDeviceBox>;
|
|
@@ -18,10 +19,15 @@ export declare namespace InstrumentFactories {
|
|
|
18
19
|
const MIDIOutput: InstrumentFactory<void, MIDIOutputDeviceBox>;
|
|
19
20
|
const Soundfont: InstrumentFactory<SoundfontFileBox, SoundfontDeviceBox>;
|
|
20
21
|
const Apparat: InstrumentFactory<void, ApparatDeviceBox>;
|
|
22
|
+
const InstrumentComposite: InstrumentFactory<void, InstrumentCompositeBox>;
|
|
23
|
+
const isLayerInstrument: (factory: InstrumentFactory<any, any>) => boolean;
|
|
24
|
+
const Tubular: InstrumentFactory<void, TubularDeviceBox>;
|
|
21
25
|
const Named: {
|
|
22
26
|
Apparat: InstrumentFactory<void, ApparatDeviceBox>;
|
|
23
27
|
Cubed: InstrumentFactory<void, CubedDeviceBox>;
|
|
28
|
+
InstrumentComposite: InstrumentFactory<void, InstrumentCompositeBox>;
|
|
24
29
|
Neon: InstrumentFactory<void, NeonDeviceBox>;
|
|
30
|
+
Tubular: InstrumentFactory<void, TubularDeviceBox>;
|
|
25
31
|
MIDIOutput: InstrumentFactory<void, MIDIOutputDeviceBox>;
|
|
26
32
|
Nano: InstrumentFactory<AudioFileBox, NanoDeviceBox>;
|
|
27
33
|
Playfield: InstrumentFactory<PlayfieldAttachment, PlayfieldDeviceBox>;
|
|
@@ -30,5 +36,6 @@ export declare namespace InstrumentFactories {
|
|
|
30
36
|
Vaporisateur: InstrumentFactory<void, VaporisateurDeviceBox>;
|
|
31
37
|
};
|
|
32
38
|
type Keys = keyof typeof Named;
|
|
39
|
+
const keyOfBox: (box: Box) => Optional<Keys>;
|
|
33
40
|
}
|
|
34
41
|
//# sourceMappingURL=InstrumentFactories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstrumentFactories.d.ts","sourceRoot":"","sources":["../../src/factories/InstrumentFactories.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,YAAY,EAEZ,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAElB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAC,IAAI,EAAa,IAAI,EAAC,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"InstrumentFactories.d.ts","sourceRoot":"","sources":["../../src/factories/InstrumentFactories.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,YAAY,EAEZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAElB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAC,IAAI,EAAa,QAAQ,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAEhE,OAAO,EAAC,GAAG,EAAkB,MAAM,kBAAkB,CAAA;AAGrD,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AAGrD,yBAAiB,mBAAmB,CAAC;IAC1B,MAAM,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAoBvD,CAAA;IAEM,MAAM,IAAI,EAAE,iBAAiB,CAAC,YAAY,EAAE,aAAa,CAiB/D,CAAA;IAED,KAAY,mBAAmB,GAAG,aAAa,CAAC;QAC5C,IAAI,EAAE,IAAI,CAAA;QACV,IAAI,EAAE,IAAI,CAAC,KAAK,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,iBAAiB,EAAE,MAAM,CAAA;QACzB,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC,CAAA;IAEK,MAAM,SAAS,EAAE,iBAAiB,CAAC,mBAAmB,EAAE,kBAAkB,CA8BhF,CAAA;IAEM,MAAM,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAiCvD,CAAA;IAEM,MAAM,KAAK,EAAE,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAiBzD,CAAA;IAEM,MAAM,YAAY,EAAE,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,CA8BvE,CAAA;IAEM,MAAM,UAAU,EAAE,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,CAiBnE,CAAA;IAEM,MAAM,SAAS,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,kBAAkB,CAkB7E,CAAA;IAEM,MAAM,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAe7D,CAAA;IAEM,MAAM,mBAAmB,EAAE,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,CAiB/E,CAAA;IAGM,MAAM,iBAAiB,GAAI,SAAS,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,KAAG,OACN,CAAA;IAE5D,MAAM,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAmB7D,CAAA;IAEM,MAAM,KAAK;;;;;;;;;;;;KAAmH,CAAA;IACrI,KAAY,IAAI,GAAG,MAAM,OAAO,KAAK,CAAA;IAE9B,MAAM,QAAQ,GAAI,KAAK,GAAG,KAAG,QAAQ,CAAC,IAAI,CAGhD,CAAA;CAYJ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ApparatDeviceBox, AudioFileBox, CubedDeviceBox, NeonDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, PlayfieldSampleBox, SoundfontDeviceBox, SoundfontFileBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
1
|
+
import { ApparatDeviceBox, AudioFileBox, CubedDeviceBox, NeonDeviceBox, TubularDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, InstrumentCompositeBox, PlayfieldDeviceBox, PlayfieldSampleBox, SoundfontDeviceBox, SoundfontFileBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
|
|
2
2
|
import { isDefined, UUID } from "@opendaw/lib-std";
|
|
3
3
|
import { ClassicWaveform } from "@opendaw/lib-dsp";
|
|
4
4
|
import { IconSymbol, VoicingMode } from "@opendaw/studio-enums";
|
|
@@ -26,8 +26,8 @@ export var InstrumentFactories;
|
|
|
26
26
|
InstrumentFactories.Nano = {
|
|
27
27
|
defaultName: "Nano",
|
|
28
28
|
defaultIcon: IconSymbol.NanoWave,
|
|
29
|
-
briefDescription: "
|
|
30
|
-
description: "
|
|
29
|
+
briefDescription: "Polyphonic Sampler",
|
|
30
|
+
description: "Polyphonic sampler with root key, region, crossfade loop and envelope",
|
|
31
31
|
manualPage: DeviceManualUrls.Nano,
|
|
32
32
|
trackType: TrackType.Notes,
|
|
33
33
|
create: (boxGraph, host, name, icon, attachment) => NanoDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
@@ -176,7 +176,43 @@ export var InstrumentFactories;
|
|
|
176
176
|
box.host.refer(host);
|
|
177
177
|
})
|
|
178
178
|
};
|
|
179
|
-
InstrumentFactories.
|
|
179
|
+
InstrumentFactories.InstrumentComposite = {
|
|
180
|
+
defaultName: "Composite",
|
|
181
|
+
defaultIcon: IconSymbol.Stack,
|
|
182
|
+
briefDescription: "Layered instruments",
|
|
183
|
+
description: "Plays several instruments at once, each layer with its own effects, volume and panning",
|
|
184
|
+
manualPage: DeviceManualUrls.InstrumentComposite,
|
|
185
|
+
trackType: TrackType.Notes,
|
|
186
|
+
create: (boxGraph, host, name, icon) => {
|
|
187
|
+
return InstrumentCompositeBox.create(boxGraph, UUID.generate(), box => {
|
|
188
|
+
box.label.setValue(name);
|
|
189
|
+
box.icon.setValue(IconSymbol.toName(icon));
|
|
190
|
+
box.host.refer(host);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
// MIDI Output is wired at unit level only
|
|
195
|
+
InstrumentFactories.isLayerInstrument = (factory) => factory.trackType === TrackType.Notes && factory !== InstrumentFactories.MIDIOutput;
|
|
196
|
+
InstrumentFactories.Tubular = {
|
|
197
|
+
defaultName: "Tubular",
|
|
198
|
+
defaultIcon: IconSymbol.Tubular,
|
|
199
|
+
briefDescription: "6-op FM Synth",
|
|
200
|
+
description: "Six-operator FM synthesizer, DX7 compatible",
|
|
201
|
+
manualPage: DeviceManualUrls.Tubular,
|
|
202
|
+
trackType: TrackType.Notes,
|
|
203
|
+
create: (boxGraph, host, name, icon, _attachment) => TubularDeviceBox.create(boxGraph, UUID.generate(), box => {
|
|
204
|
+
box.label.setValue(name);
|
|
205
|
+
box.icon.setValue(IconSymbol.toName(icon));
|
|
206
|
+
// The INIT VOICE: OP1 is the only sounding carrier (operators are OP1..OP6 in panel order).
|
|
207
|
+
box.operators.fields()[0].outputLevel.setInitValue(99);
|
|
208
|
+
box.host.refer(host);
|
|
209
|
+
})
|
|
210
|
+
};
|
|
211
|
+
InstrumentFactories.Named = { Apparat: InstrumentFactories.Apparat, Cubed: InstrumentFactories.Cubed, InstrumentComposite: InstrumentFactories.InstrumentComposite, Neon: InstrumentFactories.Neon, Tubular: InstrumentFactories.Tubular, MIDIOutput: InstrumentFactories.MIDIOutput, Nano: InstrumentFactories.Nano, Playfield: InstrumentFactories.Playfield, Soundfont: InstrumentFactories.Soundfont, Tape: InstrumentFactories.Tape, Vaporisateur: InstrumentFactories.Vaporisateur };
|
|
212
|
+
InstrumentFactories.keyOfBox = (box) => {
|
|
213
|
+
const stripped = box.name.replace(/DeviceBox$/, "").replace(/Box$/, "");
|
|
214
|
+
return Object.hasOwn(InstrumentFactories.Named, stripped) ? stripped : undefined;
|
|
215
|
+
};
|
|
180
216
|
const useAudioFile = (boxGraph, fileUUID, name, duration) => boxGraph.findBox(fileUUID)
|
|
181
217
|
.unwrapOrElse(() => AudioFileBox.create(boxGraph, fileUUID, box => {
|
|
182
218
|
box.fileName.setValue(name);
|
package/dist/index.d.ts
CHANGED
|
@@ -55,6 +55,7 @@ export * from "./audio/WarpMarkerBoxAdapter";
|
|
|
55
55
|
export * from "./devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter";
|
|
56
56
|
export * from "./devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter";
|
|
57
57
|
export * from "./devices/audio-effects/AudioEffectCompositeBoxAdapter";
|
|
58
|
+
export * from "./devices/audio-effects/AudioSinkDeviceBoxAdapter";
|
|
58
59
|
export * from "./devices/audio-effects/AutotuneDeviceBoxAdapter";
|
|
59
60
|
export * from "./devices/audio-effects/CompressorDeviceBoxAdapter";
|
|
60
61
|
export * from "./devices/audio-effects/ConvolverDeviceBoxAdapter";
|
|
@@ -82,6 +83,8 @@ export * from "./devices/instruments/Cubed/CubedPatternData";
|
|
|
82
83
|
export * from "./devices/instruments/Cubed/CubedRandomize";
|
|
83
84
|
export * from "./devices/instruments/Cubed/CubedStep";
|
|
84
85
|
export * from "./devices/instruments/CubedDeviceBoxAdapter";
|
|
86
|
+
export * from "./devices/instruments/InstrumentComposite/InstrumentCompositeCellBoxAdapter";
|
|
87
|
+
export * from "./devices/instruments/InstrumentCompositeBoxAdapter";
|
|
85
88
|
export * from "./devices/instruments/MIDIOutputDeviceBoxAdapter";
|
|
86
89
|
export * from "./devices/instruments/NanoDeviceBoxAdapter";
|
|
87
90
|
export * from "./devices/instruments/Neon/CzSysex";
|
|
@@ -93,6 +96,9 @@ export * from "./devices/instruments/Playfield/PlayfieldSampleBoxAdapter";
|
|
|
93
96
|
export * from "./devices/instruments/PlayfieldDeviceBoxAdapter";
|
|
94
97
|
export * from "./devices/instruments/SoundfontDeviceBoxAdapter";
|
|
95
98
|
export * from "./devices/instruments/TapeDeviceBoxAdapter";
|
|
99
|
+
export * from "./devices/instruments/Tubular/Dx7Sysex";
|
|
100
|
+
export * from "./devices/instruments/Tubular/TubularPreset";
|
|
101
|
+
export * from "./devices/instruments/TubularDeviceBoxAdapter";
|
|
96
102
|
export * from "./devices/instruments/VaporisateurDeviceBoxAdapter";
|
|
97
103
|
export * from "./devices/instruments/VaporisateurSettings";
|
|
98
104
|
export * from "./devices/midi-effects/ArpeggioDeviceBoxAdapter";
|
|
@@ -170,6 +176,7 @@ export * from "./timeline/MarkerTrackAdapter";
|
|
|
170
176
|
export * from "./timeline/ParameterTracks";
|
|
171
177
|
export * from "./timeline/RegionBoxAdapter";
|
|
172
178
|
export * from "./timeline/RegionEditing";
|
|
179
|
+
export * from "./timeline/RegionOverlap";
|
|
173
180
|
export * from "./timeline/SignatureEventBoxAdapter";
|
|
174
181
|
export * from "./timeline/SignatureTrackAdapter";
|
|
175
182
|
export * from "./timeline/TimelineBoxAdapter";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -57,6 +57,7 @@ export * from "./audio/WarpMarkerBoxAdapter";
|
|
|
57
57
|
export * from "./devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter";
|
|
58
58
|
export * from "./devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter";
|
|
59
59
|
export * from "./devices/audio-effects/AudioEffectCompositeBoxAdapter";
|
|
60
|
+
export * from "./devices/audio-effects/AudioSinkDeviceBoxAdapter";
|
|
60
61
|
export * from "./devices/audio-effects/AutotuneDeviceBoxAdapter";
|
|
61
62
|
export * from "./devices/audio-effects/CompressorDeviceBoxAdapter";
|
|
62
63
|
export * from "./devices/audio-effects/ConvolverDeviceBoxAdapter";
|
|
@@ -84,6 +85,8 @@ export * from "./devices/instruments/Cubed/CubedPatternData";
|
|
|
84
85
|
export * from "./devices/instruments/Cubed/CubedRandomize";
|
|
85
86
|
export * from "./devices/instruments/Cubed/CubedStep";
|
|
86
87
|
export * from "./devices/instruments/CubedDeviceBoxAdapter";
|
|
88
|
+
export * from "./devices/instruments/InstrumentComposite/InstrumentCompositeCellBoxAdapter";
|
|
89
|
+
export * from "./devices/instruments/InstrumentCompositeBoxAdapter";
|
|
87
90
|
export * from "./devices/instruments/MIDIOutputDeviceBoxAdapter";
|
|
88
91
|
export * from "./devices/instruments/NanoDeviceBoxAdapter";
|
|
89
92
|
export * from "./devices/instruments/Neon/CzSysex";
|
|
@@ -95,6 +98,9 @@ export * from "./devices/instruments/Playfield/PlayfieldSampleBoxAdapter";
|
|
|
95
98
|
export * from "./devices/instruments/PlayfieldDeviceBoxAdapter";
|
|
96
99
|
export * from "./devices/instruments/SoundfontDeviceBoxAdapter";
|
|
97
100
|
export * from "./devices/instruments/TapeDeviceBoxAdapter";
|
|
101
|
+
export * from "./devices/instruments/Tubular/Dx7Sysex";
|
|
102
|
+
export * from "./devices/instruments/Tubular/TubularPreset";
|
|
103
|
+
export * from "./devices/instruments/TubularDeviceBoxAdapter";
|
|
98
104
|
export * from "./devices/instruments/VaporisateurDeviceBoxAdapter";
|
|
99
105
|
export * from "./devices/instruments/VaporisateurSettings";
|
|
100
106
|
export * from "./devices/midi-effects/ArpeggioDeviceBoxAdapter";
|
|
@@ -172,6 +178,7 @@ export * from "./timeline/MarkerTrackAdapter";
|
|
|
172
178
|
export * from "./timeline/ParameterTracks";
|
|
173
179
|
export * from "./timeline/RegionBoxAdapter";
|
|
174
180
|
export * from "./timeline/RegionEditing";
|
|
181
|
+
export * from "./timeline/RegionOverlap";
|
|
175
182
|
export * from "./timeline/SignatureEventBoxAdapter";
|
|
176
183
|
export * from "./timeline/SignatureTrackAdapter";
|
|
177
184
|
export * from "./timeline/TimelineBoxAdapter";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Attempt, int } from "@opendaw/lib-std";
|
|
2
2
|
import { Field } from "@opendaw/lib-box";
|
|
3
3
|
import { EffectPointerType } from "../DeviceAdapter";
|
|
4
|
-
import { AudioUnitBox } from "@opendaw/studio-boxes";
|
|
4
|
+
import { AudioUnitBox, InstrumentCompositeCellBox } from "@opendaw/studio-boxes";
|
|
5
5
|
import { ProjectSkeleton } from "../project/ProjectSkeleton";
|
|
6
6
|
import { PresetHeader } from "./PresetHeader";
|
|
7
7
|
export declare namespace PresetDecoder {
|
|
8
|
-
const decode: (bytes: ArrayBufferLike, target: ProjectSkeleton) => ReadonlyArray<AudioUnitBox>;
|
|
8
|
+
const decode: (bytes: ArrayBufferLike, target: ProjectSkeleton, insertIndex?: int) => ReadonlyArray<AudioUnitBox>;
|
|
9
9
|
const peekHasTimeline: (arrayBuffer: ArrayBuffer) => boolean;
|
|
10
10
|
const replaceAudioUnit: (arrayBuffer: ArrayBuffer, targetAudioUnitBox: AudioUnitBox, options?: {
|
|
11
11
|
keepMIDIEffects?: boolean;
|
|
@@ -13,5 +13,6 @@ export declare namespace PresetDecoder {
|
|
|
13
13
|
keepTimeline?: boolean;
|
|
14
14
|
}) => Attempt<void, string>;
|
|
15
15
|
const insertEffectChain: (bytes: ArrayBufferLike, targetField: Field<EffectPointerType>, insertIndex: int, kind: PresetHeader.ChainKind) => Attempt<void, string>;
|
|
16
|
+
const replaceLayerInstrument: (bytes: ArrayBufferLike, cellBox: InstrumentCompositeCellBox) => Attempt<void, string>;
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=PresetDecoder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresetDecoder.d.ts","sourceRoot":"","sources":["../../src/preset/PresetDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,OAAO,EAGP,GAAG,EAQN,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAyB,KAAK,EAA2B,MAAM,kBAAkB,CAAA;AACxF,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAEH,YAAY,
|
|
1
|
+
{"version":3,"file":"PresetDecoder.d.ts","sourceRoot":"","sources":["../../src/preset/PresetDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,OAAO,EAGP,GAAG,EAQN,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAyB,KAAK,EAA2B,MAAM,kBAAkB,CAAA;AACxF,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAEH,YAAY,EAKZ,0BAA0B,EAG7B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAK3C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAI,OAAO,eAAe,EACtB,QAAQ,eAAe,EACvB,cAAc,GAAG,KAAG,aAAa,CAAC,YAAY,CAuEpE,CAAA;IAEM,MAAM,eAAe,GAAI,aAAa,WAAW,KAAG,OAY1D,CAAA;IAEM,MAAM,gBAAgB,GAAI,aAAa,WAAW,EAAE,oBAAoB,YAAY,EAAE,UAAU;QACnG,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;KACzB,KAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CA6GvB,CAAA;IAyBM,MAAM,iBAAiB,GAC1B,OAAO,eAAe,EACtB,aAAa,KAAK,CAAC,iBAAiB,CAAC,EACrC,aAAa,GAAG,EAChB,MAAM,YAAY,CAAC,SAAS,KAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,CAkFtB,CAAA;IAGM,MAAM,sBAAsB,GAAI,OAAO,eAAe,EAAE,SAAS,0BAA0B,KAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAkCxH,CAAA;CACJ"}
|