@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.
Files changed (76) hide show
  1. package/dist/BoxAdapters.d.ts.map +1 -1
  2. package/dist/BoxAdapters.js +8 -0
  3. package/dist/DeviceAdapter.d.ts +17 -1
  4. package/dist/DeviceAdapter.d.ts.map +1 -1
  5. package/dist/DeviceManualUrls.d.ts +3 -0
  6. package/dist/DeviceManualUrls.d.ts.map +1 -1
  7. package/dist/DeviceManualUrls.js +3 -0
  8. package/dist/Validator.d.ts.map +1 -1
  9. package/dist/Validator.js +4 -19
  10. package/dist/audio-unit/AudioUnitBoxAdapter.d.ts +2 -1
  11. package/dist/audio-unit/AudioUnitBoxAdapter.d.ts.map +1 -1
  12. package/dist/audio-unit/AudioUnitBoxAdapter.js +1 -0
  13. package/dist/audio-unit/AuxSendBoxAdapter.d.ts +1 -0
  14. package/dist/audio-unit/AuxSendBoxAdapter.d.ts.map +1 -1
  15. package/dist/audio-unit/AuxSendBoxAdapter.js +1 -0
  16. package/dist/devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter.d.ts +2 -1
  17. package/dist/devices/audio-effects/AudioEffectComposite/AudioCompositeAdapter.d.ts.map +1 -1
  18. package/dist/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.d.ts +8 -5
  19. package/dist/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.d.ts.map +1 -1
  20. package/dist/devices/audio-effects/AudioEffectComposite/AudioEffectCompositeCellBoxAdapter.js +9 -3
  21. package/dist/devices/audio-effects/AudioEffectCompositeBoxAdapter.d.ts +2 -0
  22. package/dist/devices/audio-effects/AudioEffectCompositeBoxAdapter.d.ts.map +1 -1
  23. package/dist/devices/audio-effects/AudioEffectCompositeBoxAdapter.js +1 -0
  24. package/dist/devices/audio-effects/AudioSinkDeviceBoxAdapter.d.ts +33 -0
  25. package/dist/devices/audio-effects/AudioSinkDeviceBoxAdapter.d.ts.map +1 -0
  26. package/dist/devices/audio-effects/AudioSinkDeviceBoxAdapter.js +60 -0
  27. package/dist/devices/audio-effects/CrusherDeviceBoxAdapter.js +1 -1
  28. package/dist/devices/audio-effects/FrequencySplitBoxAdapter.d.ts +3 -0
  29. package/dist/devices/audio-effects/FrequencySplitBoxAdapter.d.ts.map +1 -1
  30. package/dist/devices/audio-effects/FrequencySplitBoxAdapter.js +8 -0
  31. package/dist/devices/audio-effects/StereoCompositeBoxAdapter.d.ts +2 -0
  32. package/dist/devices/audio-effects/StereoCompositeBoxAdapter.d.ts.map +1 -1
  33. package/dist/devices/audio-effects/StereoCompositeBoxAdapter.js +1 -0
  34. package/dist/devices/instruments/Cubed/CubedStep.js +1 -1
  35. package/dist/devices/instruments/InstrumentComposite/InstrumentCompositeCellBoxAdapter.d.ts +49 -0
  36. package/dist/devices/instruments/InstrumentComposite/InstrumentCompositeCellBoxAdapter.d.ts.map +1 -0
  37. package/dist/devices/instruments/InstrumentComposite/InstrumentCompositeCellBoxAdapter.js +88 -0
  38. package/dist/devices/instruments/InstrumentCompositeBoxAdapter.d.ts +33 -0
  39. package/dist/devices/instruments/InstrumentCompositeBoxAdapter.d.ts.map +1 -0
  40. package/dist/devices/instruments/InstrumentCompositeBoxAdapter.js +55 -0
  41. package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts +14 -1
  42. package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts.map +1 -1
  43. package/dist/devices/instruments/NanoDeviceBoxAdapter.js +28 -5
  44. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts +2 -1
  45. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts.map +1 -1
  46. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.js +1 -0
  47. package/dist/devices/instruments/Tubular/Dx7Sysex.d.ts +23 -0
  48. package/dist/devices/instruments/Tubular/Dx7Sysex.d.ts.map +1 -0
  49. package/dist/devices/instruments/Tubular/Dx7Sysex.js +159 -0
  50. package/dist/devices/instruments/Tubular/TubularPreset.d.ts +6 -0
  51. package/dist/devices/instruments/Tubular/TubularPreset.d.ts.map +1 -0
  52. package/dist/devices/instruments/Tubular/TubularPreset.js +39 -0
  53. package/dist/devices/instruments/TubularDeviceBoxAdapter.d.ts +100 -0
  54. package/dist/devices/instruments/TubularDeviceBoxAdapter.d.ts.map +1 -0
  55. package/dist/devices/instruments/TubularDeviceBoxAdapter.js +177 -0
  56. package/dist/factories/InstrumentBox.d.ts +2 -2
  57. package/dist/factories/InstrumentBox.d.ts.map +1 -1
  58. package/dist/factories/InstrumentFactories.d.ts +9 -2
  59. package/dist/factories/InstrumentFactories.d.ts.map +1 -1
  60. package/dist/factories/InstrumentFactories.js +40 -4
  61. package/dist/index.d.ts +7 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +7 -0
  64. package/dist/preset/PresetDecoder.d.ts +3 -2
  65. package/dist/preset/PresetDecoder.d.ts.map +1 -1
  66. package/dist/preset/PresetDecoder.js +51 -6
  67. package/dist/preset/PresetEncoder.d.ts +1 -0
  68. package/dist/preset/PresetEncoder.d.ts.map +1 -1
  69. package/dist/preset/PresetEncoder.js +36 -0
  70. package/dist/timeline/RegionOverlap.d.ts +13 -0
  71. package/dist/timeline/RegionOverlap.d.ts.map +1 -0
  72. package/dist/timeline/RegionOverlap.js +32 -0
  73. package/dist/transfer/TransferUtils.d.ts +4 -1
  74. package/dist/transfer/TransferUtils.d.ts.map +1 -1
  75. package/dist/transfer/TransferUtils.js +18 -0
  76. 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;AAKtD,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,KAAK;;;;;;;;;;KAAqF,CAAA;IACvG,KAAY,IAAI,GAAG,MAAM,OAAO,KAAK,CAAA;CAYxC"}
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: "Simple Sampler",
30
- description: "Simple sampler",
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.Named = { Apparat: InstrumentFactories.Apparat, Cubed: InstrumentFactories.Cubed, Neon: InstrumentFactories.Neon, MIDIOutput: InstrumentFactories.MIDIOutput, Nano: InstrumentFactories.Nano, Playfield: InstrumentFactories.Playfield, Soundfont: InstrumentFactories.Soundfont, Tape: InstrumentFactories.Tape, Vaporisateur: InstrumentFactories.Vaporisateur };
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";
@@ -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,EAOf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAI3C,yBAAiB,aAAa,CAAC;IACpB,MAAM,MAAM,GAAI,OAAO,eAAe,EAAE,QAAQ,eAAe,KAAG,aAAa,CAAC,YAAY,CAqElG,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;IAEM,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,CAqGtB,CAAA;CACJ"}
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"}