@opendaw/studio-adapters 0.3.3 → 0.3.4
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,11 +1,12 @@
|
|
|
1
1
|
import { NanoDeviceBox } from "@opendaw/studio-boxes";
|
|
2
|
-
import { UUID } from "@opendaw/lib-std";
|
|
2
|
+
import { Option, UUID } from "@opendaw/lib-std";
|
|
3
3
|
import { Address, BooleanField, StringField } from "@opendaw/lib-box";
|
|
4
4
|
import { DeviceHost, InstrumentDeviceBoxAdapter } from "../../DeviceAdapter";
|
|
5
5
|
import { LabeledAudioOutput } from "../../LabeledAudioOutputsOwner";
|
|
6
6
|
import { BoxAdaptersContext } from "../../BoxAdaptersContext";
|
|
7
7
|
import { TrackType } from "../../timeline/TrackType";
|
|
8
8
|
import { AudioUnitBoxAdapter } from "../../audio-unit/AudioUnitBoxAdapter";
|
|
9
|
+
import { AudioFileBoxAdapter } from "../../audio/AudioFileBoxAdapter";
|
|
9
10
|
export declare class NanoDeviceBoxAdapter implements InstrumentDeviceBoxAdapter {
|
|
10
11
|
#private;
|
|
11
12
|
readonly type = "instrument";
|
|
@@ -13,7 +14,17 @@ export declare class NanoDeviceBoxAdapter implements InstrumentDeviceBoxAdapter
|
|
|
13
14
|
readonly manualUrl = "manuals/devices/instruments/nano";
|
|
14
15
|
readonly namedParameter: {
|
|
15
16
|
readonly volume: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
17
|
+
readonly octave: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
18
|
+
readonly tune: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
19
|
+
readonly rootKey: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
16
20
|
readonly release: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
21
|
+
readonly attack: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
22
|
+
readonly sampleStart: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
23
|
+
readonly sampleEnd: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
24
|
+
readonly loop: import("../..").AutomatableParameterFieldAdapter<boolean>;
|
|
25
|
+
readonly loopFade: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
26
|
+
readonly loopStart: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
27
|
+
readonly loopEnd: import("../..").AutomatableParameterFieldAdapter<number>;
|
|
17
28
|
};
|
|
18
29
|
constructor(context: BoxAdaptersContext, box: NanoDeviceBox);
|
|
19
30
|
get box(): NanoDeviceBox;
|
|
@@ -25,6 +36,8 @@ export declare class NanoDeviceBoxAdapter implements InstrumentDeviceBoxAdapter
|
|
|
25
36
|
get enabledField(): BooleanField;
|
|
26
37
|
get minimizedField(): BooleanField;
|
|
27
38
|
get acceptsMidiEvents(): boolean;
|
|
39
|
+
get positionsAddress(): Address;
|
|
40
|
+
file(): Option<AudioFileBoxAdapter>;
|
|
28
41
|
deviceHost(): DeviceHost;
|
|
29
42
|
audioUnitBoxAdapter(): AudioUnitBoxAdapter;
|
|
30
43
|
labeledAudioOutputs(): Iterable<LabeledAudioOutput>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NanoDeviceBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/instruments/NanoDeviceBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAA;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"NanoDeviceBoxAdapter.d.ts","sourceRoot":"","sources":["../../../src/devices/instruments/NanoDeviceBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAC,MAAM,EAA6B,IAAI,EAAe,MAAM,kBAAkB,CAAA;AAEtF,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAC,MAAM,kBAAkB,CAAA;AACnE,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;AACxE,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAA;AAInE,qBAAa,oBAAqB,YAAW,0BAA0B;;IACnE,QAAQ,CAAC,IAAI,gBAAe;IAC5B,QAAQ,CAAC,OAAO,UAAS;IACzB,QAAQ,CAAC,SAAS,sCAAwB;IAO1C,QAAQ,CAAC,cAAc;;;;;;;;;;;;;MAAA;gBAIX,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,aAAa;IAY3D,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;IAC9C,IAAI,gBAAgB,IAAI,OAAO,CAAwC;IAEvE,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC;IAEnC,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAEzC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIpD,SAAS,IAAI,IAAI;CAyDpB"}
|
|
@@ -9,12 +9,15 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
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
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _NanoDeviceBoxAdapter_instances, _NanoDeviceBoxAdapter_context, _NanoDeviceBoxAdapter_box, _NanoDeviceBoxAdapter_parametric, _NanoDeviceBoxAdapter_wrapParameters;
|
|
13
|
-
import { Option, StringMapping, ValueMapping } from "@opendaw/lib-std";
|
|
12
|
+
var _NanoDeviceBoxAdapter_instances, _NanoDeviceBoxAdapter_context, _NanoDeviceBoxAdapter_box, _NanoDeviceBoxAdapter_terminator, _NanoDeviceBoxAdapter_parametric, _NanoDeviceBoxAdapter_file, _NanoDeviceBoxAdapter_wrapParameters;
|
|
13
|
+
import { Option, StringMapping, Terminator, ValueMapping } from "@opendaw/lib-std";
|
|
14
|
+
import { MidiKeys } from "@opendaw/lib-dsp";
|
|
14
15
|
import { Devices } from "../../DeviceAdapter";
|
|
15
16
|
import { DeviceManualUrls } from "../../DeviceManualUrls";
|
|
16
17
|
import { ParameterAdapterSet } from "../../ParameterAdapterSet";
|
|
17
18
|
import { TrackType } from "../../timeline/TrackType";
|
|
19
|
+
import { AudioFileBoxAdapter } from "../../audio/AudioFileBoxAdapter";
|
|
20
|
+
const RootKeyLabels = Array.from({ length: 128 }, (_, note) => MidiKeys.toFullString(note));
|
|
18
21
|
export class NanoDeviceBoxAdapter {
|
|
19
22
|
constructor(context, box) {
|
|
20
23
|
_NanoDeviceBoxAdapter_instances.add(this);
|
|
@@ -23,11 +26,18 @@ export class NanoDeviceBoxAdapter {
|
|
|
23
26
|
this.manualUrl = DeviceManualUrls.Nano;
|
|
24
27
|
_NanoDeviceBoxAdapter_context.set(this, void 0);
|
|
25
28
|
_NanoDeviceBoxAdapter_box.set(this, void 0);
|
|
29
|
+
_NanoDeviceBoxAdapter_terminator.set(this, void 0);
|
|
26
30
|
_NanoDeviceBoxAdapter_parametric.set(this, void 0);
|
|
31
|
+
_NanoDeviceBoxAdapter_file.set(this, Option.None);
|
|
27
32
|
__classPrivateFieldSet(this, _NanoDeviceBoxAdapter_context, context, "f");
|
|
28
33
|
__classPrivateFieldSet(this, _NanoDeviceBoxAdapter_box, box, "f");
|
|
34
|
+
__classPrivateFieldSet(this, _NanoDeviceBoxAdapter_terminator, new Terminator(), "f");
|
|
29
35
|
__classPrivateFieldSet(this, _NanoDeviceBoxAdapter_parametric, new ParameterAdapterSet(__classPrivateFieldGet(this, _NanoDeviceBoxAdapter_context, "f")), "f");
|
|
30
36
|
this.namedParameter = __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_instances, "m", _NanoDeviceBoxAdapter_wrapParameters).call(this, box);
|
|
37
|
+
__classPrivateFieldGet(this, _NanoDeviceBoxAdapter_terminator, "f").own(__classPrivateFieldGet(this, _NanoDeviceBoxAdapter_box, "f").file.catchupAndSubscribe(pointer => {
|
|
38
|
+
__classPrivateFieldSet(this, _NanoDeviceBoxAdapter_file, pointer.targetVertex.map(({ box }) => __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_context, "f").boxAdapters.adapterFor(box, AudioFileBoxAdapter)), "f");
|
|
39
|
+
__classPrivateFieldGet(this, _NanoDeviceBoxAdapter_file, "f").ifSome(file => file.getOrCreateLoader());
|
|
40
|
+
}));
|
|
31
41
|
}
|
|
32
42
|
get box() { return __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_box, "f"); }
|
|
33
43
|
get uuid() { return __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_box, "f").address.uuid; }
|
|
@@ -38,6 +48,8 @@ export class NanoDeviceBoxAdapter {
|
|
|
38
48
|
get enabledField() { return __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_box, "f").enabled; }
|
|
39
49
|
get minimizedField() { return __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_box, "f").minimized; }
|
|
40
50
|
get acceptsMidiEvents() { return true; }
|
|
51
|
+
get positionsAddress() { return __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_box, "f").address.append(1001); }
|
|
52
|
+
file() { return __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_file, "f"); }
|
|
41
53
|
deviceHost() {
|
|
42
54
|
return __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_context, "f").boxAdapters
|
|
43
55
|
.adapterFor(__classPrivateFieldGet(this, _NanoDeviceBoxAdapter_box, "f").host.targetVertex.unwrap("no device-host").box, Devices.isHost);
|
|
@@ -47,12 +59,23 @@ export class NanoDeviceBoxAdapter {
|
|
|
47
59
|
yield { address: this.address, label: this.labelField.getValue(), children: () => Option.None };
|
|
48
60
|
}
|
|
49
61
|
terminate() {
|
|
62
|
+
__classPrivateFieldGet(this, _NanoDeviceBoxAdapter_terminator, "f").terminate();
|
|
50
63
|
__classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").terminate();
|
|
51
64
|
}
|
|
52
65
|
}
|
|
53
|
-
_NanoDeviceBoxAdapter_context = new WeakMap(), _NanoDeviceBoxAdapter_box = new WeakMap(), _NanoDeviceBoxAdapter_parametric = new WeakMap(), _NanoDeviceBoxAdapter_instances = new WeakSet(), _NanoDeviceBoxAdapter_wrapParameters = function _NanoDeviceBoxAdapter_wrapParameters(box) {
|
|
66
|
+
_NanoDeviceBoxAdapter_context = new WeakMap(), _NanoDeviceBoxAdapter_box = new WeakMap(), _NanoDeviceBoxAdapter_terminator = new WeakMap(), _NanoDeviceBoxAdapter_parametric = new WeakMap(), _NanoDeviceBoxAdapter_file = new WeakMap(), _NanoDeviceBoxAdapter_instances = new WeakSet(), _NanoDeviceBoxAdapter_wrapParameters = function _NanoDeviceBoxAdapter_wrapParameters(box) {
|
|
54
67
|
return {
|
|
55
|
-
volume: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.volume, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "
|
|
56
|
-
|
|
68
|
+
volume: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.volume, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: "db", fractionDigits: 1 }), "Gain"),
|
|
69
|
+
octave: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.octave, ValueMapping.linearInteger(-3, 3), StringMapping.numeric({ unit: "oct" }), "Octave", 0.5),
|
|
70
|
+
tune: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.tune, ValueMapping.linear(-1200.0, 1200.0), StringMapping.numeric({ unit: "ct", fractionDigits: 0 }), "Tune", 0.5),
|
|
71
|
+
rootKey: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.rootKey, ValueMapping.linearInteger(0, 127), StringMapping.indices("", RootKeyLabels), "Root", 60 / 127),
|
|
72
|
+
release: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.release, ValueMapping.exponential(0.001, 8.0), StringMapping.numeric({ unit: "s", fractionDigits: 3 }), "Release"),
|
|
73
|
+
attack: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.attack, ValueMapping.exponential(0.001, 5.0), StringMapping.numeric({ unit: "s", fractionDigits: 3 }), "Attack"),
|
|
74
|
+
sampleStart: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.sampleStart, ValueMapping.unipolar(), StringMapping.percent(), "Start", 0.0),
|
|
75
|
+
sampleEnd: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.sampleEnd, ValueMapping.unipolar(), StringMapping.percent(), "End", 1.0),
|
|
76
|
+
loop: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.loop, ValueMapping.bool, StringMapping.bool, "Loop"),
|
|
77
|
+
loopFade: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.loopFade, ValueMapping.exponential(0.001, 1.0), StringMapping.numeric({ unit: "s", fractionDigits: 3 }), "Fade"),
|
|
78
|
+
loopStart: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.loopStart, ValueMapping.unipolar(), StringMapping.percent(), "Loop Start", 0.0),
|
|
79
|
+
loopEnd: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.loopEnd, ValueMapping.unipolar(), StringMapping.percent(), "Loop End", 1.0)
|
|
57
80
|
};
|
|
58
81
|
};
|
|
@@ -26,8 +26,8 @@ export var InstrumentFactories;
|
|
|
26
26
|
InstrumentFactories.Nano = {
|
|
27
27
|
defaultName: "Nano",
|
|
28
28
|
defaultIcon: IconSymbol.NanoWave,
|
|
29
|
-
briefDescription: "
|
|
30
|
-
description: "
|
|
29
|
+
briefDescription: "Polyphonic Sampler",
|
|
30
|
+
description: "Polyphonic sampler with root key, region, crossfade loop and envelope",
|
|
31
31
|
manualPage: DeviceManualUrls.Nano,
|
|
32
32
|
trackType: TrackType.Notes,
|
|
33
33
|
create: (boxGraph, host, name, icon, attachment) => NanoDeviceBox.create(boxGraph, UUID.generate(), box => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opendaw/studio-adapters",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"license": "AGPL-3.0-or-later",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
"@opendaw/lib-midi": "^0.0.74",
|
|
32
32
|
"@opendaw/lib-runtime": "^0.0.86",
|
|
33
33
|
"@opendaw/lib-std": "^0.0.85",
|
|
34
|
-
"@opendaw/studio-boxes": "^0.0.
|
|
35
|
-
"@opendaw/studio-enums": "^0.1.
|
|
34
|
+
"@opendaw/studio-boxes": "^0.0.110",
|
|
35
|
+
"@opendaw/studio-enums": "^0.1.3",
|
|
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": "
|
|
42
|
+
"gitHead": "b540a9cb4d3934297e8bb2acf8557781eb9580f0"
|
|
43
43
|
}
|