@opendaw/studio-core 0.0.126 → 0.0.128

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 (82) hide show
  1. package/dist/AssetService.d.ts.map +1 -1
  2. package/dist/AssetService.js +7 -7
  3. package/dist/AudioConsolidation.d.ts.map +1 -1
  4. package/dist/AudioConsolidation.js +2 -2
  5. package/dist/EffectBox.d.ts +2 -2
  6. package/dist/EffectBox.d.ts.map +1 -1
  7. package/dist/EffectFactories.d.ts +20 -14
  8. package/dist/EffectFactories.d.ts.map +1 -1
  9. package/dist/EffectFactories.js +88 -20
  10. package/dist/EffectFactory.d.ts +1 -0
  11. package/dist/EffectFactory.d.ts.map +1 -1
  12. package/dist/Engine.d.ts +2 -1
  13. package/dist/Engine.d.ts.map +1 -1
  14. package/dist/EngineFacade.d.ts +2 -1
  15. package/dist/EngineFacade.d.ts.map +1 -1
  16. package/dist/EngineFacade.js +3 -0
  17. package/dist/EngineWorklet.d.ts +2 -1
  18. package/dist/EngineWorklet.d.ts.map +1 -1
  19. package/dist/EngineWorklet.js +11 -1
  20. package/dist/Mixer.d.ts.map +1 -1
  21. package/dist/Mixer.js +3 -2
  22. package/dist/OfflineEngineRenderer.d.ts.map +1 -1
  23. package/dist/OfflineEngineRenderer.js +41 -3
  24. package/dist/StudioPreferences.d.ts +1 -1
  25. package/dist/StudioSettings.d.ts +1 -1
  26. package/dist/StudioSettings.js +2 -2
  27. package/dist/capture/RecordAudio.d.ts.map +1 -1
  28. package/dist/capture/RecordAudio.js +48 -18
  29. package/dist/capture/RecordAutomation.d.ts.map +1 -1
  30. package/dist/capture/RecordAutomation.js +219 -198
  31. package/dist/capture/RecordMidi.d.ts.map +1 -1
  32. package/dist/capture/RecordMidi.js +1 -1
  33. package/dist/cloud/CloudBackupSamples.js +1 -1
  34. package/dist/dawproject/DawProjectExporter.js +1 -1
  35. package/dist/dawproject/DawProjectService.d.ts.map +1 -1
  36. package/dist/dawproject/DawProjectService.js +3 -16
  37. package/dist/index.d.ts +0 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +0 -1
  40. package/dist/midi/MidiDevices.d.ts.map +1 -1
  41. package/dist/midi/MidiDevices.js +8 -2
  42. package/dist/offline-engine.js +1 -1
  43. package/dist/offline-engine.js.map +3 -3
  44. package/dist/processors.js +37 -25
  45. package/dist/processors.js.map +4 -4
  46. package/dist/project/Project.d.ts.map +1 -1
  47. package/dist/project/Project.js +30 -5
  48. package/dist/project/Recovery.js +1 -1
  49. package/dist/project/migration/MigrateAudioClipBox.d.ts.map +1 -1
  50. package/dist/project/migration/MigrateAudioClipBox.js +7 -0
  51. package/dist/project/migration/MigrateAudioRegionBox.d.ts.map +1 -1
  52. package/dist/project/migration/MigrateAudioRegionBox.js +7 -0
  53. package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
  54. package/dist/samples/OpenSampleAPI.js +1 -1
  55. package/dist/samples/SampleService.js +1 -1
  56. package/dist/samples/SampleStorage.d.ts.map +1 -1
  57. package/dist/samples/SampleStorage.js +1 -1
  58. package/dist/ui/clipboard/ClipboardManager.d.ts.map +1 -1
  59. package/dist/ui/clipboard/ClipboardManager.js +18 -4
  60. package/dist/ui/clipboard/types/AudioUnitsClipboardHandler.d.ts.map +1 -1
  61. package/dist/ui/clipboard/types/AudioUnitsClipboardHandler.js +8 -2
  62. package/dist/ui/clipboard/types/DevicesClipboardHandler.d.ts.map +1 -1
  63. package/dist/ui/clipboard/types/DevicesClipboardHandler.js +77 -10
  64. package/dist/ui/clipboard/types/DevicesClipboardHandler.test.d.ts +2 -0
  65. package/dist/ui/clipboard/types/DevicesClipboardHandler.test.d.ts.map +1 -0
  66. package/dist/ui/clipboard/types/DevicesClipboardHandler.test.js +1154 -0
  67. package/dist/ui/timeline/RegionClipResolver.d.ts.map +1 -1
  68. package/dist/ui/timeline/RegionClipResolver.js +21 -29
  69. package/dist/ui/timeline/TimeGrid.d.ts +2 -0
  70. package/dist/ui/timeline/TimeGrid.d.ts.map +1 -1
  71. package/dist/ui/timeline/TimeGrid.js +13 -1
  72. package/dist/workers-main.js +1 -1
  73. package/dist/workers-main.js.map +3 -3
  74. package/dist/ysync/YService.d.ts +6 -1
  75. package/dist/ysync/YService.d.ts.map +1 -1
  76. package/dist/ysync/YService.js +2 -2
  77. package/dist/ysync/YSync.d.ts.map +1 -1
  78. package/dist/ysync/YSync.js +1 -0
  79. package/package.json +15 -15
  80. package/dist/WavFile.d.ts +0 -7
  81. package/dist/WavFile.d.ts.map +0 -1
  82. package/dist/WavFile.js +0 -120
