@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,EAAwB,IAAI,EAAe,MAAM,kBAAkB,CAAA;AAC1E,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;AAExE,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,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAEzC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIpD,SAAS,IAAI,IAAI;CAgBpB"}
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 }), "Volume"),
56
- release: __classPrivateFieldGet(this, _NanoDeviceBoxAdapter_parametric, "f").createParameter(box.release, ValueMapping.exponential(0.001, 8.0), StringMapping.numeric({ unit: "s", fractionDigits: 3 }), "Release")
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: "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 => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendaw/studio-adapters",
3
- "version": "0.3.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.109",
35
- "@opendaw/studio-enums": "^0.1.2",
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": "876a44565e343971b47d6ab815f2f4ef73bd9de7"
42
+ "gitHead": "b540a9cb4d3934297e8bb2acf8557781eb9580f0"
43
43
  }