@opendaw/studio-adapters 0.1.4 → 0.1.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.
@@ -1 +1 @@
1
- {"version":3,"file":"BoxAdapters.d.ts","sourceRoot":"","sources":["../src/BoxAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,UAAU,EACV,KAAK,EAEL,MAAM,EAIN,UAAU,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,GAAG,EAAS,MAAM,kBAAkB,CAAA;AAuH5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AA6BvC,qBAAa,WAAY,YAAW,UAAU;;gBAO9B,OAAO,EAAE,kBAAkB;IAkBvC,SAAS,IAAI,IAAI;IAMjB,UAAU,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,SAAS,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IAkBnG,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;CA6E3C"}
1
+ {"version":3,"file":"BoxAdapters.d.ts","sourceRoot":"","sources":["../src/BoxAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,UAAU,EACV,KAAK,EAEL,MAAM,EAIN,UAAU,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,GAAG,EAAS,MAAM,kBAAkB,CAAA;AAyH5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AA6BvC,qBAAa,WAAY,YAAW,UAAU;;gBAO9B,OAAO,EAAE,kBAAkB;IAkBvC,SAAS,IAAI,IAAI;IAMjB,UAAU,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,SAAS,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IAkBnG,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;CA8E3C"}
@@ -47,6 +47,7 @@ import { ArpeggioDeviceBoxAdapter } from "./devices/midi-effects/ArpeggioDeviceB
47
47
  import { PitchDeviceBoxAdapter } from "./devices/midi-effects/PitchDeviceBoxAdapter";
48
48
  import { SpielwerkDeviceBoxAdapter } from "./devices/midi-effects/SpielwerkDeviceBoxAdapter";
49
49
  import { ApparatDeviceBoxAdapter } from "./devices/instruments/ApparatDeviceBoxAdapter";
50
+ import { NeonDeviceBoxAdapter } from "./devices/instruments/NeonDeviceBoxAdapter";
50
51
  import { NanoDeviceBoxAdapter } from "./devices/instruments/NanoDeviceBoxAdapter";
51
52
  import { PlayfieldDeviceBoxAdapter } from "./devices/instruments/PlayfieldDeviceBoxAdapter";
52
53
  import { StereoToolDeviceBoxAdapter } from "./devices/audio-effects/StereoToolDeviceBoxAdapter";
@@ -165,6 +166,7 @@ _BoxAdapters_context = new WeakMap(), _BoxAdapters_adapters = new WeakMap(), _Bo
165
166
  visitModuleDelayBox: (box) => new ModuleDelayAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
166
167
  visitModuleGainBox: (box) => new ModuleGainAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
167
168
  visitModuleMultiplierBox: (box) => new ModuleMultiplierAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
169
+ visitNeonDeviceBox: (box) => new NeonDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
168
170
  visitNanoDeviceBox: (box) => new NanoDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
169
171
  visitNeuralAmpDeviceBox: (box) => new NeuralAmpDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
170
172
  visitNeuralAmpModelBox: (box) => new NeuralAmpModelBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
@@ -29,6 +29,7 @@ export declare namespace DeviceManualUrls {
29
29
  const Nano = "manuals/devices/instruments/nano";
30
30
  const Playfield = "manuals/devices/instruments/playfield";
31
31
  const Vaporisateur = "manuals/devices/instruments/vaporisateur";
32
+ const Neon = "manuals/devices/instruments/neon";
32
33
  const MIDIOutput = "manuals/devices/instruments/midi-output";
33
34
  const Soundfont = "manuals/devices/instruments/soundfont";
34
35
  const FrequencySplit = "manuals/devices/audio/frequency-split";
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceManualUrls.d.ts","sourceRoot":"","sources":["../src/DeviceManualUrls.ts"],"names":[],"mappings":"AAAA,yBAAiB,gBAAgB,CAAC;IAEvB,MAAM,QAAQ,sBAAsB,CAAA;IAGpC,MAAM,QAAQ,kCAAkC,CAAA;IAChD,MAAM,KAAK,+BAA+B,CAAA;IAC1C,MAAM,SAAS,mCAAmC,CAAA;IAClD,MAAM,QAAQ,kCAAkC,CAAA;IAChD,MAAM,SAAS,mCAAmC,CAAA;IAGlD,MAAM,QAAQ,mCAAmC,CAAA;IACjD,MAAM,UAAU,sCAAsC,CAAA;IACtD,MAAM,KAAK,gCAAgC,CAAA;IAC3C,MAAM,cAAc,0CAA0C,CAAA;IAC9D,MAAM,SAAS,oCAAoC,CAAA;IACnD,MAAM,UAAU,qCAAqC,CAAA;IACrD,MAAM,IAAI,+BAA+B,CAAA;IACzC,MAAM,MAAM,uCAAuC,CAAA;IACnD,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,IAAI,+BAA+B,CAAA;IACzC,MAAM,KAAK,gCAAgC,CAAA;IAC3C,MAAM,MAAM,iCAAiC,CAAA;IAC7C,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,SAAS,qCAAqC,CAAA;IACpD,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,UAAU,qCAAqC,CAAA;IACrD,MAAM,SAAS,oCAAoC,CAAA;IACnD,MAAM,oBAAoB,2CAA2C,CAAA;IACrE,MAAM,eAAe,2CAA2C,CAAA;IAGhE,MAAM,OAAO,wCAAwC,CAAA;IACrD,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,SAAS,0CAA0C,CAAA;IACzD,MAAM,YAAY,6CAA6C,CAAA;IAC/D,MAAM,UAAU,4CAA4C,CAAA;IAC5D,MAAM,SAAS,0CAA0C,CAAA;IACzD,MAAM,cAAc,0CAA0C,CAAA;CACxE"}
1
+ {"version":3,"file":"DeviceManualUrls.d.ts","sourceRoot":"","sources":["../src/DeviceManualUrls.ts"],"names":[],"mappings":"AAAA,yBAAiB,gBAAgB,CAAC;IAEvB,MAAM,QAAQ,sBAAsB,CAAA;IAGpC,MAAM,QAAQ,kCAAkC,CAAA;IAChD,MAAM,KAAK,+BAA+B,CAAA;IAC1C,MAAM,SAAS,mCAAmC,CAAA;IAClD,MAAM,QAAQ,kCAAkC,CAAA;IAChD,MAAM,SAAS,mCAAmC,CAAA;IAGlD,MAAM,QAAQ,mCAAmC,CAAA;IACjD,MAAM,UAAU,sCAAsC,CAAA;IACtD,MAAM,KAAK,gCAAgC,CAAA;IAC3C,MAAM,cAAc,0CAA0C,CAAA;IAC9D,MAAM,SAAS,oCAAoC,CAAA;IACnD,MAAM,UAAU,qCAAqC,CAAA;IACrD,MAAM,IAAI,+BAA+B,CAAA;IACzC,MAAM,MAAM,uCAAuC,CAAA;IACnD,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,IAAI,+BAA+B,CAAA;IACzC,MAAM,KAAK,gCAAgC,CAAA;IAC3C,MAAM,MAAM,iCAAiC,CAAA;IAC7C,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,SAAS,qCAAqC,CAAA;IACpD,MAAM,OAAO,kCAAkC,CAAA;IAC/C,MAAM,UAAU,qCAAqC,CAAA;IACrD,MAAM,SAAS,oCAAoC,CAAA;IACnD,MAAM,oBAAoB,2CAA2C,CAAA;IACrE,MAAM,eAAe,2CAA2C,CAAA;IAGhE,MAAM,OAAO,wCAAwC,CAAA;IACrD,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,SAAS,0CAA0C,CAAA;IACzD,MAAM,YAAY,6CAA6C,CAAA;IAC/D,MAAM,IAAI,qCAAqC,CAAA;IAC/C,MAAM,UAAU,4CAA4C,CAAA;IAC5D,MAAM,SAAS,0CAA0C,CAAA;IACzD,MAAM,cAAc,0CAA0C,CAAA;CACxE"}
@@ -34,6 +34,7 @@ export var DeviceManualUrls;
34
34
  DeviceManualUrls.Nano = "manuals/devices/instruments/nano";
35
35
  DeviceManualUrls.Playfield = "manuals/devices/instruments/playfield";
36
36
  DeviceManualUrls.Vaporisateur = "manuals/devices/instruments/vaporisateur";
37
+ DeviceManualUrls.Neon = "manuals/devices/instruments/neon";
37
38
  DeviceManualUrls.MIDIOutput = "manuals/devices/instruments/midi-output";
38
39
  DeviceManualUrls.Soundfont = "manuals/devices/instruments/soundfont";
39
40
  DeviceManualUrls.FrequencySplit = "manuals/devices/audio/frequency-split";
@@ -0,0 +1,34 @@
1
+ import { int } from "@opendaw/lib-std";
2
+ export type CzEnvelope = {
3
+ rates: ReadonlyArray<int>;
4
+ levels: ReadonlyArray<int>;
5
+ sustain: int;
6
+ end: int;
7
+ };
8
+ export type CzLine = {
9
+ wave1: int;
10
+ wave2: int;
11
+ dcwKeyFollow: int;
12
+ dcaKeyFollow: int;
13
+ pitchEnv: CzEnvelope;
14
+ dcwEnv: CzEnvelope;
15
+ dcaEnv: CzEnvelope;
16
+ };
17
+ export type CzTone = {
18
+ lineSelect: int;
19
+ modulation: int;
20
+ octave: int;
21
+ detuneNote: int;
22
+ detuneFine: int;
23
+ vibratoWave: int;
24
+ vibratoDelay: int;
25
+ vibratoRate: int;
26
+ vibratoDepth: int;
27
+ lines: [CzLine, CzLine];
28
+ };
29
+ export declare namespace CzSysex {
30
+ const isToneDump: (bytes: Uint8Array) => boolean;
31
+ const decode: (bytes: Uint8Array) => CzTone;
32
+ const encode: (tone: CzTone, channel?: int, program?: int) => Uint8Array;
33
+ }
34
+ //# sourceMappingURL=CzSysex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CzSysex.d.ts","sourceRoot":"","sources":["../../../../src/devices/instruments/Neon/CzSysex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAMpC,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;IACzB,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;IAC1B,OAAO,EAAE,GAAG,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;CACX,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACjB,KAAK,EAAE,GAAG,CAAA;IACV,KAAK,EAAE,GAAG,CAAA;IACV,YAAY,EAAE,GAAG,CAAA;IACjB,YAAY,EAAE,GAAG,CAAA;IACjB,QAAQ,EAAE,UAAU,CAAA;IACpB,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE,UAAU,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACjB,UAAU,EAAE,GAAG,CAAA;IACf,UAAU,EAAE,GAAG,CAAA;IACf,MAAM,EAAE,GAAG,CAAA;IACX,UAAU,EAAE,GAAG,CAAA;IACf,UAAU,EAAE,GAAG,CAAA;IACf,WAAW,EAAE,GAAG,CAAA;IAChB,YAAY,EAAE,GAAG,CAAA;IACjB,WAAW,EAAE,GAAG,CAAA;IAChB,YAAY,EAAE,GAAG,CAAA;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC1B,CAAA;AAsKD,yBAAiB,OAAO,CAAC;IACd,MAAM,UAAU,GAAI,OAAO,UAAU,KAAG,OAG9C,CAAA;IAEM,MAAM,MAAM,GAAI,OAAO,UAAU,KAAG,MA4B1C,CAAA;IAEM,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,UAAS,GAAO,EAAE,UAAS,GAAU,KAAG,UA0B5E,CAAA;CACJ"}
@@ -0,0 +1,228 @@
1
+ const TONE_BYTES = 128;
2
+ const WAVE_BITS = [0b000, 0b001, 0b010, 0b100, 0b101, 0b110, 0b110, 0b110];
3
+ const WINDOW_OF_WAVE = [0, 0, 0, 0, 0, 1, 2, 3];
4
+ const VIBRATO_WAVE_BYTES = [0x08, 0x04, 0x20, 0x02];
5
+ const panelWave = (bits, window) => {
6
+ if (bits === 0b110) {
7
+ return 4 + Math.min(Math.max(window, 1), 3);
8
+ }
9
+ const index = WAVE_BITS.indexOf(bits);
10
+ return index >= 0 ? index : 0;
11
+ };
12
+ const decodeRateLinear = (byte, divisor) => {
13
+ const masked = byte & 0x7F;
14
+ if (masked === 0) {
15
+ return 0;
16
+ }
17
+ if (masked >= divisor) {
18
+ return 99;
19
+ }
20
+ return Math.min(99, Math.floor(99 * masked / divisor) + 1);
21
+ };
22
+ const decodeDcwRate = (byte) => {
23
+ const masked = byte & 0x7F;
24
+ if (masked <= 8) {
25
+ return 0;
26
+ }
27
+ if (masked >= 0x77) {
28
+ return 99;
29
+ }
30
+ return Math.min(99, Math.floor(99 * (masked - 8) / 119) + 1);
31
+ };
32
+ const decodeLevel = (byte) => {
33
+ const masked = byte & 0x7F;
34
+ if (masked === 0) {
35
+ return 0;
36
+ }
37
+ if (masked >= 0x7F) {
38
+ return 99;
39
+ }
40
+ return Math.min(99, Math.floor(99 * masked / 127) + 1);
41
+ };
42
+ const decodePitchLevel = (byte) => {
43
+ const masked = byte & 0x7F;
44
+ return masked <= 0x3F ? masked : Math.min(99, masked - 4);
45
+ };
46
+ const encodeRateLinear = (rate, divisor) => rate <= 0 ? 0 : rate >= 99 ? divisor : Math.floor(divisor * rate / 99);
47
+ const encodeDcwRate = (rate) => rate <= 0 ? 8 : rate >= 99 ? 0x77 : Math.floor(119 * rate / 99) + 8;
48
+ const encodeLevel = (level) => level <= 0 ? 0 : level >= 99 ? 0x7F : Math.floor(127 * level / 99);
49
+ const encodePitchLevel = (level) => level <= 0x3F ? level : level + 4;
50
+ const decodeEnvelope = (data, endOffset, stepsOffset, rate, level) => {
51
+ const rates = [];
52
+ const levels = [];
53
+ const end = (data[endOffset] & 0x07) + 1;
54
+ const sustainSteps = [];
55
+ for (let step = 0; step < 8; step++) {
56
+ const rateByte = data[stepsOffset + step * 2];
57
+ const levelByte = data[stepsOffset + step * 2 + 1];
58
+ rates.push(rate(rateByte));
59
+ levels.push(level(levelByte));
60
+ if ((levelByte & 0x80) !== 0) {
61
+ sustainSteps.push(step + 1);
62
+ }
63
+ }
64
+ return { rates, levels, sustain: sustainSteps.at(0) ?? 0, end };
65
+ };
66
+ const encodeEnvelope = (out, endOffset, stepsOffset, envelope, rate, level) => {
67
+ out[endOffset] = Math.min(Math.max(envelope.end, 1), 8) - 1;
68
+ let previous = 0;
69
+ for (let step = 0; step < 8; step++) {
70
+ const target = envelope.levels[step] ?? 0;
71
+ let rateByte = rate(envelope.rates[step] ?? 0);
72
+ if (target < previous) {
73
+ rateByte |= 0x80;
74
+ }
75
+ let levelByte = level(target);
76
+ if (envelope.sustain === step + 1) {
77
+ levelByte |= 0x80;
78
+ }
79
+ out[stepsOffset + step * 2] = rateByte;
80
+ out[stepsOffset + step * 2 + 1] = levelByte;
81
+ previous = target;
82
+ }
83
+ };
84
+ const decodeLine = (data, waveOffset, blockOffset, withModulation) => {
85
+ const first = data[waveOffset];
86
+ const second = data[waveOffset + 1];
87
+ const wave1Bits = (first >> 5) & 0x07;
88
+ const wave2Bits = (first >> 2) & 0x07;
89
+ const wave2On = ((first >> 1) & 0x01) !== 0;
90
+ const window = second & 0x07;
91
+ const modulationBits = (second >> 3) & 0x07;
92
+ const modulation = !withModulation ? 0 : modulationBits === 0b100 ? 1 : modulationBits === 0b011 ? 2 : 0;
93
+ const dcaKeyFollow = Math.min(data[blockOffset] & 0x0F, 9);
94
+ const dcwKeyFollow = Math.min(data[blockOffset + 2] & 0x0F, 9);
95
+ const dcaEnv = decodeEnvelope(data, blockOffset + 4, blockOffset + 5, byte => decodeRateLinear(byte, 119), decodeLevel);
96
+ const dcwEnv = decodeEnvelope(data, blockOffset + 21, blockOffset + 22, decodeDcwRate, decodeLevel);
97
+ const pitchEnv = decodeEnvelope(data, blockOffset + 38, blockOffset + 39, byte => decodeRateLinear(byte, 127), decodePitchLevel);
98
+ return {
99
+ line: {
100
+ wave1: panelWave(wave1Bits, window),
101
+ wave2: wave2On ? panelWave(wave2Bits, window) + 1 : 0,
102
+ dcwKeyFollow, dcaKeyFollow, pitchEnv, dcwEnv, dcaEnv
103
+ },
104
+ modulation
105
+ };
106
+ };
107
+ const encodeLine = (out, waveOffset, blockOffset, line, modulation) => {
108
+ const wave2 = line.wave2 > 0 ? line.wave2 - 1 : 0;
109
+ const window1 = WINDOW_OF_WAVE[line.wave1];
110
+ const window = window1 !== 0 ? window1 : line.wave2 > 0 ? WINDOW_OF_WAVE[wave2] : 0;
111
+ const modulationBits = modulation === 1 ? 0b100 : modulation === 2 ? 0b011 : 0;
112
+ out[waveOffset] = (WAVE_BITS[line.wave1] << 5) | (WAVE_BITS[wave2] << 2) | (line.wave2 > 0 ? 0b10 : 0);
113
+ out[waveOffset + 1] = (modulationBits << 3) | window;
114
+ out[blockOffset] = line.dcaKeyFollow;
115
+ out[blockOffset + 1] = DCA_KEY_FOLLOW_SECOND[line.dcaKeyFollow] ?? 0;
116
+ out[blockOffset + 2] = line.dcwKeyFollow;
117
+ out[blockOffset + 3] = DCW_KEY_FOLLOW_SECOND[line.dcwKeyFollow] ?? 0;
118
+ encodeEnvelope(out, blockOffset + 4, blockOffset + 5, line.dcaEnv, value => encodeRateLinear(value, 119), encodeLevel);
119
+ encodeEnvelope(out, blockOffset + 21, blockOffset + 22, line.dcwEnv, encodeDcwRate, encodeLevel);
120
+ encodeEnvelope(out, blockOffset + 38, blockOffset + 39, line.pitchEnv, value => encodeRateLinear(value, 127), encodePitchLevel);
121
+ };
122
+ const DCA_KEY_FOLLOW_SECOND = [0x00, 0x08, 0x11, 0x1A, 0x24, 0x2F, 0x3A, 0x45, 0x52, 0x5F];
123
+ const DCW_KEY_FOLLOW_SECOND = [0x00, 0x1F, 0x2C, 0x39, 0x46, 0x53, 0x60, 0x6E, 0x92, 0xFF];
124
+ // The vibrato triples' 2nd+3rd bytes for the table ranges (the 1st byte is always the panel value).
125
+ // Below the table range: delay v<32 -> (0, v); rate v<25 -> 16-bit (v+1)*0x20; depth v<32 -> (0, v+1).
126
+ const VIBRATO_DELAY_TAIL = [
127
+ 0x0021, 0x0023, 0x0025, 0x0027, 0x0029, 0x002B, 0x002D, 0x002F, 0x0031, 0x0033, 0x0035, 0x0037,
128
+ 0x0039, 0x003B, 0x003D, 0x003F, 0x0043, 0x0047, 0x004B, 0x004F, 0x0053, 0x0057, 0x005B, 0x005F,
129
+ 0x0063, 0x0067, 0x006B, 0x006F, 0x0073, 0x0077, 0x007B, 0x007F, 0x0087, 0x008F, 0x0097, 0x009F,
130
+ 0x00A7, 0x00AF, 0x00B7, 0x00BF, 0x00C7, 0x00CF, 0x00D7, 0x00DF, 0x00E7, 0x00EF, 0x00F7, 0x00FF,
131
+ 0x010F, 0x011F, 0x012F, 0x013F, 0x014F, 0x015F, 0x016F, 0x017F, 0x018F, 0x019F, 0x01AF, 0x01BF,
132
+ 0x01CF, 0x01DF, 0x01EF, 0x01FF, 0x021F, 0x023F, 0x025F, 0x027F
133
+ ];
134
+ const VIBRATO_RATE_TAIL = [
135
+ 0x0340, 0x0360, 0x0380, 0x03A0, 0x03C0, 0x03E0, 0x0400, 0x0460, 0x04A0, 0x04E0, 0x0520, 0x0560,
136
+ 0x05A0, 0x05E0, 0x0620, 0x0660, 0x06A0, 0x06E0, 0x0720, 0x0760, 0x07A0, 0x07E0, 0x0820, 0x08E0,
137
+ 0x0960, 0x09E0, 0x0A60, 0x0AE0, 0x0B60, 0x0BE0, 0x0C60, 0x0CE0, 0x0D60, 0x0DE0, 0x0E60, 0x0EE0,
138
+ 0x0F60, 0x0FE0, 0x1060, 0x11E0, 0x12E0, 0x13E0, 0x14E0, 0x15E0, 0x16E0, 0x17E0, 0x18E0, 0x19E0,
139
+ 0x1AE0, 0x1BE0, 0x1CE0, 0x1DE0, 0x1EE0, 0x1FE0, 0x20E0, 0x23E0, 0x25E0, 0x27E0, 0x29E0, 0x2BE0,
140
+ 0x2DE0, 0x2FE0, 0x31E0, 0x33E0, 0x35E0, 0x37E0, 0x39E0, 0x3BE0, 0x3DE0, 0x3FE0, 0x41E0, 0x47E0,
141
+ 0x4BE0, 0x4FE0, 0x53E0
142
+ ];
143
+ const VIBRATO_DEPTH_TAIL = [
144
+ 0x0023, 0x0025, 0x0027, 0x0029, 0x002B, 0x002D, 0x002F, 0x0031, 0x0033, 0x0035, 0x0037, 0x0039,
145
+ 0x003B, 0x003D, 0x003F, 0x0041, 0x0047, 0x004B, 0x004F, 0x0053, 0x0057, 0x005B, 0x005F, 0x0063,
146
+ 0x0067, 0x006B, 0x006F, 0x0073, 0x0077, 0x007B, 0x007F, 0x0083, 0x008F, 0x0097, 0x009F, 0x00A7,
147
+ 0x00AF, 0x00B7, 0x00BF, 0x00C7, 0x00CF, 0x00D7, 0x00DF, 0x00E7, 0x00EF, 0x00F7, 0x00FF, 0x0107,
148
+ 0x011F, 0x012F, 0x013F, 0x014F, 0x015F, 0x016F, 0x017F, 0x018F, 0x019F, 0x01AF, 0x01BF, 0x01CF,
149
+ 0x01DF, 0x01EF, 0x01FF, 0x020F, 0x023F, 0x025F, 0x027F, 0x0300
150
+ ];
151
+ const vibratoTriple = (value, kind) => {
152
+ if (kind === "rate") {
153
+ const wide = value < 25 ? (value + 1) * 0x20 : VIBRATO_RATE_TAIL[value - 25];
154
+ return [value, (wide >> 8) & 0xFF, wide & 0xFF];
155
+ }
156
+ if (value < 32) {
157
+ return [value, 0, kind === "delay" ? value : value + 1];
158
+ }
159
+ const wide = (kind === "delay" ? VIBRATO_DELAY_TAIL : VIBRATO_DEPTH_TAIL)[value - 32];
160
+ return [value, (wide >> 8) & 0xFF, wide & 0xFF];
161
+ };
162
+ export var CzSysex;
163
+ (function (CzSysex) {
164
+ CzSysex.isToneDump = (bytes) => {
165
+ if (bytes.length < TONE_BYTES * 2 + 2) {
166
+ return false;
167
+ }
168
+ return bytes[0] === 0xF0 && bytes[1] === 0x44 && bytes[bytes.length - 1] === 0xF7;
169
+ };
170
+ CzSysex.decode = (bytes) => {
171
+ if (!CzSysex.isToneDump(bytes)) {
172
+ throw new Error("Not a Casio CZ tone dump");
173
+ }
174
+ const nibbleStart = bytes.length - 1 - TONE_BYTES * 2;
175
+ const data = new Uint8Array(TONE_BYTES);
176
+ for (let index = 0; index < TONE_BYTES; index++) {
177
+ const low = bytes[nibbleStart + index * 2] & 0x0F;
178
+ const high = bytes[nibbleStart + index * 2 + 1] & 0x0F;
179
+ data[index] = (high << 4) | low;
180
+ }
181
+ const lineSelect = data[0] & 0x03;
182
+ const octaveBits = (data[0] >> 2) & 0x03;
183
+ const octave = octaveBits === 1 ? 1 : octaveBits === 2 ? -1 : 0;
184
+ const sign = (data[1] & 0x01) !== 0 ? -1 : 1;
185
+ const fine = ((data[2] >> 4) & 0x0F) * 15 + (data[2] & 0x0F);
186
+ const octaveNote = data[3] & 0x3F;
187
+ const detuneNote = sign * Math.min(octaveNote, 47);
188
+ const detuneFine = sign * Math.min(fine, 60);
189
+ const vibratoWave = Math.max(VIBRATO_WAVE_BYTES.indexOf(data[4]), 0);
190
+ const vibratoDelay = Math.min(data[5], 99);
191
+ const vibratoRate = Math.min(data[8], 99);
192
+ const vibratoDepth = Math.min(data[11], 99);
193
+ const first = decodeLine(data, 14, 16, true);
194
+ const second = decodeLine(data, 71, 73, false);
195
+ return {
196
+ lineSelect, modulation: first.modulation, octave, detuneNote, detuneFine,
197
+ vibratoWave, vibratoDelay, vibratoRate, vibratoDepth,
198
+ lines: [first.line, second.line]
199
+ };
200
+ };
201
+ CzSysex.encode = (tone, channel = 0, program = 0x60) => {
202
+ const data = new Uint8Array(TONE_BYTES);
203
+ const octaveBits = tone.octave > 0 ? 1 : tone.octave < 0 ? 2 : 0;
204
+ data[0] = (octaveBits << 2) | (tone.lineSelect & 0x03);
205
+ data[1] = tone.detuneNote < 0 || tone.detuneFine < 0 ? 0x01 : 0x00;
206
+ // FINE ranges: 0..15 -> 00..0F (16 entries), then 15-wide ranges 11..1F, 21..2F, 31..3F.
207
+ const fine = Math.min(Math.abs(tone.detuneFine), 60);
208
+ data[2] = fine <= 15 ? fine : ((Math.floor((fine - 16) / 15) + 1) << 4) | ((fine - 16) % 15 + 1);
209
+ data[3] = Math.min(Math.abs(tone.detuneNote), 47);
210
+ data[4] = VIBRATO_WAVE_BYTES[tone.vibratoWave] ?? 0x08;
211
+ const [delay1, delay2, delay3] = vibratoTriple(tone.vibratoDelay, "delay");
212
+ data.set([delay1, delay2, delay3], 5);
213
+ const [rate1, rate2, rate3] = vibratoTriple(tone.vibratoRate, "rate");
214
+ data.set([rate1, rate2, rate3], 8);
215
+ const [depth1, depth2, depth3] = vibratoTriple(tone.vibratoDepth, "depth");
216
+ data.set([depth1, depth2, depth3], 11);
217
+ encodeLine(data, 14, 16, tone.lines[0], tone.modulation);
218
+ encodeLine(data, 71, 73, tone.lines[1], 0);
219
+ const bytes = new Uint8Array(7 + TONE_BYTES * 2 + 1);
220
+ bytes.set([0xF0, 0x44, 0x00, 0x00, 0x70 | (channel & 0x0F), 0x20, program], 0);
221
+ for (let index = 0; index < TONE_BYTES; index++) {
222
+ bytes[7 + index * 2] = data[index] & 0x0F;
223
+ bytes[7 + index * 2 + 1] = (data[index] >> 4) & 0x0F;
224
+ }
225
+ bytes[bytes.length - 1] = 0xF7;
226
+ return bytes;
227
+ };
228
+ })(CzSysex || (CzSysex = {}));
@@ -0,0 +1,6 @@
1
+ import { NeonDeviceBox } from "@opendaw/studio-boxes";
2
+ import { CzTone } from "./CzSysex";
3
+ export declare namespace NeonPreset {
4
+ const apply: (box: NeonDeviceBox, tone: CzTone) => void;
5
+ }
6
+ //# sourceMappingURL=NeonPreset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonPreset.d.ts","sourceRoot":"","sources":["../../../../src/devices/instruments/Neon/NeonPreset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAe,MAAM,uBAAuB,CAAA;AAEjE,OAAO,EAAa,MAAM,EAAC,MAAM,WAAW,CAAA;AAI5C,yBAAiB,UAAU,CAAC;IAiBjB,MAAM,KAAK,GAAI,KAAK,aAAa,EAAE,MAAM,MAAM,KAAG,IAsBxD,CAAA;CACJ"}
@@ -0,0 +1,42 @@
1
+ // Writes a decoded CZ tone into a NeonDeviceBox (raw hardware values, lossless). Call inside
2
+ // `editing.modify` so a preset load is one undoable transaction.
3
+ export var NeonPreset;
4
+ (function (NeonPreset) {
5
+ const rateFields = (envelope) => [
6
+ envelope.rate1, envelope.rate2, envelope.rate3, envelope.rate4,
7
+ envelope.rate5, envelope.rate6, envelope.rate7, envelope.rate8
8
+ ];
9
+ const levelFields = (envelope) => [
10
+ envelope.level1, envelope.level2, envelope.level3, envelope.level4,
11
+ envelope.level5, envelope.level6, envelope.level7, envelope.level8
12
+ ];
13
+ const applyEnvelope = (envelope, source) => {
14
+ rateFields(envelope).forEach((field, index) => field.setValue(source.rates[index] ?? 0));
15
+ levelFields(envelope).forEach((field, index) => field.setValue(source.levels[index] ?? 0));
16
+ envelope.sustain.setValue(source.sustain);
17
+ envelope.end.setValue(source.end);
18
+ };
19
+ NeonPreset.apply = (box, tone) => {
20
+ box.lineSelect.setValue(tone.lineSelect);
21
+ box.modulation.setValue(tone.modulation);
22
+ box.octave.setValue(tone.octave);
23
+ // The .syx note+fine pair folds into one cents value (60 fine steps per semitone).
24
+ const cents = tone.detuneNote * 100.0 + tone.detuneFine * (100.0 / 60.0);
25
+ box.detune.setValue(Math.max(-4800.0, Math.min(4800.0, cents)));
26
+ box.vibrato.wave.setValue(tone.vibratoWave);
27
+ box.vibrato.delay.setValue(tone.vibratoDelay);
28
+ box.vibrato.rate.setValue(tone.vibratoRate);
29
+ box.vibrato.depth.setValue(tone.vibratoDepth);
30
+ tone.lines.forEach((line, lineIndex) => {
31
+ const fields = box.lines.fields()[lineIndex];
32
+ fields.wave1.setValue(line.wave1);
33
+ fields.wave2.setValue(line.wave2);
34
+ fields.dcwKeyFollow.setValue(line.dcwKeyFollow);
35
+ fields.dcaKeyFollow.setValue(line.dcaKeyFollow);
36
+ const envelopes = box.envelopes.fields();
37
+ applyEnvelope(envelopes[lineIndex * 3], line.pitchEnv);
38
+ applyEnvelope(envelopes[lineIndex * 3 + 1], line.dcwEnv);
39
+ applyEnvelope(envelopes[lineIndex * 3 + 2], line.dcaEnv);
40
+ });
41
+ };
42
+ })(NeonPreset || (NeonPreset = {}));
@@ -0,0 +1,58 @@
1
+ import { UUID } from "@opendaw/lib-std";
2
+ import { NeonDeviceBox, NeonEnvelope } 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 Neon {
10
+ const Waves: string[];
11
+ const LineSelect: string[];
12
+ const Modulation: string[];
13
+ const VibratoWaves: string[];
14
+ const envelopeIndex: (line: 0 | 1, kind: "pitch" | "dcw" | "dca") => number;
15
+ }
16
+ export declare class NeonDeviceBoxAdapter implements InstrumentDeviceBoxAdapter {
17
+ #private;
18
+ readonly type = "instrument";
19
+ readonly accepts = "midi";
20
+ readonly manualUrl = "manuals/devices/instruments/neon";
21
+ readonly namedParameter: {
22
+ readonly lineSelect: import("../..").AutomatableParameterFieldAdapter<number>;
23
+ readonly modulation: import("../..").AutomatableParameterFieldAdapter<number>;
24
+ readonly octave: import("../..").AutomatableParameterFieldAdapter<number>;
25
+ readonly detune: import("../..").AutomatableParameterFieldAdapter<number>;
26
+ readonly tune: import("../..").AutomatableParameterFieldAdapter<number>;
27
+ readonly glideTime: import("../..").AutomatableParameterFieldAdapter<number>;
28
+ readonly voicingMode: import("../..").AutomatableParameterFieldAdapter<number>;
29
+ readonly vibrato: {
30
+ readonly wave: import("../..").AutomatableParameterFieldAdapter<number>;
31
+ readonly delay: import("../..").AutomatableParameterFieldAdapter<number>;
32
+ readonly rate: import("../..").AutomatableParameterFieldAdapter<number>;
33
+ readonly depth: import("../..").AutomatableParameterFieldAdapter<number>;
34
+ };
35
+ readonly lines: {
36
+ wave1: import("../..").AutomatableParameterFieldAdapter<number>;
37
+ wave2: import("../..").AutomatableParameterFieldAdapter<number>;
38
+ dcwKeyFollow: import("../..").AutomatableParameterFieldAdapter<number>;
39
+ dcaKeyFollow: import("../..").AutomatableParameterFieldAdapter<number>;
40
+ }[];
41
+ };
42
+ constructor(context: BoxAdaptersContext, box: NeonDeviceBox);
43
+ get box(): NeonDeviceBox;
44
+ get uuid(): UUID.Bytes;
45
+ get address(): Address;
46
+ get labelField(): StringField;
47
+ get iconField(): StringField;
48
+ get defaultTrackType(): TrackType;
49
+ get enabledField(): BooleanField;
50
+ get minimizedField(): BooleanField;
51
+ get acceptsMidiEvents(): boolean;
52
+ envelope(line: 0 | 1, kind: "pitch" | "dcw" | "dca"): NeonEnvelope;
53
+ deviceHost(): DeviceHost;
54
+ audioUnitBoxAdapter(): AudioUnitBoxAdapter;
55
+ labeledAudioOutputs(): Iterable<LabeledAudioOutput>;
56
+ terminate(): void;
57
+ }
58
+ //# sourceMappingURL=NeonDeviceBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonDeviceBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/instruments/NeonDeviceBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,IAAI,EAAe,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAC,OAAO,EAAE,YAAY,EAAgB,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAEjF,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,IAAI,CAAC;IACX,MAAM,KAAK,UAAwG,CAAA;IACnH,MAAM,UAAU,UAA6B,CAAA;IAC7C,MAAM,UAAU,UAA2B,CAAA;IAC3C,MAAM,YAAY,UAA+C,CAAA;IAEjE,MAAM,aAAa,GAAI,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,OAAO,GAAG,KAAK,GAAG,KAAK,KAAG,MACb,CAAA;CACjE;AAED,qBAAa,oBAAqB,YAAW,0BAA0B;;IACnE,QAAQ,CAAC,IAAI,gBAAe;IAC5B,QAAQ,CAAC,OAAO,UAAS;IACzB,QAAQ,CAAC,SAAS,sCAAwB;IAM1C,QAAQ,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;MAAA;gBAEX,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,aAAa;IAO3D,IAAI,GAAG,IAAI,aAAa,CAAmB;IAC3C,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,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,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,YAAY;IAIlE,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAEzC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIpD,SAAS,IAAI,IAAI;CAmEpB"}
@@ -0,0 +1,90 @@
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 _NeonDeviceBoxAdapter_instances, _NeonDeviceBoxAdapter_context, _NeonDeviceBoxAdapter_box, _NeonDeviceBoxAdapter_parametric, _NeonDeviceBoxAdapter_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 Neon;
20
+ (function (Neon) {
21
+ Neon.Waves = ["Saw", "Square", "Pulse", "Double Sine", "Saw-Pulse", "Res. Saw", "Res. Triangle", "Res. Trapezoid"];
22
+ Neon.LineSelect = ["1", "2", "1+1'", "1+2'"];
23
+ Neon.Modulation = ["Off", "Ring", "Noise"];
24
+ Neon.VibratoWaves = ["Triangle", "Saw Up", "Saw Down", "Square"];
25
+ // The `envelopes` array order: line1 pitch, line1 DCW, line1 DCA, line2 pitch, line2 DCW, line2 DCA.
26
+ Neon.envelopeIndex = (line, kind) => line * 3 + (kind === "pitch" ? 0 : kind === "dcw" ? 1 : 2);
27
+ })(Neon || (Neon = {}));
28
+ export class NeonDeviceBoxAdapter {
29
+ constructor(context, box) {
30
+ _NeonDeviceBoxAdapter_instances.add(this);
31
+ this.type = "instrument";
32
+ this.accepts = "midi";
33
+ this.manualUrl = DeviceManualUrls.Neon;
34
+ _NeonDeviceBoxAdapter_context.set(this, void 0);
35
+ _NeonDeviceBoxAdapter_box.set(this, void 0);
36
+ _NeonDeviceBoxAdapter_parametric.set(this, void 0);
37
+ __classPrivateFieldSet(this, _NeonDeviceBoxAdapter_context, context, "f");
38
+ __classPrivateFieldSet(this, _NeonDeviceBoxAdapter_box, box, "f");
39
+ __classPrivateFieldSet(this, _NeonDeviceBoxAdapter_parametric, new ParameterAdapterSet(__classPrivateFieldGet(this, _NeonDeviceBoxAdapter_context, "f")), "f");
40
+ this.namedParameter = __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_instances, "m", _NeonDeviceBoxAdapter_wrapParameters).call(this, box);
41
+ }
42
+ get box() { return __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_box, "f"); }
43
+ get uuid() { return __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_box, "f").address.uuid; }
44
+ get address() { return __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_box, "f").address; }
45
+ get labelField() { return __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_box, "f").label; }
46
+ get iconField() { return __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_box, "f").icon; }
47
+ get defaultTrackType() { return TrackType.Notes; }
48
+ get enabledField() { return __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_box, "f").enabled; }
49
+ get minimizedField() { return __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_box, "f").minimized; }
50
+ get acceptsMidiEvents() { return true; }
51
+ envelope(line, kind) {
52
+ return __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_box, "f").envelopes.fields()[Neon.envelopeIndex(line, kind)];
53
+ }
54
+ deviceHost() {
55
+ return __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_context, "f").boxAdapters
56
+ .adapterFor(__classPrivateFieldGet(this, _NeonDeviceBoxAdapter_box, "f").host.targetVertex.unwrap("no device-host").box, Devices.isHost);
57
+ }
58
+ audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }
59
+ *labeledAudioOutputs() {
60
+ yield { address: this.address, label: this.labelField.getValue(), children: () => Option.None };
61
+ }
62
+ terminate() {
63
+ __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").terminate();
64
+ }
65
+ }
66
+ _NeonDeviceBoxAdapter_context = new WeakMap(), _NeonDeviceBoxAdapter_box = new WeakMap(), _NeonDeviceBoxAdapter_parametric = new WeakMap(), _NeonDeviceBoxAdapter_instances = new WeakSet(), _NeonDeviceBoxAdapter_wrapParameters = function _NeonDeviceBoxAdapter_wrapParameters(box) {
67
+ const VoiceModes = [VoicingMode.Monophonic, VoicingMode.Polyphonic];
68
+ const czValue = (field, name) => __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(field, ValueMapping.linear(0, 99), StringMapping.numeric({ unit: "", fractionDigits: 0 }), name);
69
+ return {
70
+ lineSelect: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(box.lineSelect, ValueMapping.linearInteger(0, 3), StringMapping.indices("", Neon.LineSelect), "Line"),
71
+ modulation: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(box.modulation, ValueMapping.linearInteger(0, 2), StringMapping.indices("", Neon.Modulation), "Mod"),
72
+ octave: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(box.octave, ValueMapping.linearInteger(-3, 3), StringMapping.numeric({ unit: "oct" }), "Octave", 0.5),
73
+ detune: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(box.detune, ValueMapping.linear(-4800, 4800), StringMapping.numeric({ unit: "ct", fractionDigits: 0 }), "Detune", 0.5),
74
+ tune: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(box.tune, ValueMapping.linear(-1200, 1200), StringMapping.numeric({ unit: "ct", fractionDigits: 0 }), "Tune", 0.5),
75
+ glideTime: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(box.glideTime, ValueMapping.unipolar(), StringMapping.percent({ fractionDigits: 1 }), "Glide time", 0.0),
76
+ voicingMode: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(box.voicingMode, ValueMapping.values(VoiceModes), StringMapping.values("", VoiceModes, ["mono", "poly"]), "Play Mode", 0.5),
77
+ vibrato: {
78
+ wave: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(box.vibrato.wave, ValueMapping.linearInteger(0, 3), StringMapping.indices("", Neon.VibratoWaves), "Vib. Wave"),
79
+ delay: czValue(box.vibrato.delay, "Vib. Delay"),
80
+ rate: czValue(box.vibrato.rate, "Vib. Rate"),
81
+ depth: czValue(box.vibrato.depth, "Vib. Depth")
82
+ },
83
+ lines: box.lines.fields().map(line => ({
84
+ wave1: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(line.wave1, ValueMapping.linearInteger(0, 7), StringMapping.indices("", Neon.Waves), "Wave 1"),
85
+ wave2: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(line.wave2, ValueMapping.linearInteger(0, 8), StringMapping.indices("", ["Off", ...Neon.Waves]), "Wave 2"),
86
+ dcwKeyFollow: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(line.dcwKeyFollow, ValueMapping.linear(0, 9), StringMapping.numeric({ unit: "", fractionDigits: 1 }), "DCW Key Follow"),
87
+ dcaKeyFollow: __classPrivateFieldGet(this, _NeonDeviceBoxAdapter_parametric, "f").createParameter(line.dcaKeyFollow, ValueMapping.linear(0, 9), StringMapping.numeric({ unit: "", fractionDigits: 1 }), "DCA Key Follow")
88
+ }))
89
+ };
90
+ };
@@ -1,3 +1,3 @@
1
- import { ApparatDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, SoundfontDeviceBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
2
- export type InstrumentBox = ApparatDeviceBox | TapeDeviceBox | VaporisateurDeviceBox | NanoDeviceBox | PlayfieldDeviceBox | SoundfontDeviceBox | MIDIOutputDeviceBox;
1
+ import { ApparatDeviceBox, NeonDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, SoundfontDeviceBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
2
+ export type InstrumentBox = ApparatDeviceBox | TapeDeviceBox | VaporisateurDeviceBox | NeonDeviceBox | NanoDeviceBox | PlayfieldDeviceBox | 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,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACxB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,aAAa,GACnB,gBAAgB,GAChB,aAAa,GACb,qBAAqB,GACrB,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,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACxB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,aAAa,GACnB,gBAAgB,GAChB,aAAa,GACb,qBAAqB,GACrB,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,kBAAkB,GAClB,mBAAmB,CAAA"}
@@ -1,4 +1,4 @@
1
- import { ApparatDeviceBox, AudioFileBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, SoundfontDeviceBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
1
+ import { ApparatDeviceBox, AudioFileBox, NeonDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, SoundfontDeviceBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
2
2
  import { byte, UUID } from "@opendaw/lib-std";
3
3
  import { InstrumentFactory } from "./InstrumentFactory";
4
4
  export declare namespace InstrumentFactories {
@@ -12,6 +12,7 @@ export declare namespace InstrumentFactories {
12
12
  exclude: boolean;
13
13
  }>;
14
14
  const Playfield: InstrumentFactory<PlayfieldAttachment, PlayfieldDeviceBox>;
15
+ const Neon: InstrumentFactory<void, NeonDeviceBox>;
15
16
  const Vaporisateur: InstrumentFactory<void, VaporisateurDeviceBox>;
16
17
  const MIDIOutput: InstrumentFactory<void, MIDIOutputDeviceBox>;
17
18
  const Soundfont: InstrumentFactory<{
@@ -21,6 +22,7 @@ export declare namespace InstrumentFactories {
21
22
  const Apparat: InstrumentFactory<void, ApparatDeviceBox>;
22
23
  const Named: {
23
24
  Apparat: InstrumentFactory<void, ApparatDeviceBox>;
25
+ Neon: InstrumentFactory<void, NeonDeviceBox>;
24
26
  MIDIOutput: InstrumentFactory<void, MIDIOutputDeviceBox>;
25
27
  Nano: InstrumentFactory<AudioFileBox, NanoDeviceBox>;
26
28
  Playfield: InstrumentFactory<PlayfieldAttachment, PlayfieldDeviceBox>;
@@ -1 +1 @@
1
- {"version":3,"file":"InstrumentFactories.d.ts","sourceRoot":"","sources":["../../src/factories/InstrumentFactories.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,gBAAgB,EAChB,YAAY,EAEZ,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAElB,kBAAkB,EAElB,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,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;QAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,kBAAkB,CAehG,CAAA;IAEM,MAAM,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAe7D,CAAA;IAEM,MAAM,KAAK;;;;;;kBAlCgC,IAAI,CAAC,MAAM;kBAAQ,MAAM;;;;KAkCe,CAAA;IAC1F,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,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAElB,kBAAkB,EAElB,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,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;QAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,kBAAkB,CAehG,CAAA;IAEM,MAAM,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAe7D,CAAA;IAEM,MAAM,KAAK;;;;;;;kBAlCgC,IAAI,CAAC,MAAM;kBAAQ,MAAM;;;;KAkCqB,CAAA;IAChG,KAAY,IAAI,GAAG,MAAM,OAAO,KAAK,CAAA;CAYxC"}
@@ -1,4 +1,4 @@
1
- import { ApparatDeviceBox, AudioFileBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, PlayfieldSampleBox, SoundfontDeviceBox, SoundfontFileBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
1
+ import { ApparatDeviceBox, AudioFileBox, NeonDeviceBox, MIDIOutputDeviceBox, NanoDeviceBox, 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";
@@ -66,6 +66,35 @@ export var InstrumentFactories;
66
66
  return deviceBox;
67
67
  }
68
68
  };
69
+ InstrumentFactories.Neon = {
70
+ defaultName: "Neon",
71
+ defaultIcon: IconSymbol.Neon,
72
+ briefDescription: "CZ-style Synth",
73
+ description: "CZ-style phase distortion synthesizer",
74
+ manualPage: DeviceManualUrls.Neon,
75
+ trackType: TrackType.Notes,
76
+ create: (boxGraph, host, name, icon, _attachment) => NeonDeviceBox.create(boxGraph, UUID.generate(), box => {
77
+ box.label.setValue(name);
78
+ box.icon.setValue(IconSymbol.toName(icon));
79
+ // The init tone: line 1 saw, DCW fully open, organ-style DCA (full until note-off, short
80
+ // release stage). Envelope array order: line1 pitch/DCW/DCA, line2 pitch/DCW/DCA.
81
+ for (const line of [0, 1]) {
82
+ const dcw = box.envelopes.fields()[line * 3 + 1];
83
+ dcw.rate1.setInitValue(99);
84
+ dcw.level1.setInitValue(99);
85
+ dcw.sustain.setInitValue(1);
86
+ dcw.end.setInitValue(2);
87
+ dcw.rate2.setInitValue(99);
88
+ const dca = box.envelopes.fields()[line * 3 + 2];
89
+ dca.rate1.setInitValue(99);
90
+ dca.level1.setInitValue(99);
91
+ dca.sustain.setInitValue(1);
92
+ dca.end.setInitValue(2);
93
+ dca.rate2.setInitValue(70);
94
+ }
95
+ box.host.refer(host);
96
+ })
97
+ };
69
98
  InstrumentFactories.Vaporisateur = {
70
99
  defaultName: "Vaporisateur",
71
100
  defaultIcon: IconSymbol.Piano,
@@ -131,7 +160,7 @@ export var InstrumentFactories;
131
160
  box.host.refer(host);
132
161
  })
133
162
  };
134
- InstrumentFactories.Named = { Apparat: InstrumentFactories.Apparat, MIDIOutput: InstrumentFactories.MIDIOutput, Nano: InstrumentFactories.Nano, Playfield: InstrumentFactories.Playfield, Soundfont: InstrumentFactories.Soundfont, Tape: InstrumentFactories.Tape, Vaporisateur: InstrumentFactories.Vaporisateur };
163
+ InstrumentFactories.Named = { Apparat: InstrumentFactories.Apparat, Neon: InstrumentFactories.Neon, MIDIOutput: InstrumentFactories.MIDIOutput, Nano: InstrumentFactories.Nano, Playfield: InstrumentFactories.Playfield, Soundfont: InstrumentFactories.Soundfont, Tape: InstrumentFactories.Tape, Vaporisateur: InstrumentFactories.Vaporisateur };
135
164
  const useAudioFile = (boxGraph, fileUUID, name, duration) => boxGraph.findBox(fileUUID)
136
165
  .unwrapOrElse(() => AudioFileBox.create(boxGraph, fileUUID, box => {
137
166
  box.fileName.setValue(name);
package/dist/index.d.ts CHANGED
@@ -77,6 +77,9 @@ export * from "./devices/audio-effects/WerkstattDeviceBoxAdapter";
77
77
  export * from "./devices/instruments/ApparatDeviceBoxAdapter";
78
78
  export * from "./devices/instruments/MIDIOutputDeviceBoxAdapter";
79
79
  export * from "./devices/instruments/NanoDeviceBoxAdapter";
80
+ export * from "./devices/instruments/Neon/CzSysex";
81
+ export * from "./devices/instruments/Neon/NeonPreset";
82
+ export * from "./devices/instruments/NeonDeviceBoxAdapter";
80
83
  export * from "./devices/instruments/Playfield/Gate";
81
84
  export * from "./devices/instruments/Playfield/PlayfieldSampleBoxAdapter";
82
85
  export * from "./devices/instruments/PlayfieldDeviceBoxAdapter";
@@ -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
@@ -79,6 +79,9 @@ export * from "./devices/audio-effects/WerkstattDeviceBoxAdapter";
79
79
  export * from "./devices/instruments/ApparatDeviceBoxAdapter";
80
80
  export * from "./devices/instruments/MIDIOutputDeviceBoxAdapter";
81
81
  export * from "./devices/instruments/NanoDeviceBoxAdapter";
82
+ export * from "./devices/instruments/Neon/CzSysex";
83
+ export * from "./devices/instruments/Neon/NeonPreset";
84
+ export * from "./devices/instruments/NeonDeviceBoxAdapter";
82
85
  export * from "./devices/instruments/Playfield/Gate";
83
86
  export * from "./devices/instruments/Playfield/PlayfieldSampleBoxAdapter";
84
87
  export * from "./devices/instruments/PlayfieldDeviceBoxAdapter";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendaw/studio-adapters",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "license": "LGPL-3.0-or-later",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -31,13 +31,13 @@
31
31
  "@opendaw/lib-midi": "^0.0.70",
32
32
  "@opendaw/lib-runtime": "^0.0.83",
33
33
  "@opendaw/lib-std": "^0.0.82",
34
- "@opendaw/studio-boxes": "^0.0.102",
35
- "@opendaw/studio-enums": "^0.0.83",
34
+ "@opendaw/studio-boxes": "^0.0.103",
35
+ "@opendaw/studio-enums": "^0.0.84",
36
36
  "soundfont2": "^0.5.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@opendaw/eslint-config": "^0.0.28",
40
40
  "@opendaw/typescript-config": "^0.0.32"
41
41
  },
42
- "gitHead": "0d71243b5284958062f4f80f52ad7e8f61567186"
42
+ "gitHead": "20290e307b949c3ea0111f9e91a5ac419f6e35d4"
43
43
  }