@@ -1 +1 @@
1
- {"version":3,"file":"AssetService.d.ts","sourceRoot":"","sources":["../src/AssetService.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EAKL,QAAQ,EACR,QAAQ,EAER,QAAQ,EAER,YAAY,EACZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAA;AAEpE,yBAAiB,YAAY,CAAC;IAC1B,KAAY,UAAU,GAAG;QACrB,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,eAAe,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;QACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAA;KAClC,CAAA;CACJ;AAED,8BAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,EAAE,GAAG,GAAG,IAAI;IACvE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAChD,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAA;IAC3E,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAA;IAEhE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAA2B;IAE1E,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,YAAY;IAE/C,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAI1D,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IAExD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;QAAE,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;cAsCjG,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAoChH,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAClE"}
1
+ {"version":3,"file":"AssetService.d.ts","sourceRoot":"","sources":["../src/AssetService.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EAKL,QAAQ,EACR,QAAQ,EAER,QAAQ,EAER,YAAY,EACZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAA;AAEpE,yBAAiB,YAAY,CAAC;IAC1B,KAAY,UAAU,GAAG;QACrB,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,eAAe,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;QACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAA;KAClC,CAAA;CACJ;AAED,8BAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,EAAE,GAAG,GAAG,IAAI;IACvE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAChD,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAA;IAC3E,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAA;IAEhE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAA2B;IAE1E,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,YAAY;IAE/C,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAI1D,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IAExD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;QAAE,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;cAyCjG,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAuChH,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAClE"}
@@ -1,4 +1,4 @@
1
- import { DefaultObservableValue, Errors, isInstanceOf, isNotUndefined, Notifier, panic, Progress, RuntimeNotifier, UUID } from "@opendaw/lib-std";
1
+ import { DefaultObservableValue, Errors, isInstanceOf, isNotUndefined, Notifier, Progress, RuntimeNotifier, UUID } from "@opendaw/lib-std";
2
2
  import { Files } from "@opendaw/lib-dom";
3
3
  import { Promises } from "@opendaw/lib-runtime";
4
4
  export class AssetService {
@@ -33,9 +33,9 @@ export class AssetService {
33
33
  if (Errors.isAbort(error) || Errors.isNotAllowed(error)) {
34
34
  return;
35
35
  }
36
- else {
37
- return panic(String(error));
38
- }
36
+ console.warn(`File browse failed: ${error}`);
37
+ await RuntimeNotifier.info({ headline: "File Access Error", message: String(error) });
38
+ return;
39
39
  }
40
40
  if (files.length === 0) {
41
41
  return;
@@ -62,9 +62,9 @@ export class AssetService {
62
62
  if (Errors.isAbort(error) || Errors.isNotAllowed(error)) {
63
63
  return [];
64
64
  }
65
- else {
66
- return panic(String(error));
67
- }
65
+ console.warn(`File browse failed: ${error}`);
66
+ await RuntimeNotifier.info({ headline: "File Access Error", message: String(error) });
67
+ return [];
68
68
  }
69
69
  const progress = new DefaultObservableValue(0.0);
70
70
  const dialog = RuntimeNotifier.progress({
@@ -1 +1 @@
1
- {"version":3,"file":"AudioConsolidation.d.ts","sourceRoot":"","sources":["../src/AudioConsolidation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,qBAAqB,EAA2B,MAAM,0BAA0B,CAAA;AACxF,OAAO,EAIH,OAAO,EACP,aAAa,EAGhB,MAAM,SAAS,CAAA;AAEhB,yBAAiB,kBAAkB,CAAC;IACzB,MAAM,OAAO,GAAU,SAAS,OAAO,EAChB,eAAe,aAAa,EAC5B,SAAS,aAAa,CAAC,qBAAqB,CAAC,EAC7C,cAAc,WAAW,KAAG,OAAO,CAAC,IAAI,CAwFrE,CAAA;CACJ"}
1
+ {"version":3,"file":"AudioConsolidation.d.ts","sourceRoot":"","sources":["../src/AudioConsolidation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,qBAAqB,EAA2B,MAAM,0BAA0B,CAAA;AACxF,OAAO,EAIH,OAAO,EACP,aAAa,EAEhB,MAAM,SAAS,CAAA;AAEhB,yBAAiB,kBAAkB,CAAC;IACzB,MAAM,OAAO,GAAU,SAAS,OAAO,EAChB,eAAe,aAAa,EAC5B,SAAS,aAAa,CAAC,qBAAqB,CAAC,EAC7C,cAAc,WAAW,KAAG,OAAO,CAAC,IAAI,CAwFrE,CAAA;CACJ"}
@@ -1,7 +1,7 @@
1
1
  import { Arrays, Errors, isDefined, Option, RuntimeNotifier, UUID } from "@opendaw/lib-std";
2
- import { AudioData, RegionCollection } from "@opendaw/lib-dsp";
2
+ import { AudioData, RegionCollection, WavFile } from "@opendaw/lib-dsp";
3
3
  import { Promises } from "@opendaw/lib-runtime";
4
- import { AudioContentFactory, AudioFileBoxFactory, OfflineEngineRenderer, WavFile, Workers } from "./index";
4
+ import { AudioContentFactory, AudioFileBoxFactory, OfflineEngineRenderer, Workers } from "./index";
5
5
  export var AudioConsolidation;
6
6
  (function (AudioConsolidation) {
7
7
  AudioConsolidation.flatten = async (project, sampleService, regions, abortSignal) => {
@@ -1,3 +1,3 @@
1
- import { ArpeggioDeviceBox, MaximizerDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, GateDeviceBox, ModularDeviceBox, NeuralAmpDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, UnknownAudioEffectDeviceBox, UnknownMidiEffectDeviceBox, VelocityDeviceBox, WaveshaperDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
2
- export type EffectBox = ArpeggioDeviceBox | PitchDeviceBox | VelocityDeviceBox | ZeitgeistDeviceBox | UnknownMidiEffectDeviceBox | MaximizerDeviceBox | DelayDeviceBox | ReverbDeviceBox | RevampDeviceBox | StereoToolDeviceBox | TidalDeviceBox | ModularDeviceBox | UnknownAudioEffectDeviceBox | CompressorDeviceBox | GateDeviceBox | CrusherDeviceBox | FoldDeviceBox | DattorroReverbDeviceBox | NeuralAmpDeviceBox | WaveshaperDeviceBox;
1
+ import { ArpeggioDeviceBox, MaximizerDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, GateDeviceBox, ModularDeviceBox, NeuralAmpDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, UnknownAudioEffectDeviceBox, UnknownMidiEffectDeviceBox, VelocityDeviceBox, WaveshaperDeviceBox, SpielwerkDeviceBox, WerkstattDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
2
+ export type EffectBox = ArpeggioDeviceBox | PitchDeviceBox | VelocityDeviceBox | ZeitgeistDeviceBox | UnknownMidiEffectDeviceBox | SpielwerkDeviceBox | MaximizerDeviceBox | DelayDeviceBox | ReverbDeviceBox | RevampDeviceBox | StereoToolDeviceBox | TidalDeviceBox | ModularDeviceBox | UnknownAudioEffectDeviceBox | CompressorDeviceBox | GateDeviceBox | CrusherDeviceBox | FoldDeviceBox | DattorroReverbDeviceBox | NeuralAmpDeviceBox | WaveshaperDeviceBox | WerkstattDeviceBox;
3
3
  //# sourceMappingURL=EffectBox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EffectBox.d.ts","sourceRoot":"","sources":["../src/EffectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,SAAS,GACf,iBAAiB,GAAG,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,0BAA0B,GACxG,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,mBAAmB,GAAG,cAAc,GAC9G,gBAAgB,GAAG,2BAA2B,GAAG,mBAAmB,GAAG,aAAa,GACpF,gBAAgB,GAAG,aAAa,GAAG,uBAAuB,GAAG,kBAAkB,GAAG,mBAAmB,CAAA"}
1
+ {"version":3,"file":"EffectBox.d.ts","sourceRoot":"","sources":["../src/EffectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EACrB,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,SAAS,GACf,iBAAiB,GAAG,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,0BAA0B,GACxG,kBAAkB,GAClB,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,mBAAmB,GAAG,cAAc,GAC9G,gBAAgB,GAAG,2BAA2B,GAAG,mBAAmB,GAAG,aAAa,GACpF,gBAAgB,GAAG,aAAa,GAAG,uBAAuB,GAAG,kBAAkB,GAAG,mBAAmB,GACrG,kBAAkB,CAAA"}
@@ -4,6 +4,7 @@ export declare namespace EffectFactories {
4
4
  const Pitch: EffectFactory;
5
5
  const Velocity: EffectFactory;
6
6
  const Zeitgeist: EffectFactory;
7
+ const Spielwerk: EffectFactory;
7
8
  const StereoTool: EffectFactory;
8
9
  const Delay: EffectFactory;
9
10
  const DattorroReverb: EffectFactory;
@@ -17,46 +18,51 @@ export declare namespace EffectFactories {
17
18
  const Tidal: EffectFactory;
18
19
  const Revamp: EffectFactory;
19
20
  const NeuralAmp: EffectFactory;
21
+ const Werkstatt: EffectFactory;
20
22
  const Modular: EffectFactory;
21
23
  const MidiNamed: {
22
24
  Arpeggio: EffectFactory;
23
25
  Pitch: EffectFactory;
26
+ Spielwerk: EffectFactory;
24
27
  Velocity: EffectFactory;
25
28
  Zeitgeist: EffectFactory;
26
29
  };
27
30
  const AudioNamed: {
28
- StereoTool: EffectFactory;
29
31
  Compressor: EffectFactory;
30
- Gate: EffectFactory;
32
+ Crusher: EffectFactory;
33
+ DattorroReverb: EffectFactory;
31
34
  Delay: EffectFactory;
35
+ Fold: EffectFactory;
32
36
  Reverb: EffectFactory;
33
- DattorroReverb: EffectFactory;
37
+ Gate: EffectFactory;
38
+ Maximizer: EffectFactory;
34
39
  Revamp: EffectFactory;
35
- Crusher: EffectFactory;
36
- Fold: EffectFactory;
37
- Waveshaper: EffectFactory;
40
+ StereoTool: EffectFactory;
38
41
  Tidal: EffectFactory;
39
42
  NeuralAmp: EffectFactory;
40
- Maximizer: EffectFactory;
43
+ Waveshaper: EffectFactory;
44
+ Werkstatt: EffectFactory;
41
45
  };
42
46
  const MidiList: ReadonlyArray<Readonly<EffectFactory>>;
43
47
  const AudioList: ReadonlyArray<Readonly<EffectFactory>>;
44
48
  const MergedNamed: {
45
- StereoTool: EffectFactory;
46
49
  Compressor: EffectFactory;
47
- Gate: EffectFactory;
50
+ Crusher: EffectFactory;
51
+ DattorroReverb: EffectFactory;
48
52
  Delay: EffectFactory;
53
+ Fold: EffectFactory;
49
54
  Reverb: EffectFactory;
50
- DattorroReverb: EffectFactory;
55
+ Gate: EffectFactory;
56
+ Maximizer: EffectFactory;
51
57
  Revamp: EffectFactory;
52
- Crusher: EffectFactory;
53
- Fold: EffectFactory;
54
- Waveshaper: EffectFactory;
58
+ StereoTool: EffectFactory;
55
59
  Tidal: EffectFactory;
56
60
  NeuralAmp: EffectFactory;
57
- Maximizer: EffectFactory;
61
+ Waveshaper: EffectFactory;
62
+ Werkstatt: EffectFactory;
58
63
  Arpeggio: EffectFactory;
59
64
  Pitch: EffectFactory;
65
+ Spielwerk: EffectFactory;
60
66
  Velocity: EffectFactory;
61
67
  Zeitgeist: EffectFactory;
62
68
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EffectFactories.d.ts","sourceRoot":"","sources":["../src/EffectFactories.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAG7C,yBAAiB,eAAe,CAAC;IACtB,MAAM,QAAQ,EAAE,aAatB,CAAA;IAEM,MAAM,KAAK,EAAE,aAanB,CAAA;IAEM,MAAM,QAAQ,EAAE,aAatB,CAAA;IAEM,MAAM,SAAS,EAAE,aA8BvB,CAAA;IAEM,MAAM,UAAU,EAAE,aAcxB,CAAA;IAEM,MAAM,KAAK,EAAE,aAcnB,CAAA;IAEM,MAAM,cAAc,EAAE,aAc5B,CAAA;IAEM,MAAM,SAAS,EAAE,aAavB,CAAA;IAEM,MAAM,UAAU,EAAE,aAcxB,CAAA;IAEM,MAAM,IAAI,EAAE,aAalB,CAAA;IAEM,MAAM,MAAM,EAAE,aAcpB,CAAA;IAEM,MAAM,OAAO,EAAE,aAarB,CAAA;IAEM,MAAM,IAAI,EAAE,aAalB,CAAA;IAEM,MAAM,UAAU,EAAE,aAaxB,CAAA;IAEM,MAAM,KAAK,EAAE,aAcnB,CAAA;IAEM,MAAM,MAAM,EAAE,aAapB,CAAA;IAEM,MAAM,SAAS,EAAE,aAavB,CAAA;IAEM,MAAM,OAAO,EAAE,aAqDrB,CAAA;IAEM,MAAM,SAAS;;;;;KAKrB,CAAA;IAIM,MAAM,UAAU;;;;;;;;;;;;;;KActB,CAAA;IAIM,MAAM,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAChC,CAAA;IACrB,MAAM,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAChC,CAAA;IACtB,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":"AA8BA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAG7C,yBAAiB,eAAe,CAAC;IACtB,MAAM,QAAQ,EAAE,aAetB,CAAA;IAEM,MAAM,KAAK,EAAE,aAenB,CAAA;IAEM,MAAM,QAAQ,EAAE,aAetB,CAAA;IAEM,MAAM,SAAS,EAAE,aAgCvB,CAAA;IAEM,MAAM,SAAS,EAAE,aAevB,CAAA;IAEM,MAAM,UAAU,EAAE,aAexB,CAAA;IAEM,MAAM,KAAK,EAAE,aAgBnB,CAAA;IAEM,MAAM,cAAc,EAAE,aAe5B,CAAA;IAEM,MAAM,SAAS,EAAE,aAevB,CAAA;IAEM,MAAM,UAAU,EAAE,aAexB,CAAA;IAEM,MAAM,IAAI,EAAE,aAelB,CAAA;IAEM,MAAM,MAAM,EAAE,aAgBpB,CAAA;IAEM,MAAM,OAAO,EAAE,aAerB,CAAA;IAEM,MAAM,IAAI,EAAE,aAelB,CAAA;IAEM,MAAM,UAAU,EAAE,aAexB,CAAA;IAEM,MAAM,KAAK,EAAE,aAgBnB,CAAA;IAEM,MAAM,MAAM,EAAE,aAepB,CAAA;IAEM,MAAM,SAAS,EAAE,aAevB,CAAA;IAEM,MAAM,SAAS,EAAE,aAevB,CAAA;IAEM,MAAM,OAAO,EAAE,aAmDrB,CAAA;IAEM,MAAM,SAAS;;;;;;KAMrB,CAAA;IAEM,MAAM,UAAU;;;;;;;;;;;;;;;KAetB,CAAA;IACM,MAAM,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAChC,CAAA;IACrB,MAAM,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAChC,CAAA;IACtB,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;KAAgC,CAAA;IACxD,KAAY,cAAc,GAAG,MAAM,OAAO,SAAS,CAAA;IACnD,KAAY,eAAe,GAAG,MAAM,OAAO,UAAU,CAAA;CACxD"}
@@ -1,5 +1,5 @@
1
1
  import { UUID } from "@opendaw/lib-std";
2
- import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, GateDeviceBox, GrooveShuffleBox, MaximizerDeviceBox, ModularAudioInputBox, ModularAudioOutputBox, ModularBox, ModularDeviceBox, ModuleConnectionBox, NeuralAmpDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, VelocityDeviceBox, WaveshaperDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
2
+ import { ArpeggioDeviceBox, CompressorDeviceBox, CrusherDeviceBox, DattorroReverbDeviceBox, DelayDeviceBox, FoldDeviceBox, GateDeviceBox, GrooveShuffleBox, MaximizerDeviceBox, ModularAudioInputBox, ModularAudioOutputBox, ModularBox, ModularDeviceBox, ModuleConnectionBox, NeuralAmpDeviceBox, PitchDeviceBox, RevampDeviceBox, ReverbDeviceBox, StereoToolDeviceBox, TidalDeviceBox, SpielwerkDeviceBox, VelocityDeviceBox, WaveshaperDeviceBox, WerkstattDeviceBox, ZeitgeistDeviceBox } from "@opendaw/studio-boxes";
3
3
  import { IconSymbol } from "@opendaw/studio-enums";
4
4
  import { DeviceManualUrls } from "@opendaw/studio-adapters";
5
5
  import { EffectParameterDefaults } from "./EffectParameterDefaults";
@@ -8,9 +8,11 @@ export var EffectFactories;
8
8
  EffectFactories.Arpeggio = {
9
9
  defaultName: "Arpeggio",
10
10
  defaultIcon: IconSymbol.Stack,
11
+ briefDescription: "Arpeggiator",
11
12
  description: "Generates rhythmic note sequences from chords",
12
13
  manualPage: DeviceManualUrls.Arpeggio,
13
14
  separatorBefore: false,
15
+ external: false,
14
16
  type: "midi",
15
17
  create: ({ boxGraph }, hostField, index) => ArpeggioDeviceBox.create(boxGraph, UUID.generate(), (box) => {
16
18
  box.label.setValue("Arpeggio");
@@ -21,9 +23,11 @@ export var EffectFactories;
21
23
  EffectFactories.Pitch = {
22
24
  defaultName: "Pitch",
23
25
  defaultIcon: IconSymbol.Note,
26
+ briefDescription: "Pitch Transformer",
24
27
  description: "Shifts the pitch of incoming notes",
25
28
  manualPage: DeviceManualUrls.Pitch,
26
29
  separatorBefore: false,
30
+ external: false,
27
31
  type: "midi",
28
32
  create: ({ boxGraph }, hostField, index) => PitchDeviceBox.create(boxGraph, UUID.generate(), (box) => {
29
33
  box.label.setValue("Pitch");
@@ -34,9 +38,11 @@ export var EffectFactories;
34
38
  EffectFactories.Velocity = {
35
39
  defaultName: "Velocity",
36
40
  defaultIcon: IconSymbol.Velocity,
41
+ briefDescription: "Velocity Transformer",
37
42
  description: "Manipulates the velocity of incoming notes",
38
43
  manualPage: DeviceManualUrls.Velocity,
39
44
  separatorBefore: false,
45
+ external: false,
40
46
  type: "midi",
41
47
  create: ({ boxGraph }, hostField, index) => VelocityDeviceBox.create(boxGraph, UUID.generate(), (box) => {
42
48
  box.label.setValue("Velocity");
@@ -47,9 +53,11 @@ export var EffectFactories;
47
53
  EffectFactories.Zeitgeist = {
48
54
  defaultName: "Zeitgeist",
49
55
  defaultIcon: IconSymbol.Zeitgeist,
56
+ briefDescription: "Shuffle",
50
57
  description: "Distorts space and time",
51
58
  manualPage: DeviceManualUrls.Zeitgeist,
52
59
  separatorBefore: false,
60
+ external: false,
53
61
  type: "midi",
54
62
  create: ({ boxGraph, rootBoxAdapter }, hostField, index) => {
55
63
  const useGlobal = false; // TODO First Zeitgeist should be true
@@ -67,12 +75,29 @@ export var EffectFactories;
67
75
  });
68
76
  }
69
77
  };
78
+ EffectFactories.Spielwerk = {
79
+ defaultName: "Spielwerk",
80
+ defaultIcon: IconSymbol.Code,
81
+ briefDescription: "Scriptable FX",
82
+ description: "User-scripted MIDI effect processor",
83
+ manualPage: DeviceManualUrls.Spielwerk,
84
+ separatorBefore: false,
85
+ external: false,
86
+ type: "midi",
87
+ create: ({ boxGraph }, hostField, index) => SpielwerkDeviceBox.create(boxGraph, UUID.generate(), (box) => {
88
+ box.label.setValue("Spielwerk");
89
+ box.index.setValue(index);
90
+ box.host.refer(hostField);
91
+ })
92
+ };
70
93
  EffectFactories.StereoTool = {
71
94
  defaultName: "Stereo Tool",
72
95
  defaultIcon: IconSymbol.Stereo,
96
+ briefDescription: "Stereo Imaging",
73
97
  description: "Computes a stereo transformation matrix with volume, panning, phase inversion and stereo width.",
74
98
  manualPage: DeviceManualUrls.StereoTool,
75
99
  separatorBefore: false,
100
+ external: false,
76
101
  type: "audio",
77
102
  create: ({ boxGraph }, hostField, index) => StereoToolDeviceBox.create(boxGraph, UUID.generate(), (box) => {
78
103
  box.label.setValue("Stereo Tool");
@@ -83,9 +108,11 @@ export var EffectFactories;
83
108
  EffectFactories.Delay = {
84
109
  defaultName: "Delay",
85
110
  defaultIcon: IconSymbol.Time,
111
+ briefDescription: "Echo FX",
86
112
  description: "Echoes the input signal with time-based repeats",
87
113
  manualPage: DeviceManualUrls.Delay,
88
114
  separatorBefore: false,
115
+ external: false,
89
116
  type: "audio",
90
117
  create: ({ boxGraph }, hostField, index) => DelayDeviceBox.create(boxGraph, UUID.generate(), (box) => {
91
118
  box.label.setValue("Delay");
@@ -97,9 +124,11 @@ export var EffectFactories;
97
124
  EffectFactories.DattorroReverb = {
98
125
  defaultName: "Dattorro Reverb",
99
126
  defaultIcon: IconSymbol.Dattorro,
127
+ briefDescription: "Reverb",
100
128
  description: "Dense algorithmic reverb based on Dattorro's design, capable of infinite decay",
101
129
  manualPage: DeviceManualUrls.DattorroReverb,
102
130
  separatorBefore: false,
131
+ external: false,
103
132
  type: "audio",
104
133
  create: ({ boxGraph }, hostField, index) => DattorroReverbDeviceBox.create(boxGraph, UUID.generate(), (box) => {
105
134
  box.label.setValue("Dattorro Reverb");
@@ -110,9 +139,11 @@ export var EffectFactories;
110
139
  EffectFactories.Maximizer = {
111
140
  defaultName: "Maximizer",
112
141
  defaultIcon: IconSymbol.Volume,
142
+ briefDescription: "Brickwall Limiter",
113
143
  description: "Brickwall limiter with automatic makeup gain",
114
144
  manualPage: DeviceManualUrls.Maximizer,
115
145
  separatorBefore: false,
146
+ external: false,
116
147
  type: "audio",
117
148
  create: ({ boxGraph }, hostField, index) => MaximizerDeviceBox.create(boxGraph, UUID.generate(), (box) => {
118
149
  box.label.setValue("Maximizer");
@@ -123,9 +154,11 @@ export var EffectFactories;
123
154
  EffectFactories.Compressor = {
124
155
  defaultName: "Compressor",
125
156
  defaultIcon: IconSymbol.Compressor,
157
+ briefDescription: "Compressor",
126
158
  description: "Reduces the dynamic range by attenuating signals above a threshold",
127
159
  manualPage: DeviceManualUrls.Compressor,
128
160
  separatorBefore: false,
161
+ external: false,
129
162
  type: "audio",
130
163
  create: ({ boxGraph }, hostField, index) => CompressorDeviceBox.create(boxGraph, UUID.generate(), (box) => {
131
164
  box.label.setValue("Compressor");
@@ -136,9 +169,11 @@ export var EffectFactories;
136
169
  EffectFactories.Gate = {
137
170
  defaultName: "Gate",
138
171
  defaultIcon: IconSymbol.Gate,
172
+ briefDescription: "Noise Gate",
139
173
  description: "Attenuates signals below a threshold to reduce noise",
140
174
  manualPage: DeviceManualUrls.Gate,
141
175
  separatorBefore: false,
176
+ external: false,
142
177
  type: "audio",
143
178
  create: ({ boxGraph }, hostField, index) => GateDeviceBox.create(boxGraph, UUID.generate(), (box) => {
144
179
  box.label.setValue("Gate");
@@ -147,11 +182,13 @@ export var EffectFactories;
147
182
  })
148
183
  };
149
184
  EffectFactories.Reverb = {
150
- defaultName: "Cheap Reverb",
185
+ defaultName: "Free Reverb",
151
186
  defaultIcon: IconSymbol.Cube,
187
+ briefDescription: "Reverb",
152
188
  description: "Simulates space and depth with reflections",
153
189
  manualPage: DeviceManualUrls.Reverb,
154
190
  separatorBefore: false,
191
+ external: false,
155
192
  type: "audio",
156
193
  create: ({ boxGraph }, hostField, index) => ReverbDeviceBox.create(boxGraph, UUID.generate(), (box) => {
157
194
  box.label.setValue("Reverb");
@@ -163,9 +200,11 @@ export var EffectFactories;
163
200
  EffectFactories.Crusher = {
164
201
  defaultName: "Crusher",
165
202
  defaultIcon: IconSymbol.Bug,
203
+ briefDescription: "Bit Crusher",
166
204
  description: "Degrates the audio signal",
167
205
  manualPage: DeviceManualUrls.Crusher,
168
206
  separatorBefore: false,
207
+ external: false,
169
208
  type: "audio",
170
209
  create: ({ boxGraph }, hostField, index) => CrusherDeviceBox.create(boxGraph, UUID.generate(), (box) => {
171
210
  box.label.setValue("Crusher");
@@ -176,9 +215,11 @@ export var EffectFactories;
176
215
  EffectFactories.Fold = {
177
216
  defaultName: "Fold",
178
217
  defaultIcon: IconSymbol.Fold,
218
+ briefDescription: "Wavefolder",
179
219
  description: "Folds the signal back into audio-range",
180
220
  manualPage: DeviceManualUrls.Fold,
181
221
  separatorBefore: false,
222
+ external: false,
182
223
  type: "audio",
183
224
  create: ({ boxGraph }, hostField, index) => FoldDeviceBox.create(boxGraph, UUID.generate(), (box) => {
184
225
  box.label.setValue("Fold");
@@ -189,9 +230,11 @@ export var EffectFactories;
189
230
  EffectFactories.Waveshaper = {
190
231
  defaultName: "Waveshaper",
191
232
  defaultIcon: IconSymbol.Curve,
233
+ briefDescription: "Waveshaper",
192
234
  description: "Applies nonlinear waveshaping distortion",
193
235
  manualPage: DeviceManualUrls.Waveshaper,
194
236
  separatorBefore: false,
237
+ external: false,
195
238
  type: "audio",
196
239
  create: ({ boxGraph }, hostField, index) => WaveshaperDeviceBox.create(boxGraph, UUID.generate(), (box) => {
197
240
  box.label.setValue("Waveshaper");
@@ -202,9 +245,11 @@ export var EffectFactories;
202
245
  EffectFactories.Tidal = {
203
246
  defaultName: "Tidal",
204
247
  defaultIcon: IconSymbol.Tidal,
248
+ briefDescription: "Tremolo & Autopan",
205
249
  description: "Shape rhythm and space through volume and pan.",
206
250
  manualPage: DeviceManualUrls.Tidal,
207
251
  separatorBefore: false,
252
+ external: false,
208
253
  type: "audio",
209
254
  create: ({ boxGraph }, hostField, index) => TidalDeviceBox.create(boxGraph, UUID.generate(), (box) => {
210
255
  box.label.setValue("Tidal");
@@ -216,9 +261,11 @@ export var EffectFactories;
216
261
  EffectFactories.Revamp = {
217
262
  defaultName: "Revamp",
218
263
  defaultIcon: IconSymbol.EQ,
264
+ briefDescription: "Graphical EQ",
219
265
  description: "Shapes the frequency balance of the sound",
220
266
  manualPage: DeviceManualUrls.Revamp,
221
267
  separatorBefore: false,
268
+ external: false,
222
269
  type: "audio",
223
270
  create: ({ boxGraph }, hostField, index) => RevampDeviceBox.create(boxGraph, UUID.generate(), (box) => {
224
271
  EffectParameterDefaults.defaultRevampDeviceBox(box);
@@ -227,14 +274,31 @@ export var EffectFactories;
227
274
  })
228
275
  };
229
276
  EffectFactories.NeuralAmp = {
230
- defaultName: "Neural Amp",
231
- defaultIcon: IconSymbol.NeuralAmp,
232
- description: "Neural network-based amp modeling using NAM models",
277
+ defaultName: "Tone3000",
278
+ defaultIcon: IconSymbol.Tone3000,
279
+ briefDescription: "Amp Modeler",
280
+ description: "Access thousands of amps, pedals, and cabs captured with Neural Amp Modeler.",
233
281
  manualPage: DeviceManualUrls.NeuralAmp,
234
282
  separatorBefore: false,
283
+ external: true,
235
284
  type: "audio",
236
285
  create: ({ boxGraph }, hostField, index) => NeuralAmpDeviceBox.create(boxGraph, UUID.generate(), (box) => {
237
- box.label.setValue("Neural Amp");
286
+ box.label.setValue("Tone3000");
287
+ box.index.setValue(index);
288
+ box.host.refer(hostField);
289
+ })
290
+ };
291
+ EffectFactories.Werkstatt = {
292
+ defaultName: "Werkstatt",
293
+ defaultIcon: IconSymbol.Code,
294
+ briefDescription: "Scriptable FX",
295
+ description: "User-scripted DSP processor",
296
+ manualPage: DeviceManualUrls.Werkstatt,
297
+ separatorBefore: false,
298
+ external: false,
299
+ type: "audio",
300
+ create: ({ boxGraph }, hostField, index) => WerkstattDeviceBox.create(boxGraph, UUID.generate(), (box) => {
301
+ box.label.setValue("Werkstatt");
238
302
  box.index.setValue(index);
239
303
  box.host.refer(hostField);
240
304
  })
@@ -242,9 +306,11 @@ export var EffectFactories;
242
306
  EffectFactories.Modular = {
243
307
  defaultName: "🔇 Create New Modular Audio Effect (inaudible yet)",
244
308
  defaultIcon: IconSymbol.Box,
309
+ briefDescription: "Modular System",
245
310
  description: "",
246
311
  manualPage: DeviceManualUrls.Modular,
247
312
  separatorBefore: true,
313
+ external: false,
248
314
  type: "audio",
249
315
  create: ({ boxGraph, rootBox, userEditingManager }, hostField, index) => {
250
316
  const moduleSetupBox = ModularBox.create(boxGraph, UUID.generate(), (box) => {
@@ -280,28 +346,30 @@ export var EffectFactories;
280
346
  EffectFactories.MidiNamed = {
281
347
  Arpeggio: EffectFactories.Arpeggio,
282
348
  Pitch: EffectFactories.Pitch,
349
+ Spielwerk: EffectFactories.Spielwerk,
283
350
  Velocity: EffectFactories.Velocity,
284
351
  Zeitgeist: EffectFactories.Zeitgeist
285
352
  };
286
- const includeNeuralAmp = false;
287
353
  EffectFactories.AudioNamed = {
288
- StereoTool: EffectFactories.StereoTool,
289
354
  Compressor: EffectFactories.Compressor,
290
- Gate: EffectFactories.Gate,
291
- Delay: EffectFactories.Delay,
292
- Reverb: EffectFactories.Reverb,
293
- DattorroReverb: EffectFactories.DattorroReverb,
294
- Revamp: EffectFactories.Revamp,
295
355
  Crusher: EffectFactories.Crusher,
356
+ DattorroReverb: EffectFactories.DattorroReverb, // Dattorro Reverb
357
+ Delay: // Dattorro Reverb
358
+ EffectFactories.Delay,
296
359
  Fold: EffectFactories.Fold,
297
- Waveshaper: EffectFactories.Waveshaper,
298
- Tidal: EffectFactories.Tidal,
299
- NeuralAmp: EffectFactories.NeuralAmp,
300
- Maximizer: EffectFactories.Maximizer
360
+ Reverb: EffectFactories.Reverb, // Free Reverb
361
+ Gate: // Free Reverb
362
+ EffectFactories.Gate,
363
+ Maximizer: EffectFactories.Maximizer,
364
+ Revamp: EffectFactories.Revamp,
365
+ StereoTool: EffectFactories.StereoTool, // Stereo Tool
366
+ Tidal: // Stereo Tool
367
+ EffectFactories.Tidal,
368
+ NeuralAmp: EffectFactories.NeuralAmp, // Tone3000
369
+ Waveshaper: // Tone3000
370
+ EffectFactories.Waveshaper,
371
+ Werkstatt: EffectFactories.Werkstatt
301
372
  };
302
- if (!includeNeuralAmp) {
303
- delete EffectFactories.AudioNamed.NeuralAmp;
304
- }
305
373
  EffectFactories.MidiList = Object.values(EffectFactories.MidiNamed);
306
374
  EffectFactories.AudioList = Object.values(EffectFactories.AudioNamed);
307
375
  EffectFactories.MergedNamed = { ...EffectFactories.MidiNamed, ...EffectFactories.AudioNamed };
@@ -5,6 +5,7 @@ import { Project } from "./project";
5
5
  import { EffectBox } from "./EffectBox";
6
6
  export interface EffectFactory extends DeviceFactory {
7
7
  readonly separatorBefore: boolean;
8
+ readonly external: boolean;
8
9
  readonly type: "audio" | "midi";
9
10
  create(project: Project, host: Field<EffectPointerType>, index: int): EffectBox;
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,iBAAiB,EAAC,MAAM,0BAA0B,CAAA;AACzE,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,aAAc,SAAQ,aAAa;IAChD,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"}
1
+ {"version":3,"file":"EffectFactory.d.ts","sourceRoot":"","sources":["../src/EffectFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,iBAAiB,EAAC,MAAM,0BAA0B,CAAA;AACzE,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,aAAc,SAAQ,aAAa;IAChD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,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"}
package/dist/Engine.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { int, Nullable, ObservableValue, Observer, Subscription, Terminable, UUID } from "@opendaw/lib-std";
1
+ import { int, Nullable, ObservableValue, Observer, Procedure, Subscription, Terminable, UUID } from "@opendaw/lib-std";
2
2
  import { AudioData, bpm, ppqn } from "@opendaw/lib-dsp";
3
3
  import { ClipNotification, EnginePreferences, NoteSignal } from "@opendaw/studio-adapters";
4
4
  import { Project } from "./project";
@@ -24,6 +24,7 @@ export interface Engine extends Terminable {
24
24
  scheduleClipPlay(clipIds: ReadonlyArray<UUID.Bytes>): void;
25
25
  scheduleClipStop(trackIds: ReadonlyArray<UUID.Bytes>): void;
26
26
  subscribeClipNotification(observer: Observer<ClipNotification>): Subscription;
27
+ subscribeDeviceMessage(uuid: string, listener: Procedure<string>): Subscription;
27
28
  registerMonitoringSource(uuid: UUID.Bytes, node: AudioNode, numChannels: 1 | 2): void;
28
29
  unregisterMonitoringSource(uuid: UUID.Bytes): void;
29
30
  get position(): ObservableValue<ppqn>;
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACzG,OAAO,EAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAC,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAA;AACxF,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,MAAM,WAAW,MAAO,SAAQ,UAAU;IACtC,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,IAAI,IAAI,CAAA;IACZ,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;IACjC,gBAAgB;IAChB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,gBAAgB;IAChB,aAAa,IAAI,IAAI,CAAA;IACrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,IAAI,IAAI,CAAA;IACZ,KAAK,IAAI,IAAI,CAAA;IACb,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACnD,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IACtE,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY,CAAA;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACxC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IAC1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IAC3D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAA;IAC7E,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;IACrF,0BAA0B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IAElD,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAC3C,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;IACpD,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IAC/D,IAAI,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;IACtC,IAAI,OAAO,IAAI,OAAO,CAAA;IACtB,IAAI,WAAW,IAAI,iBAAiB,CAAA;IACpC,IAAI,UAAU,IAAI,YAAY,CAAA;IAC9B,IAAI,SAAS,IAAI,MAAM,CAAA;CAC1B"}
1
+ {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { DefaultObservableValue, int, Nullable, ObservableValue, Observer, Subscription, UUID } from "@opendaw/lib-std";
1
+ import { DefaultObservableValue, int, Nullable, ObservableValue, Observer, Procedure, Subscription, UUID } from "@opendaw/lib-std";
2
2
  import { AudioData, bpm, ppqn } from "@opendaw/lib-dsp";
3
3
  import { ClipNotification, EnginePreferences, NoteSignal } from "@opendaw/studio-adapters";
4
4
  import { Engine } from "./Engine";
@@ -42,6 +42,7 @@ export declare class EngineFacade implements Engine {
42
42
  noteSignal(signal: NoteSignal): void;
43
43
  scheduleClipPlay(clipIds: ReadonlyArray<UUID.Bytes>): void;
44
44
  scheduleClipStop(trackIds: ReadonlyArray<UUID.Bytes>): void;
45
+ subscribeDeviceMessage(uuid: string, listener: Procedure<string>): Subscription;
45
46
  registerMonitoringSource(uuid: UUID.Bytes, node: AudioNode, numChannels: 1 | 2): void;
46
47
  unregisterMonitoringSource(uuid: UUID.Bytes): void;
47
48
  terminate(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"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"}
@@ -91,6 +91,9 @@ export class EngineFacade {
91
91
  scheduleClipStop(trackIds) {
92
92
  this.#worklet.unwrap("No worklet to scheduleClipStop").scheduleClipStop(trackIds);
93
93
  }
94
+ subscribeDeviceMessage(uuid, listener) {
95
+ return this.#worklet.unwrap("No worklet to subscribeDeviceMessage").subscribeDeviceMessage(uuid, listener);
96
+ }
94
97
  registerMonitoringSource(uuid, node, numChannels) {
95
98
  this.#worklet.ifSome(worklet => worklet.registerMonitoringSource(uuid, node, numChannels));
96
99
  }
@@ -1,4 +1,4 @@
1
- import { int, MutableObservableValue, Nullable, ObservableValue, Observer, Subscription, UUID } from "@opendaw/lib-std";
1
+ import { int, MutableObservableValue, Nullable, ObservableValue, Observer, Procedure, Subscription, UUID } from "@opendaw/lib-std";
2
2
  import { AudioData, bpm, ppqn } from "@opendaw/lib-dsp";
3
3
  import { ClipNotification, EngineSettings, ExportStemsConfiguration, NoteSignal, PreferencesHost, ProcessorOptions } from "@opendaw/studio-adapters";
4
4
  import { Engine } from "./Engine";
@@ -39,6 +39,7 @@ export declare class EngineWorklet extends AudioWorkletNode implements Engine {
39
39
  scheduleClipPlay(clipIds: ReadonlyArray<UUID.Bytes>): void;
40
40
  scheduleClipStop(trackIds: ReadonlyArray<UUID.Bytes>): void;
41
41
  subscribeClipNotification(observer: Observer<ClipNotification>): Subscription;
42
+ subscribeDeviceMessage(uuid: string, listener: Procedure<string>): Subscription;
42
43
  registerMonitoringSource(uuid: UUID.Bytes, node: AudioNode, numChannels: 1 | 2): void;
43
44
  unregisterMonitoringSource(uuid: UUID.Bytes): void;
44
45
  terminate(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"EngineWorklet.d.ts","sourceRoot":"","sources":["../src/EngineWorklet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EngineWorklet.d.ts","sourceRoot":"","sources":["../src/EngineWorklet.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Arrays, DefaultObservableValue, isDefined, Notifier, Option, SyncStream, Terminator, UUID } from "@opendaw/lib-std";
1
+ import { Arrays, DefaultObservableValue, isDefined, Notifier, Option, SetMultimap, SyncStream, Terminator, UUID } from "@opendaw/lib-std";
2
2
  import { RenderQuantum } from "@opendaw/lib-dsp";
3
3
  import { Communicator, Messenger } from "@opendaw/lib-runtime";
4
4
  import { EngineSettingsSchema, EngineStateSchema, ExportStemsConfiguration, PERF_BUFFER_SIZE, PreferencesHost } from "@opendaw/studio-adapters";
@@ -25,6 +25,7 @@ export class EngineWorklet extends AudioWorkletNode {
25
25
  #notifyClipNotification;
26
26
  #notifyNoteSignals;
27
27
  #playingClips;
28
+ #deviceMessageListeners = new SetMultimap();
28
29
  #commands;
29
30
  #isReady;
30
31
  #perfBuffer = new Float32Array(0);
@@ -115,6 +116,11 @@ export class EngineWorklet extends AudioWorkletNode {
115
116
  Communicator.executor(messenger.channel("engine-to-client"), {
116
117
  log: (message) => console.log("WORKLET", message),
117
118
  error: (reason) => this.dispatchEvent(new ErrorEvent("error", { error: reason })),
119
+ deviceMessage: (uuid, message) => {
120
+ for (const listener of this.#deviceMessageListeners.get(uuid)) {
121
+ listener(message);
122
+ }
123
+ },
118
124
  ready: () => resolve(),
119
125
  fetchAudio: (uuid) => {
120
126
  return new Promise((resolve, reject) => {
@@ -220,6 +226,10 @@ export class EngineWorklet extends AudioWorkletNode {
220
226
  });
221
227
  return this.#notifyClipNotification.subscribe(observer);
222
228
  }
229
+ subscribeDeviceMessage(uuid, listener) {
230
+ this.#deviceMessageListeners.add(uuid, listener);
231
+ return { terminate: () => this.#deviceMessageListeners.remove(uuid, listener) };
232
+ }
223
233
  registerMonitoringSource(uuid, node, numChannels) {
224
234
  this.#monitoringSources.set(UUID.toString(uuid), { node, numChannels });
225
235
  this.#rebuildMonitoringMerger();
@@ -1 +1 @@
1
- {"version":3,"file":"Mixer.d.ts","sourceRoot":"","sources":["../src/Mixer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwD,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AACpH,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAC,mBAAmB,EAAE,2BAA2B,EAAC,MAAM,0BAA0B,CAAA;AAIzF,MAAM,WAAW,gBAAgB;IAC7B,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;CAC/B;AAQD,qBAAa,KAAM,YAAW,UAAU;;gBAOxB,UAAU,EAAE,2BAA2B,CAAC,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC;IAuC7F,oBAAoB,CAAC,EAAC,IAAI,EAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,gBAAgB,GAAG,UAAU;IASrF,SAAS,IAAI,IAAI;CAqDpB"}
1
+ {"version":3,"file":"Mixer.d.ts","sourceRoot":"","sources":["../src/Mixer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwD,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AACpH,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAC,mBAAmB,EAAE,2BAA2B,EAAC,MAAM,0BAA0B,CAAA;AAIzF,MAAM,WAAW,gBAAgB;IAC7B,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;CAC/B;AAQD,qBAAa,KAAM,YAAW,UAAU;;gBAOxB,UAAU,EAAE,2BAA2B,CAAC,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC;IAuC7F,oBAAoB,CAAC,EAAC,IAAI,EAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,gBAAgB,GAAG,UAAU;IAUrF,SAAS,IAAI,IAAI;CAqDpB"}
package/dist/Mixer.js CHANGED
@@ -46,10 +46,11 @@ export class Mixer {
46
46
  }));
47
47
  }
48
48
  registerChannelStrip({ uuid }, view) {
49
- this.#states.get(uuid).views.push(view);
49
+ const { views } = this.#states.get(uuid);
50
+ views.push(view);
50
51
  this.#deferUpdate.request();
51
52
  return Terminable.create(() => {
52
- this.#states.opt(uuid).ifSome(({ views }) => Arrays.remove(views, view));
53
+ Arrays.remove(views, view);
53
54
  this.#deferUpdate.request();
54
55
  });
55
56
  }