@opendaw/studio-core 0.0.54 → 0.0.56

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":"EffectFactories.d.ts","sourceRoot":"","sources":["../src/EffectFactories.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAG7C,yBAAiB,eAAe,CAAC;IACtB,MAAM,QAAQ,EAAE,aAWtB,CAAA;IAEM,MAAM,KAAK,EAAE,aAWnB,CAAA;IAEM,MAAM,QAAQ,EAAE,aAWtB,CAAA;IAEM,MAAM,SAAS,EAAE,aAqBvB,CAAA;IAEM,MAAM,UAAU,EAAE,aAYxB,CAAA;IAEM,MAAM,KAAK,EAAE,aAYnB,CAAA;IAEM,MAAM,UAAU,EAAE,aAYxB,CAAA;IAEM,MAAM,MAAM,EAAE,aAapB,CAAA;IAEM,MAAM,OAAO,EAAE,aAYrB,CAAA;IAEM,MAAM,IAAI,EAAE,aAYlB,CAAA;IAEM,MAAM,MAAM,EAAE,aAYpB,CAAA;IAEM,MAAM,OAAO,EAAE,aAoCrB,CAAA;IAEM,MAAM,SAAS;;;;;KAAyC,CAAA;IACxD,MAAM,UAAU;;;;;;;;;KAA0E,CAAA;IAC1F,MAAM,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA4B,CAAA;IACjF,MAAM,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA6B,CAAA;IACnF,MAAM,WAAW;;;;;;;;;;;;;KAAgC,CAAA;IACxD,KAAY,cAAc,GAAG,MAAM,OAAO,SAAS,CAAA;IACnD,KAAY,eAAe,GAAG,MAAM,OAAO,UAAU,CAAA;CACxD"}
1
+ {"version":3,"file":"EffectFactories.d.ts","sourceRoot":"","sources":["../src/EffectFactories.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAG7C,yBAAiB,eAAe,CAAC;IACtB,MAAM,QAAQ,EAAE,aAWtB,CAAA;IAEM,MAAM,KAAK,EAAE,aAWnB,CAAA;IAEM,MAAM,QAAQ,EAAE,aAYtB,CAAA;IAEM,MAAM,SAAS,EAAE,aAqBvB,CAAA;IAEM,MAAM,UAAU,EAAE,aAYxB,CAAA;IAEM,MAAM,KAAK,EAAE,aAYnB,CAAA;IAEM,MAAM,UAAU,EAAE,aAYxB,CAAA;IAEM,MAAM,MAAM,EAAE,aAapB,CAAA;IAEM,MAAM,OAAO,EAAE,aAYrB,CAAA;IAEM,MAAM,IAAI,EAAE,aAYlB,CAAA;IAEM,MAAM,MAAM,EAAE,aAYpB,CAAA;IAEM,MAAM,OAAO,EAAE,aAoCrB,CAAA;IAEM,MAAM,SAAS;;;;;KAAyC,CAAA;IACxD,MAAM,UAAU;;;;;;;;;KAA0E,CAAA;IAC1F,MAAM,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA4B,CAAA;IACjF,MAAM,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA6B,CAAA;IACnF,MAAM,WAAW;;;;;;;;;;;;;KAAgC,CAAA;IACxD,KAAY,cAAc,GAAG,MAAM,OAAO,SAAS,CAAA;IACnD,KAAY,eAAe,GAAG,MAAM,OAAO,UAAU,CAAA;CACxD"}
@@ -31,7 +31,8 @@ export var EffectFactories;
31
31
  EffectFactories.Velocity = {
32
32
  defaultName: "Velocity",
33
33
  defaultIcon: IconSymbol.Velocity,
34
- description: "Shifts the pitch of incoming notes",
34
+ description: "Manipulates the velocity of incoming notes",
35
+ manualPage: "manuals/devices/midi/velocity",
35
36
  separatorBefore: false,
36
37
  type: "midi",
37
38
  create: ({ boxGraph }, unit, index) => VelocityDeviceBox.create(boxGraph, UUID.generate(), box => {
@@ -4,11 +4,12 @@ import { int } from "@opendaw/lib-std";
4
4
  import { Project } from "./project";
5
5
  import { EffectBox } from "./EffectBox";
6
6
  export interface EffectFactory {
7
- get defaultName(): string;
8
- get defaultIcon(): IconSymbol;
9
- get description(): string;
10
- get separatorBefore(): boolean;
11
- get type(): "audio" | "midi";
7
+ readonly defaultName: string;
8
+ readonly defaultIcon: IconSymbol;
9
+ readonly description: string;
10
+ readonly manualPage?: string;
11
+ readonly separatorBefore: boolean;
12
+ readonly type: "audio" | "midi";
12
13
  create(project: Project, unit: Field<EffectPointerType>, index: int): EffectBox;
13
14
  }
14
15
  //# sourceMappingURL=EffectFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AAErC,MAAM,WAAW,aAAa;IAC1B,IAAI,WAAW,IAAI,MAAM,CAAA;IACzB,IAAI,WAAW,IAAI,UAAU,CAAA;IAC7B,IAAI,WAAW,IAAI,MAAM,CAAA;IACzB,IAAI,eAAe,IAAI,OAAO,CAAA;IAC9B,IAAI,IAAI,IAAI,OAAO,GAAG,MAAM,CAAA;IAE5B,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,CAAA;CAClF"}
1
+ {"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AAErC,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAA;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IAE/B,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,CAAA;CAClF"}
@@ -131,12 +131,12 @@ export class EngineWorklet extends AudioWorkletNode {
131
131
  this.#notifyClipNotification.notify({ type: "sequencing", changes });
132
132
  },
133
133
  switchMarkerState: (state) => this.#markerState.setValue(state),
134
- sendMIDIData: (target, data, relativeTimeInMs) => {
134
+ sendMIDIData: (midiDeviceId, data, relativeTimeInMs) => {
135
135
  let delay = 20.0; // default 20ms
136
136
  if (this.context instanceof AudioContext) {
137
137
  delay = this.context.outputLatency / 1000.0;
138
138
  }
139
- this.#project.receivedMIDIFromEngine(target, data, relativeTimeInMs + delay);
139
+ this.#project.receivedMIDIFromEngine(midiDeviceId, data, relativeTimeInMs + delay);
140
140
  }
141
141
  });
142
142
  this.#terminator.ownAll(AnimationFrame.add(() => reader.tryRead()), project.liveStreamReceiver.connect(messenger.channel("engine-live-data")), new SyncSource(project.boxGraph, messenger.channel("engine-sync"), false), this.#metronomeEnabled.catchupAndSubscribe(owner => this.#commands.setMetronomeEnabled(owner.getValue())), this.#playbackTimestampEnabled.catchupAndSubscribe(owner => this.#commands.setPlaybackTimestampEnabled(owner.getValue())), this.#countInBarsTotal.catchupAndSubscribe(owner => this.#commands.setCountInBarsTotal(owner.getValue())));
@@ -1,9 +1,16 @@
1
- import { UUID } from "@opendaw/lib-std";
1
+ import { byte, UUID } from "@opendaw/lib-std";
2
2
  import { InstrumentFactory } from "./InstrumentFactory";
3
3
  export declare namespace InstrumentFactories {
4
4
  const Tape: InstrumentFactory;
5
5
  const Nano: InstrumentFactory;
6
- const Playfield: InstrumentFactory;
6
+ type PlayfieldAttachment = ReadonlyArray<{
7
+ note: byte;
8
+ uuid: UUID.Bytes;
9
+ name: string;
10
+ durationInSeconds: number;
11
+ exclude: boolean;
12
+ }>;
13
+ const Playfield: InstrumentFactory<PlayfieldAttachment>;
7
14
  const Vaporisateur: InstrumentFactory;
8
15
  const MIDIOutput: InstrumentFactory;
9
16
  const Soundfont: InstrumentFactory<{
@@ -12,7 +19,7 @@ export declare namespace InstrumentFactories {
12
19
  }>;
13
20
  const Named: {
14
21
  Vaporisateur: InstrumentFactory<never>;
15
- Playfield: InstrumentFactory<never>;
22
+ Playfield: InstrumentFactory<PlayfieldAttachment>;
16
23
  Nano: InstrumentFactory<never>;
17
24
  Tape: InstrumentFactory<never>;
18
25
  Soundfont: InstrumentFactory<{
@@ -1 +1 @@
1
- {"version":3,"file":"InstrumentFactories.d.ts","sourceRoot":"","sources":["../src/InstrumentFactories.ts"],"names":[],"mappings":"AAYA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAKrC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AAGrD,yBAAiB,mBAAmB,CAAC;IAC1B,MAAM,IAAI,EAAE,iBAmBlB,CAAA;IAEM,MAAM,IAAI,EAAE,iBAwBlB,CAAA;IAEM,MAAM,SAAS,EAAE,iBAqCvB,CAAA;IAEM,MAAM,YAAY,EAAE,iBAqB1B,CAAA;IAEM,MAAM,UAAU,EAAE,iBAexB,CAAA;IAEM,MAAM,SAAS,EAAE,iBAAiB,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAqB5E,CAAA;IAEM,MAAM,KAAK;;;;;;kBAvBgC,IAAI,CAAC,MAAM;kBAAQ,MAAM;;;KAuBM,CAAA;IACjF,KAAY,IAAI,GAAG,MAAM,OAAO,KAAK,CAAA;CAYxC"}
1
+ {"version":3,"file":"InstrumentFactories.d.ts","sourceRoot":"","sources":["../src/InstrumentFactories.ts"],"names":[],"mappings":"AAYA,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,iBAmBlB,CAAA;IAEM,MAAM,IAAI,EAAE,iBAwBlB,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,CA4B5D,CAAA;IAEM,MAAM,YAAY,EAAE,iBAqB1B,CAAA;IAEM,MAAM,UAAU,EAAE,iBAexB,CAAA;IAEM,MAAM,SAAS,EAAE,iBAAiB,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAqB5E,CAAA;IAEM,MAAM,KAAK;;;;;;kBAvBgC,IAAI,CAAC,MAAM;kBAAQ,MAAM;;;KAuBM,CAAA;IACjF,KAAY,IAAI,GAAG,MAAM,OAAO,KAAK,CAAA;CAYxC"}
@@ -1,5 +1,5 @@
1
1
  import { AudioFileBox, MIDIOutputDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, PlayfieldSampleBox, SoundfontDeviceBox, SoundfontFileBox, TapeDeviceBox, VaporisateurDeviceBox } from "@opendaw/studio-boxes";
2
- import { UUID } from "@opendaw/lib-std";
2
+ import { isDefined, UUID } from "@opendaw/lib-std";
3
3
  import { Waveform } from "@opendaw/lib-dsp";
4
4
  import { IconSymbol, TrackType } from "@opendaw/studio-adapters";
5
5
  export var InstrumentFactories;
@@ -45,32 +45,23 @@ export var InstrumentFactories;
45
45
  defaultIcon: IconSymbol.Playfield,
46
46
  description: "Drum computer",
47
47
  trackType: TrackType.Notes,
48
- create: (boxGraph, host, name, icon, _attachment) => {
48
+ create: (boxGraph, host, name, icon, attachment) => {
49
49
  const deviceBox = PlayfieldDeviceBox.create(boxGraph, UUID.generate(), box => {
50
50
  box.label.setValue(name);
51
51
  box.icon.setValue(IconSymbol.toName(icon));
52
52
  box.host.refer(host);
53
53
  });
54
- const files = [
55
- useAudioFile(boxGraph, UUID.parse("8bb2c6e8-9a6d-4d32-b7ec-1263594ef367"), "909 Bassdrum", 0.509),
56
- useAudioFile(boxGraph, UUID.parse("0017fa18-a5eb-4d9d-b6f2-e2ddd30a3010"), "909 Snare", 0.235),
57
- useAudioFile(boxGraph, UUID.parse("28d14cb9-1dc6-4193-9dd7-4e881f25f520"), "909 Low Tom", 0.509),
58
- useAudioFile(boxGraph, UUID.parse("21f92306-d6e7-446c-a34b-b79620acfefc"), "909 Mid Tom", 0.385),
59
- useAudioFile(boxGraph, UUID.parse("ad503883-8a72-46ab-a05b-a84149953e17"), "909 High Tom", 0.511),
60
- useAudioFile(boxGraph, UUID.parse("cfee850b-7658-4d08-9e3b-79d196188504"), "909 Rimshot", 0.150),
61
- useAudioFile(boxGraph, UUID.parse("32a6f36f-06eb-4b84-bb57-5f51103eb9e6"), "909 Clap", 0.507),
62
- useAudioFile(boxGraph, UUID.parse("e0ac4b39-23fb-4a56-841d-c9e0ff440cab"), "909 Closed Hat", 0.154),
63
- useAudioFile(boxGraph, UUID.parse("51c5eea4-391c-4743-896a-859692ec1105"), "909 Open Hat", 0.502),
64
- useAudioFile(boxGraph, UUID.parse("42a56ff6-89b6-4f2e-8a66-5a41d316f4cb"), "909 Crash", 1.055),
65
- useAudioFile(boxGraph, UUID.parse("87cde966-b799-4efc-a994-069e703478d3"), "909 Ride", 1.720)
66
- ];
67
- const samples = files.map((file, index) => PlayfieldSampleBox.create(boxGraph, UUID.generate(), box => {
68
- box.device.refer(deviceBox.samples);
69
- box.file.refer(file);
70
- box.index.setValue(60 + index);
71
- }));
72
- samples[7].exclude.setValue(true);
73
- samples[8].exclude.setValue(true);
54
+ if (isDefined(attachment)) {
55
+ attachment.filter(({ note, uuid, name, durationInSeconds, exclude }) => {
56
+ const fileBox = useAudioFile(boxGraph, uuid, name, durationInSeconds);
57
+ PlayfieldSampleBox.create(boxGraph, UUID.generate(), box => {
58
+ box.device.refer(deviceBox.samples);
59
+ box.file.refer(fileBox);
60
+ box.index.setValue(note);
61
+ box.exclude.setValue(exclude);
62
+ });
63
+ });
64
+ }
74
65
  return deviceBox;
75
66
  }
76
67
  };