@opendaw/studio-core 0.0.99 → 0.0.101

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 (91) hide show
  1. package/dist/EffectFactories.d.ts.map +1 -1
  2. package/dist/EffectFactories.js +39 -24
  3. package/dist/Engine.d.ts +2 -0
  4. package/dist/Engine.d.ts.map +1 -1
  5. package/dist/EngineFacade.d.ts +2 -0
  6. package/dist/EngineFacade.d.ts.map +1 -1
  7. package/dist/EngineFacade.js +3 -0
  8. package/dist/EngineWorklet.d.ts +2 -0
  9. package/dist/EngineWorklet.d.ts.map +1 -1
  10. package/dist/EngineWorklet.js +10 -2
  11. package/dist/HRClockWorker.d.ts +7 -0
  12. package/dist/HRClockWorker.d.ts.map +1 -0
  13. package/dist/HRClockWorker.js +54 -0
  14. package/dist/OfflineEngineRenderer.d.ts.map +1 -1
  15. package/dist/OfflineEngineRenderer.js +5 -2
  16. package/dist/RecordingWorklet.d.ts +2 -1
  17. package/dist/RecordingWorklet.d.ts.map +1 -1
  18. package/dist/RecordingWorklet.js +9 -1
  19. package/dist/Storage.d.ts.map +1 -1
  20. package/dist/Storage.js +1 -0
  21. package/dist/StudioPreferences.d.ts +8 -0
  22. package/dist/StudioPreferences.d.ts.map +1 -1
  23. package/dist/StudioSettings.d.ts +13 -0
  24. package/dist/StudioSettings.d.ts.map +1 -1
  25. package/dist/StudioSettings.js +15 -0
  26. package/dist/capture/CaptureAudio.d.ts.map +1 -1
  27. package/dist/capture/CaptureAudio.js +8 -11
  28. package/dist/capture/RecordAudio.d.ts.map +1 -1
  29. package/dist/capture/RecordAudio.js +1 -0
  30. package/dist/processors.js +24 -24
  31. package/dist/processors.js.map +4 -4
  32. package/dist/project/Project.d.ts +6 -1
  33. package/dist/project/Project.d.ts.map +1 -1
  34. package/dist/project/Project.js +34 -2
  35. package/dist/project/ProjectApi.d.ts.map +1 -1
  36. package/dist/project/ProjectApi.js +14 -3
  37. package/dist/project/audio/AudioContentFactory.d.ts +5 -0
  38. package/dist/project/audio/AudioContentFactory.d.ts.map +1 -1
  39. package/dist/project/audio/AudioContentFactory.js +13 -0
  40. package/dist/ui/{generic → clipboard}/ClipboardManager.d.ts +3 -3
  41. package/dist/ui/clipboard/ClipboardManager.d.ts.map +1 -0
  42. package/dist/ui/{generic → clipboard}/ClipboardManager.js +70 -14
  43. package/dist/ui/clipboard/ClipboardUtils.d.ts +12 -0
  44. package/dist/ui/clipboard/ClipboardUtils.d.ts.map +1 -0
  45. package/dist/ui/clipboard/ClipboardUtils.js +94 -0
  46. package/dist/ui/{generic → clipboard}/ContextMenu.d.ts +1 -1
  47. package/dist/ui/clipboard/ContextMenu.d.ts.map +1 -0
  48. package/dist/ui/{generic → clipboard}/ContextMenu.js +1 -1
  49. package/dist/ui/clipboard/types/AudioUnitsClipboardHandler.d.ts +18 -0
  50. package/dist/ui/clipboard/types/AudioUnitsClipboardHandler.d.ts.map +1 -0
  51. package/dist/ui/clipboard/types/AudioUnitsClipboardHandler.js +215 -0
  52. package/dist/ui/clipboard/types/DevicesClipboardHandler.d.ts +18 -0
  53. package/dist/ui/clipboard/types/DevicesClipboardHandler.d.ts.map +1 -0
  54. package/dist/ui/clipboard/types/DevicesClipboardHandler.js +188 -0
  55. package/dist/ui/clipboard/types/NotesClipboardHandler.d.ts +21 -0
  56. package/dist/ui/clipboard/types/NotesClipboardHandler.d.ts.map +1 -0
  57. package/dist/ui/clipboard/types/NotesClipboardHandler.js +72 -0
  58. package/dist/ui/clipboard/types/RegionsClipboardHandler.d.ts +24 -0
  59. package/dist/ui/clipboard/types/RegionsClipboardHandler.d.ts.map +1 -0
  60. package/dist/ui/clipboard/types/RegionsClipboardHandler.js +137 -0
  61. package/dist/ui/clipboard/types/ValuesClipboardHandler.d.ts +22 -0
  62. package/dist/ui/clipboard/types/ValuesClipboardHandler.d.ts.map +1 -0
  63. package/dist/ui/clipboard/types/ValuesClipboardHandler.js +135 -0
  64. package/dist/ui/index.d.ts +14 -3
  65. package/dist/ui/index.d.ts.map +1 -1
  66. package/dist/ui/index.js +14 -3
  67. package/dist/ui/menu/MenuItems.d.ts.map +1 -0
  68. package/dist/ui/timeline/RegionClipResolver.d.ts +5 -1
  69. package/dist/ui/timeline/RegionClipResolver.d.ts.map +1 -1
  70. package/dist/ui/timeline/RegionClipResolver.js +5 -1
  71. package/dist/ui/timeline/RegionKeepExistingResolver.d.ts +34 -0
  72. package/dist/ui/timeline/RegionKeepExistingResolver.d.ts.map +1 -0
  73. package/dist/ui/timeline/RegionKeepExistingResolver.js +171 -0
  74. package/dist/ui/timeline/RegionOverlapResolver.d.ts +33 -0
  75. package/dist/ui/timeline/RegionOverlapResolver.d.ts.map +1 -0
  76. package/dist/ui/timeline/RegionOverlapResolver.js +79 -0
  77. package/dist/ui/timeline/RegionPushExistingResolver.d.ts +31 -0
  78. package/dist/ui/timeline/RegionPushExistingResolver.d.ts.map +1 -0
  79. package/dist/ui/timeline/RegionPushExistingResolver.js +159 -0
  80. package/dist/ui/timeline/TimelineFocus.d.ts +14 -0
  81. package/dist/ui/timeline/TimelineFocus.d.ts.map +1 -0
  82. package/dist/ui/timeline/TimelineFocus.js +45 -0
  83. package/dist/ui/timeline/TrackResolver.d.ts +11 -0
  84. package/dist/ui/timeline/TrackResolver.d.ts.map +1 -0
  85. package/dist/ui/timeline/TrackResolver.js +5 -0
  86. package/package.json +62 -61
  87. package/dist/ui/generic/ClipboardManager.d.ts.map +0 -1
  88. package/dist/ui/generic/ContextMenu.d.ts.map +0 -1
  89. package/dist/ui/generic/MenuItems.d.ts.map +0 -1
  90. /package/dist/ui/{generic → menu}/MenuItems.d.ts +0 -0
  91. /package/dist/ui/{generic → menu}/MenuItems.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"EffectFactories.d.ts","sourceRoot":"","sources":["../src/EffectFactories.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAG7C,yBAAiB,eAAe,CAAC;IACtB,MAAM,QAAQ,EAAE,aAYtB,CAAA;IAEM,MAAM,KAAK,EAAE,aAYnB,CAAA;IAEM,MAAM,QAAQ,EAAE,aAYtB,CAAA;IAEM,MAAM,SAAS,EAAE,aAsBvB,CAAA;IAEM,MAAM,UAAU,EAAE,aAaxB,CAAA;IAEM,MAAM,KAAK,EAAE,aAcnB,CAAA;IAEM,MAAM,cAAc,EAAE,aAa5B,CAAA;IAEM,MAAM,SAAS,EAAE,aAavB,CAAA;IAEM,MAAM,UAAU,EAAE,aAaxB,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,KAAK,EAAE,aAcnB,CAAA;IAEM,MAAM,MAAM,EAAE,aAapB,CAAA;IAEM,MAAM,SAAS,EAAE,aAavB,CAAA;IAEM,MAAM,OAAO,EAAE,aAqCrB,CAAA;IAEM,MAAM,SAAS;;;;;KAAyC,CAAA;IACxD,MAAM,UAAU;;;;;;;;;;;;KAEtB,CAAA;IACM,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":"AA2BA,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,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;IAEM,MAAM,UAAU;;;;;;;;;;;;KAYtB,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"}
@@ -12,7 +12,7 @@ export var EffectFactories;
12
12
  manualPage: DeviceManualUrls.Arpeggio,
13
13
  separatorBefore: false,
14
14
  type: "midi",
15
- create: ({ boxGraph }, hostField, index) => ArpeggioDeviceBox.create(boxGraph, UUID.generate(), box => {
15
+ create: ({ boxGraph }, hostField, index) => ArpeggioDeviceBox.create(boxGraph, UUID.generate(), (box) => {
16
16
  box.label.setValue("Arpeggio");
17
17
  box.index.setValue(index);
18
18
  box.host.refer(hostField);
@@ -25,7 +25,7 @@ export var EffectFactories;
25
25
  manualPage: DeviceManualUrls.Pitch,
26
26
  separatorBefore: false,
27
27
  type: "midi",
28
- create: ({ boxGraph }, hostField, index) => PitchDeviceBox.create(boxGraph, UUID.generate(), box => {
28
+ create: ({ boxGraph }, hostField, index) => PitchDeviceBox.create(boxGraph, UUID.generate(), (box) => {
29
29
  box.label.setValue("Pitch");
30
30
  box.index.setValue(index);
31
31
  box.host.refer(hostField);
@@ -38,7 +38,7 @@ export var EffectFactories;
38
38
  manualPage: DeviceManualUrls.Velocity,
39
39
  separatorBefore: false,
40
40
  type: "midi",
41
- create: ({ boxGraph }, hostField, index) => VelocityDeviceBox.create(boxGraph, UUID.generate(), box => {
41
+ create: ({ boxGraph }, hostField, index) => VelocityDeviceBox.create(boxGraph, UUID.generate(), (box) => {
42
42
  box.label.setValue("Velocity");
43
43
  box.index.setValue(index);
44
44
  box.host.refer(hostField);
@@ -55,11 +55,11 @@ export var EffectFactories;
55
55
  const useGlobal = false; // TODO First Zeitgeist should be true
56
56
  const shuffleBox = useGlobal
57
57
  ? rootBoxAdapter.groove.box
58
- : GrooveShuffleBox.create(boxGraph, UUID.generate(), box => {
58
+ : GrooveShuffleBox.create(boxGraph, UUID.generate(), (box) => {
59
59
  box.label.setValue("Shuffle");
60
60
  box.duration.setValue(480);
61
61
  });
62
- return ZeitgeistDeviceBox.create(boxGraph, UUID.generate(), box => {
62
+ return ZeitgeistDeviceBox.create(boxGraph, UUID.generate(), (box) => {
63
63
  box.label.setValue("Zeitgeist");
64
64
  box.groove.refer(shuffleBox);
65
65
  box.index.setValue(index);
@@ -74,7 +74,7 @@ export var EffectFactories;
74
74
  manualPage: DeviceManualUrls.StereoTool,
75
75
  separatorBefore: false,
76
76
  type: "audio",
77
- create: ({ boxGraph }, hostField, index) => StereoToolDeviceBox.create(boxGraph, UUID.generate(), box => {
77
+ create: ({ boxGraph }, hostField, index) => StereoToolDeviceBox.create(boxGraph, UUID.generate(), (box) => {
78
78
  box.label.setValue("Stereo Tool");
79
79
  box.index.setValue(index);
80
80
  box.host.refer(hostField);
@@ -87,7 +87,7 @@ export var EffectFactories;
87
87
  manualPage: DeviceManualUrls.Delay,
88
88
  separatorBefore: false,
89
89
  type: "audio",
90
- create: ({ boxGraph }, hostField, index) => DelayDeviceBox.create(boxGraph, UUID.generate(), box => {
90
+ create: ({ boxGraph }, hostField, index) => DelayDeviceBox.create(boxGraph, UUID.generate(), (box) => {
91
91
  box.label.setValue("Delay");
92
92
  box.index.setValue(index);
93
93
  box.host.refer(hostField);
@@ -101,7 +101,7 @@ export var EffectFactories;
101
101
  manualPage: DeviceManualUrls.DattorroReverb,
102
102
  separatorBefore: false,
103
103
  type: "audio",
104
- create: ({ boxGraph }, hostField, index) => DattorroReverbDeviceBox.create(boxGraph, UUID.generate(), box => {
104
+ create: ({ boxGraph }, hostField, index) => DattorroReverbDeviceBox.create(boxGraph, UUID.generate(), (box) => {
105
105
  box.label.setValue("Dattorro Reverb");
106
106
  box.index.setValue(index);
107
107
  box.host.refer(hostField);
@@ -114,7 +114,7 @@ export var EffectFactories;
114
114
  manualPage: DeviceManualUrls.Maximizer,
115
115
  separatorBefore: false,
116
116
  type: "audio",
117
- create: ({ boxGraph }, hostField, index) => MaximizerDeviceBox.create(boxGraph, UUID.generate(), box => {
117
+ create: ({ boxGraph }, hostField, index) => MaximizerDeviceBox.create(boxGraph, UUID.generate(), (box) => {
118
118
  box.label.setValue("Maximizer");
119
119
  box.index.setValue(index);
120
120
  box.host.refer(hostField);
@@ -127,7 +127,7 @@ export var EffectFactories;
127
127
  manualPage: DeviceManualUrls.Compressor,
128
128
  separatorBefore: false,
129
129
  type: "audio",
130
- create: ({ boxGraph }, hostField, index) => CompressorDeviceBox.create(boxGraph, UUID.generate(), box => {
130
+ create: ({ boxGraph }, hostField, index) => CompressorDeviceBox.create(boxGraph, UUID.generate(), (box) => {
131
131
  box.label.setValue("Compressor");
132
132
  box.index.setValue(index);
133
133
  box.host.refer(hostField);
@@ -140,7 +140,7 @@ export var EffectFactories;
140
140
  manualPage: DeviceManualUrls.Gate,
141
141
  separatorBefore: false,
142
142
  type: "audio",
143
- create: ({ boxGraph }, hostField, index) => GateDeviceBox.create(boxGraph, UUID.generate(), box => {
143
+ create: ({ boxGraph }, hostField, index) => GateDeviceBox.create(boxGraph, UUID.generate(), (box) => {
144
144
  box.label.setValue("Gate");
145
145
  box.index.setValue(index);
146
146
  box.host.refer(hostField);
@@ -153,7 +153,7 @@ export var EffectFactories;
153
153
  manualPage: DeviceManualUrls.Reverb,
154
154
  separatorBefore: false,
155
155
  type: "audio",
156
- create: ({ boxGraph }, hostField, index) => ReverbDeviceBox.create(boxGraph, UUID.generate(), box => {
156
+ create: ({ boxGraph }, hostField, index) => ReverbDeviceBox.create(boxGraph, UUID.generate(), (box) => {
157
157
  box.label.setValue("Reverb");
158
158
  box.preDelay.setInitValue(0.001);
159
159
  box.index.setValue(index);
@@ -167,7 +167,7 @@ export var EffectFactories;
167
167
  manualPage: DeviceManualUrls.Crusher,
168
168
  separatorBefore: false,
169
169
  type: "audio",
170
- create: ({ boxGraph }, hostField, index) => CrusherDeviceBox.create(boxGraph, UUID.generate(), box => {
170
+ create: ({ boxGraph }, hostField, index) => CrusherDeviceBox.create(boxGraph, UUID.generate(), (box) => {
171
171
  box.label.setValue("Crusher");
172
172
  box.index.setValue(index);
173
173
  box.host.refer(hostField);
@@ -180,7 +180,7 @@ export var EffectFactories;
180
180
  manualPage: DeviceManualUrls.Fold,
181
181
  separatorBefore: false,
182
182
  type: "audio",
183
- create: ({ boxGraph }, hostField, index) => FoldDeviceBox.create(boxGraph, UUID.generate(), box => {
183
+ create: ({ boxGraph }, hostField, index) => FoldDeviceBox.create(boxGraph, UUID.generate(), (box) => {
184
184
  box.label.setValue("Fold");
185
185
  box.index.setValue(index);
186
186
  box.host.refer(hostField);
@@ -193,7 +193,7 @@ export var EffectFactories;
193
193
  manualPage: DeviceManualUrls.Tidal,
194
194
  separatorBefore: false,
195
195
  type: "audio",
196
- create: ({ boxGraph }, hostField, index) => TidalDeviceBox.create(boxGraph, UUID.generate(), box => {
196
+ create: ({ boxGraph }, hostField, index) => TidalDeviceBox.create(boxGraph, UUID.generate(), (box) => {
197
197
  box.label.setValue("Tidal");
198
198
  box.index.setValue(index);
199
199
  box.depth.setValue(0.75);
@@ -207,7 +207,7 @@ export var EffectFactories;
207
207
  manualPage: DeviceManualUrls.Revamp,
208
208
  separatorBefore: false,
209
209
  type: "audio",
210
- create: ({ boxGraph }, hostField, index) => RevampDeviceBox.create(boxGraph, UUID.generate(), box => {
210
+ create: ({ boxGraph }, hostField, index) => RevampDeviceBox.create(boxGraph, UUID.generate(), (box) => {
211
211
  EffectParameterDefaults.defaultRevampDeviceBox(box);
212
212
  box.index.setValue(index);
213
213
  box.host.refer(hostField);
@@ -220,7 +220,7 @@ export var EffectFactories;
220
220
  manualPage: DeviceManualUrls.NeuralAmp,
221
221
  separatorBefore: false,
222
222
  type: "audio",
223
- create: ({ boxGraph }, hostField, index) => NeuralAmpDeviceBox.create(boxGraph, UUID.generate(), box => {
223
+ create: ({ boxGraph }, hostField, index) => NeuralAmpDeviceBox.create(boxGraph, UUID.generate(), (box) => {
224
224
  box.label.setValue("Neural Amp");
225
225
  box.index.setValue(index);
226
226
  box.host.refer(hostField);
@@ -234,29 +234,29 @@ export var EffectFactories;
234
234
  separatorBefore: true,
235
235
  type: "audio",
236
236
  create: ({ boxGraph, rootBox, userEditingManager }, hostField, index) => {
237
- const moduleSetupBox = ModularBox.create(boxGraph, UUID.generate(), box => {
237
+ const moduleSetupBox = ModularBox.create(boxGraph, UUID.generate(), (box) => {
238
238
  box.collection.refer(rootBox.modularSetups);
239
239
  box.label.setValue("Modular");
240
240
  });
241
- const modularInput = ModularAudioInputBox.create(boxGraph, UUID.generate(), box => {
241
+ const modularInput = ModularAudioInputBox.create(boxGraph, UUID.generate(), (box) => {
242
242
  box.attributes.collection.refer(moduleSetupBox.modules);
243
243
  box.attributes.label.setValue("Modular Input");
244
244
  box.attributes.x.setValue(-256);
245
245
  box.attributes.y.setValue(32);
246
246
  });
247
- const modularOutput = ModularAudioOutputBox.create(boxGraph, UUID.generate(), box => {
247
+ const modularOutput = ModularAudioOutputBox.create(boxGraph, UUID.generate(), (box) => {
248
248
  box.attributes.collection.refer(moduleSetupBox.modules);
249
249
  box.attributes.label.setValue("Modular Output");
250
250
  box.attributes.x.setValue(256);
251
251
  box.attributes.y.setValue(32);
252
252
  });
253
- ModuleConnectionBox.create(boxGraph, UUID.generate(), box => {
253
+ ModuleConnectionBox.create(boxGraph, UUID.generate(), (box) => {
254
254
  box.collection.refer(moduleSetupBox.connections);
255
255
  box.source.refer(modularInput.output);
256
256
  box.target.refer(modularOutput.input);
257
257
  });
258
258
  userEditingManager.modularSystem.edit(moduleSetupBox.editing);
259
- return ModularDeviceBox.create(boxGraph, UUID.generate(), box => {
259
+ return ModularDeviceBox.create(boxGraph, UUID.generate(), (box) => {
260
260
  box.label.setValue("Modular");
261
261
  box.modularSetup.refer(moduleSetupBox.device);
262
262
  box.index.setValue(index);
@@ -264,9 +264,24 @@ export var EffectFactories;
264
264
  });
265
265
  }
266
266
  };
267
- EffectFactories.MidiNamed = { Arpeggio: EffectFactories.Arpeggio, Pitch: EffectFactories.Pitch, Velocity: EffectFactories.Velocity, Zeitgeist: EffectFactories.Zeitgeist };
267
+ EffectFactories.MidiNamed = {
268
+ Arpeggio: EffectFactories.Arpeggio,
269
+ Pitch: EffectFactories.Pitch,
270
+ Velocity: EffectFactories.Velocity,
271
+ Zeitgeist: EffectFactories.Zeitgeist
272
+ };
268
273
  EffectFactories.AudioNamed = {
269
- StereoTool: EffectFactories.StereoTool, Compressor: EffectFactories.Compressor, Gate: EffectFactories.Gate, Delay: EffectFactories.Delay, Reverb: EffectFactories.Reverb, DattorroReverb: EffectFactories.DattorroReverb, Revamp: EffectFactories.Revamp, Crusher: EffectFactories.Crusher, Fold: EffectFactories.Fold, Tidal: EffectFactories.Tidal, Maximizer: EffectFactories.Maximizer /*NeuralAmp*/
274
+ StereoTool: EffectFactories.StereoTool,
275
+ Compressor: EffectFactories.Compressor,
276
+ Gate: EffectFactories.Gate,
277
+ Delay: EffectFactories.Delay,
278
+ Reverb: EffectFactories.Reverb,
279
+ DattorroReverb: EffectFactories.DattorroReverb,
280
+ Revamp: EffectFactories.Revamp,
281
+ Crusher: EffectFactories.Crusher,
282
+ Fold: EffectFactories.Fold,
283
+ Tidal: EffectFactories.Tidal,
284
+ Maximizer: EffectFactories.Maximizer
270
285
  };
271
286
  EffectFactories.MidiList = Object.values(EffectFactories.MidiNamed);
272
287
  EffectFactories.AudioList = Object.values(EffectFactories.AudioNamed);
package/dist/Engine.d.ts CHANGED
@@ -31,5 +31,7 @@ export interface Engine extends Terminable {
31
31
  get markerState(): ObservableValue<Nullable<[UUID.Bytes, int]>>;
32
32
  get project(): Project;
33
33
  get preferences(): EnginePreferences;
34
+ get perfBuffer(): Float32Array;
35
+ get perfIndex(): number;
34
36
  }
35
37
  //# sourceMappingURL=Engine.d.ts.map
@@ -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,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,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,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;IAE7E,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,OAAO,CAAA;IACtB,IAAI,WAAW,IAAI,iBAAiB,CAAA;CACvC"}
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,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,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,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;IAE7E,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,OAAO,CAAA;IACtB,IAAI,WAAW,IAAI,iBAAiB,CAAA;IACpC,IAAI,UAAU,IAAI,YAAY,CAAA;IAC9B,IAAI,SAAS,IAAI,MAAM,CAAA;CAC1B"}
@@ -26,6 +26,8 @@ export declare class EngineFacade implements Engine {
26
26
  get project(): Project;
27
27
  get sampleRate(): number;
28
28
  get preferences(): EnginePreferences;
29
+ get perfBuffer(): Float32Array;
30
+ get perfIndex(): number;
29
31
  isReady(): Promise<void>;
30
32
  queryLoadingComplete(): Promise<boolean>;
31
33
  panic(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,GAAG,EACH,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrD,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EAGjB,UAAU,EAEb,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,qBAAa,YAAa,YAAW,MAAM;;;IAoBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAgBjC,aAAa,IAAI,IAAI;IAErB,cAAc,IAAI,IAAI;IAMtB,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,aAAa,IAAI,IAAI;IAErB,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAmB;IAClD,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAiC;IAC/E,IAAI,qBAAqB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAqC;IACtF,IAAI,WAAW,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IACjG,IAAI,OAAO,IAAI,OAAO,CAAmE;IACzF,IAAI,UAAU,IAAI,MAAM,CAAsF;IAC9G,IAAI,WAAW,IAAI,iBAAiB,CAAiC;IAErE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAGxC,KAAK,IAAI,IAAI;IACb,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,IAAI;IACZ,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAGnD,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAG7E,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAG5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IAGxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAGpC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI3D,SAAS,IAAI,IAAI;CAIpB"}
1
+ {"version":3,"file":"EngineFacade.d.ts","sourceRoot":"","sources":["../src/EngineFacade.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,GAAG,EACH,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAEZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrD,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EAGjB,UAAU,EAEb,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,qBAAa,YAAa,YAAW,MAAM;;;IAoBvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAgBjC,aAAa,IAAI,IAAI;IAErB,cAAc,IAAI,IAAI;IAOtB,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,aAAa,IAAI,IAAI;IAErB,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAmB;IAClD,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,iBAAiB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAiC;IAC/E,IAAI,qBAAqB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAqC;IACtF,IAAI,WAAW,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IACjG,IAAI,OAAO,IAAI,OAAO,CAAmE;IACzF,IAAI,UAAU,IAAI,MAAM,CAAsF;IAC9G,IAAI,WAAW,IAAI,iBAAiB,CAAiC;IACrE,IAAI,UAAU,IAAI,YAAY,CAAiF;IAC/G,IAAI,SAAS,IAAI,MAAM,CAA8D;IAErF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAGxC,KAAK,IAAI,IAAI;IACb,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,IAAI;IACZ,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAGnD,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAG7E,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAG5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IAGxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAGpC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI3D,SAAS,IAAI,IAAI;CAIpB"}
@@ -25,6 +25,7 @@ export class EngineFacade {
25
25
  }
26
26
  assertWorklet() { this.#worklet.unwrap("No worklet available"); }
27
27
  releaseWorklet() {
28
+ this.#worklet.ifSome(worklet => worklet.terminate());
28
29
  this.#preferencesFacade.releaseHost();
29
30
  this.#lifecycle.terminate();
30
31
  this.#worklet = Option.None;
@@ -45,6 +46,8 @@ export class EngineFacade {
45
46
  get project() { return this.#worklet.unwrap("No worklet to get project").project; }
46
47
  get sampleRate() { return this.#worklet.isEmpty() ? 44_100 : this.#worklet.unwrap().context.sampleRate; }
47
48
  get preferences() { return this.#preferencesFacade; }
49
+ get perfBuffer() { return this.#worklet.mapOr(worklet => worklet.perfBuffer, new Float32Array(0)); }
50
+ get perfIndex() { return this.#worklet.mapOr(worklet => worklet.perfIndex, 0); }
48
51
  isReady() { return this.#worklet.mapOr(worklet => worklet.isReady(), Promise.resolve()); }
49
52
  queryLoadingComplete() {
50
53
  return this.#worklet.mapOr(worklet => worklet.queryLoadingComplete(), Promise.resolve(false));
@@ -27,6 +27,8 @@ export declare class EngineWorklet extends AudioWorkletNode implements Engine {
27
27
  get markerState(): ObservableValue<Nullable<[UUID.Bytes, int]>>;
28
28
  get project(): Project;
29
29
  get preferences(): PreferencesHost<EngineSettings>;
30
+ get perfBuffer(): Float32Array;
31
+ get perfIndex(): number;
30
32
  isReady(): Promise<void>;
31
33
  queryLoadingComplete(): Promise<boolean>;
32
34
  noteSignal(signal: NoteSignal): void;
@@ -1 +1 @@
1
- {"version":3,"file":"EngineWorklet.d.ts","sourceRoot":"","sources":["../src/EngineWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EACH,sBAAsB,EAEtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAGZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrD,OAAO,EACH,gBAAgB,EAIhB,cAAc,EAKd,wBAAwB,EACxB,UAAU,EACV,eAAe,EACf,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,qBAAa,aAAc,SAAQ,gBAAiB,YAAW,MAAM;;IACjE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEtB,QAAQ,CAAC,EAAE,SAAqB;gBAsBpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,wBAAwB,EAC9C,OAAO,CAAC,EAAE,gBAAgB;IA0ItC,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,aAAa,IAAI,IAAI;IACrB,KAAK,IAAI,IAAI;IACb,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IACZ,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAInD,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAqC;IACzF,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAmB;IAClD,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAiC;IACxF,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IAC1F,IAAI,OAAO,IAAI,OAAO,CAAuB;IAC7C,IAAI,WAAW,IAAI,eAAe,CAAC,cAAc,CAAC,CAA2B;IAE7E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IACxC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG3D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAQ7E,SAAS,IAAI,IAAI;CAKpB"}
1
+ {"version":3,"file":"EngineWorklet.d.ts","sourceRoot":"","sources":["../src/EngineWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EACH,sBAAsB,EAEtB,QAAQ,EACR,eAAe,EACf,QAAQ,EAER,YAAY,EAGZ,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrD,OAAO,EACH,gBAAgB,EAIhB,cAAc,EAKd,wBAAwB,EACxB,UAAU,EACV,eAAe,EACf,gBAAgB,EACnB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAKjC,qBAAa,aAAc,SAAQ,gBAAiB,YAAW,MAAM;;IACjE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEtB,QAAQ,CAAC,EAAE,SAAqB;gBAyBpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,OAAO,EAChB,mBAAmB,CAAC,EAAE,wBAAwB,EAC9C,OAAO,CAAC,EAAE,gBAAgB;IA6ItC,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI;IAClC,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IACjC,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAC7C,aAAa,IAAI,IAAI;IACrB,KAAK,IAAI,IAAI;IACb,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;IACZ,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAInD,IAAI,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,CAAyB;IAClE,IAAI,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,CAA2B;IACtE,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,CAA4B;IACxE,IAAI,qBAAqB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAqC;IACzF,IAAI,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAwB;IAC7D,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAmB;IAClD,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAiC;IACxF,IAAI,WAAW,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAA2B;IAC1F,IAAI,OAAO,IAAI,OAAO,CAAuB;IAC7C,IAAI,WAAW,IAAI,eAAe,CAAC,cAAc,CAAC,CAA2B;IAC7E,IAAI,UAAU,IAAI,YAAY,CAA0B;IACxD,IAAI,SAAS,IAAI,MAAM,CAAyB;IAEhD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACxB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IACpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,YAAY;IAC5D,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI;IACxC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAI1D,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;IAG3D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY;IAQ7E,SAAS,IAAI,IAAI;CAKpB"}
@@ -4,6 +4,7 @@ import { AnimationFrame } from "@opendaw/lib-dom";
4
4
  import { Communicator, Messenger } from "@opendaw/lib-runtime";
5
5
  import { EngineSettingsSchema, EngineStateSchema, ExportStemsConfiguration, PreferencesHost } from "@opendaw/studio-adapters";
6
6
  import { MIDIReceiver } from "./midi";
7
+ import { HRClockWorker } from "./HRClockWorker";
7
8
  export class EngineWorklet extends AudioWorkletNode {
8
9
  static ID = 0 | 0;
9
10
  id = EngineWorklet.ID++;
@@ -24,6 +25,8 @@ export class EngineWorklet extends AudioWorkletNode {
24
25
  #playingClips;
25
26
  #commands;
26
27
  #isReady;
28
+ #perfBuffer = new Float32Array(0);
29
+ #perfIndex = 0;
27
30
  constructor(context, project, exportConfiguration, options) {
28
31
  const numberOfChannels = ExportStemsConfiguration.countStems(Option.wrap(exportConfiguration)) * 2;
29
32
  const reader = SyncStream.reader(EngineStateSchema(), state => {
@@ -33,6 +36,8 @@ export class EngineWorklet extends AudioWorkletNode {
33
36
  this.#countInBeatsRemaining.setValue(state.countInBeatsRemaining);
34
37
  this.#playbackTimestamp.setValue(state.playbackTimestamp);
35
38
  this.#bpm.setValue(state.bpm);
39
+ this.#perfBuffer = state.perfBuffer;
40
+ this.#perfIndex = state.perfIndex;
36
41
  this.#position.setValue(state.position); // This must be the last to handle the state values before
37
42
  });
38
43
  const controlFlagsSAB = new SharedArrayBuffer(4); // 4 bytes minimum
@@ -43,15 +48,16 @@ export class EngineWorklet extends AudioWorkletNode {
43
48
  processorOptions: {
44
49
  syncStreamBuffer: reader.buffer,
45
50
  controlFlagsBuffer: controlFlagsSAB,
51
+ hrClockBuffer: HRClockWorker.get().sab,
46
52
  project: project.toArrayBuffer(),
47
53
  exportConfiguration,
48
54
  options
49
55
  }
50
56
  });
51
- const { resolve, promise } = Promise.withResolvers();
57
+ const { resolve, promise: isReady } = Promise.withResolvers();
52
58
  const messenger = Messenger.for(this.port);
53
59
  this.#project = project;
54
- this.#isReady = promise;
60
+ this.#isReady = isReady;
55
61
  this.#notifyClipNotification = this.#terminator.own(new Notifier());
56
62
  this.#notifyNoteSignals = this.#terminator.own(new Notifier());
57
63
  this.#playingClips = [];
@@ -170,6 +176,8 @@ export class EngineWorklet extends AudioWorkletNode {
170
176
  get markerState() { return this.#markerState; }
171
177
  get project() { return this.#project; }
172
178
  get preferences() { return this.#preferences; }
179
+ get perfBuffer() { return this.#perfBuffer; }
180
+ get perfIndex() { return this.#perfIndex; }
173
181
  isReady() { return this.#isReady; }
174
182
  queryLoadingComplete() { return this.#commands.queryLoadingComplete(); }
175
183
  noteSignal(signal) { this.#commands.noteSignal(signal); }
@@ -0,0 +1,7 @@
1
+ export declare class HRClockWorker {
2
+ #private;
3
+ static get(): HRClockWorker;
4
+ readonly sab: SharedArrayBuffer;
5
+ private constructor();
6
+ }
7
+ //# sourceMappingURL=HRClockWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HRClockWorker.d.ts","sourceRoot":"","sources":["../src/HRClockWorker.ts"],"names":[],"mappings":"AAKA,qBAAa,aAAa;;IAEtB,MAAM,CAAC,GAAG,IAAI,aAAa;IAE3B,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAA;IAG/B,OAAO;CA+BV"}
@@ -0,0 +1,54 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ // Singleton - one clock worker shared across engine instances
11
+ import { Lazy } from "@opendaw/lib-std";
12
+ let instance;
13
+ export class HRClockWorker {
14
+ static get() { return new HRClockWorker(); }
15
+ sab;
16
+ #worker;
17
+ constructor() {
18
+ // Layout (32 bytes):
19
+ // int32[0]: request counter
20
+ // int32[1]: start response counter (which request this start timestamp is for)
21
+ // int32[2]: end response counter (which request this end timestamp is for)
22
+ // float64[2]: start timestamp (bytes 16-23)
23
+ // float64[3]: end timestamp (bytes 24-31)
24
+ this.sab = new SharedArrayBuffer(32);
25
+ const code = `
26
+ onmessage = (e) => {
27
+ const int32 = new Int32Array(e.data)
28
+ const float64 = new Float64Array(e.data)
29
+ let lastCounter = 0
30
+ while (true) {
31
+ Atomics.wait(int32, 0, lastCounter)
32
+ lastCounter = Atomics.load(int32, 0)
33
+ const isStart = (lastCounter & 1) === 1
34
+ if (isStart) {
35
+ float64[2] = performance.now()
36
+ Atomics.store(int32, 1, lastCounter)
37
+ } else {
38
+ float64[3] = performance.now()
39
+ Atomics.store(int32, 2, lastCounter)
40
+ }
41
+ }
42
+ }
43
+ `;
44
+ const blob = new Blob([code], { type: "application/javascript" });
45
+ this.#worker = new Worker(URL.createObjectURL(blob));
46
+ this.#worker.postMessage(this.sab);
47
+ }
48
+ }
49
+ __decorate([
50
+ Lazy,
51
+ __metadata("design:type", Function),
52
+ __metadata("design:paramtypes", []),
53
+ __metadata("design:returntype", HRClockWorker)
54
+ ], HRClockWorker, "get", null);
@@ -1 +1 @@
1
- {"version":3,"file":"OfflineEngineRenderer.d.ts","sourceRoot":"","sources":["../src/OfflineEngineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAa,MAAM,EAAS,QAAQ,EAAmB,MAAM,kBAAkB,CAAA;AAClG,OAAO,EAAC,SAAS,EAAO,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAGH,wBAAwB,EAIxB,yBAAyB,EAC5B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAOjC,qBAAa,qBAAqB;;IAC9B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKjC,MAAM,CAAC,YAAY,IAAI,MAAM;WAIhB,MAAM,CAAC,MAAM,EAAE,OAAO,EACf,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,CAAC,EACxD,UAAU,GAAE,GAAY,GACzC,OAAO,CAAC,qBAAqB,CAAC;WAmHpB,KAAK,CAAC,MAAM,EAAE,OAAO,EACf,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,CAAC,EACxD,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAC1B,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,GAAE,GAAY,GACxC,OAAO,CAAC,SAAS,CAAC;IAwBrB,OAAO;IAkBP,IAAI,UAAU,IAAI,GAAG,CAA0B;IAC/C,IAAI,gBAAgB,IAAI,GAAG,CAAgC;IAC3D,IAAI,WAAW,IAAI,GAAG,CAA2B;IAEjD,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAKZ,SAAS,IAAI,IAAI;IAKX,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAM3C,MAAM,CACR,MAAM,EAAE,yBAAyB,EACjC,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAC1B,WAAW,CAAC,EAAE,WAAW,GAC1B,OAAO,CAAC,SAAS,CAAC;CAkCxB"}
1
+ {"version":3,"file":"OfflineEngineRenderer.d.ts","sourceRoot":"","sources":["../src/OfflineEngineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAa,MAAM,EAAS,QAAQ,EAA6B,MAAM,kBAAkB,CAAA;AAC5G,OAAO,EAAC,SAAS,EAAO,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAGH,wBAAwB,EAIxB,yBAAyB,EAC5B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAOjC,qBAAa,qBAAqB;;IAC9B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKjC,MAAM,CAAC,YAAY,IAAI,MAAM;WAIhB,MAAM,CAAC,MAAM,EAAE,OAAO,EACf,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,CAAC,EACxD,UAAU,GAAE,GAAY,GACzC,OAAO,CAAC,qBAAqB,CAAC;WAmHpB,KAAK,CAAC,MAAM,EAAE,OAAO,EACf,sBAAsB,EAAE,MAAM,CAAC,wBAAwB,CAAC,EACxD,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAC1B,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,GAAE,GAAY,GACxC,OAAO,CAAC,SAAS,CAAC;IAwBrB,OAAO;IAkBP,IAAI,UAAU,IAAI,GAAG,CAA0B;IAC/C,IAAI,gBAAgB,IAAI,GAAG,CAAgC;IAC3D,IAAI,WAAW,IAAI,GAAG,CAA2B;IAEjD,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAKZ,SAAS,IAAI,IAAI;IAKX,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAM3C,MAAM,CACR,MAAM,EAAE,yBAAyB,EACjC,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAC1B,WAAW,CAAC,EAAE,WAAW,GAC1B,OAAO,CAAC,SAAS,CAAC;CAqCxB"}
@@ -1,6 +1,6 @@
1
- import { Errors, isDefined, Option, panic, Terminator } from "@opendaw/lib-std";
1
+ import { Errors, isDefined, Option, panic, Terminator, TimeSpan } from "@opendaw/lib-std";
2
2
  import { AudioData } from "@opendaw/lib-dsp";
3
- import { Communicator, Messenger } from "@opendaw/lib-runtime";
3
+ import { Communicator, Messenger, Wait } from "@opendaw/lib-runtime";
4
4
  import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
5
5
  import { AudioWorklets } from "./AudioWorklets";
6
6
  import { MIDIReceiver } from "./midi";
@@ -170,6 +170,9 @@ export class OfflineEngineRenderer {
170
170
  };
171
171
  }
172
172
  this.#progressPort.onmessage = (event) => progress(event.data.frames / this.#sampleRate);
173
+ while (!await this.#engineCommands.queryLoadingComplete()) {
174
+ await Wait.timeSpan(TimeSpan.millis(100));
175
+ }
173
176
  this.play();
174
177
  this.#protocol.render(config).then(channels => {
175
178
  if (cancelled) {
@@ -1,4 +1,4 @@
1
- import { int, Observer, Option, Subscription, Terminable, UUID } from "@opendaw/lib-std";
1
+ import { int, Observer, Option, Procedure, Subscription, Terminable, UUID } from "@opendaw/lib-std";
2
2
  import { AudioData } from "@opendaw/lib-dsp";
3
3
  import { Peaks } from "@opendaw/lib-fusion";
4
4
  import { RingBuffer, SampleLoader, SampleLoaderState } from "@opendaw/studio-adapters";
@@ -8,6 +8,7 @@ export declare class RecordingWorklet extends AudioWorkletNode implements Termin
8
8
  constructor(context: BaseAudioContext, config: RingBuffer.Config);
9
9
  own<T extends Terminable>(terminable: T): T;
10
10
  limit(count: int): void;
11
+ set onSaved(callback: Procedure<UUID.Bytes>);
11
12
  setFillLength(value: int): void;
12
13
  get numberOfFrames(): int;
13
14
  get data(): Option<AudioData>;
@@ -1 +1 @@
1
- {"version":3,"file":"RecordingWorklet.d.ts","sourceRoot":"","sources":["../src/RecordingWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,GAAG,EAEH,QAAQ,EACR,MAAM,EAGN,YAAY,EACZ,UAAU,EAEV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,SAAS,EAAW,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAEH,UAAU,EACV,YAAY,EACZ,iBAAiB,EAEpB,MAAM,0BAA0B,CAAA;AAMjC,qBAAa,gBAAiB,SAAQ,gBAAiB,YAAW,UAAU,EAAE,YAAY;;IAGtF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAkB;gBAa/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM;IAuBhE,GAAG,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC;IAE3C,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAEvB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAE/B,IAAI,cAAc,IAAI,GAAG,CAA6C;IACtE,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,CAAoB;IACjD,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAA6E;IACvG,IAAI,KAAK,IAAI,iBAAiB,CAAqB;IAEnD,UAAU,IAAI,IAAI;IAElB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,YAAY;IAQ9D,SAAS,IAAI,IAAI;IAMjB,QAAQ,IAAI,MAAM;CAqCrB"}
1
+ {"version":3,"file":"RecordingWorklet.d.ts","sourceRoot":"","sources":["../src/RecordingWorklet.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,GAAG,EAEH,QAAQ,EACR,MAAM,EAEN,SAAS,EAET,YAAY,EACZ,UAAU,EAEV,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,SAAS,EAAW,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAC,KAAK,EAAc,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAEH,UAAU,EACV,YAAY,EACZ,iBAAiB,EAEpB,MAAM,0BAA0B,CAAA;AAMjC,qBAAa,gBAAiB,SAAQ,gBAAiB,YAAW,UAAU,EAAE,YAAY;;IAGtF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAkB;gBAc/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM;IAuBhE,GAAG,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC;IAE3C,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAOvB,IAAI,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAyC;IAEpF,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAE/B,IAAI,cAAc,IAAI,GAAG,CAA6C;IACtE,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,CAAoB;IACjD,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAA6E;IACvG,IAAI,KAAK,IAAI,iBAAiB,CAAqB;IAEnD,UAAU,IAAI,IAAI;IAElB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,YAAY;IAQ9D,SAAS,IAAI,IAAI;IAMjB,QAAQ,IAAI,MAAM;CAsCrB"}
@@ -18,6 +18,7 @@ export class RecordingWorklet extends AudioWorkletNode {
18
18
  #isRecording = true;
19
19
  #limitSamples = Number.POSITIVE_INFINITY;
20
20
  #state = { type: "record" };
21
+ #onSaved = Option.None;
21
22
  constructor(context, config) {
22
23
  super(context, "recording-processor", {
23
24
  numberOfInputs: 1,
@@ -40,7 +41,13 @@ export class RecordingWorklet extends AudioWorkletNode {
40
41
  });
41
42
  }
42
43
  own(terminable) { return this.#terminator.own(terminable); }
43
- limit(count) { this.#limitSamples = count; }
44
+ limit(count) {
45
+ this.#limitSamples = count;
46
+ if (this.numberOfFrames >= this.#limitSamples) {
47
+ this.#finalize().catch(error => console.warn(error));
48
+ }
49
+ }
50
+ set onSaved(callback) { this.#onSaved = Option.wrap(callback); }
44
51
  setFillLength(value) { this.#peakWriter.numFrames = value; }
45
52
  get numberOfFrames() { return this.#output.length * RenderQuantum; }
46
53
  get data() { return this.#data; }
@@ -88,6 +95,7 @@ export class RecordingWorklet extends AudioWorkletNode {
88
95
  meta
89
96
  };
90
97
  await SampleStorage.get().save(sample);
98
+ this.#onSaved.ifSome(callback => callback(this.uuid));
91
99
  this.#setState({ type: "loaded" });
92
100
  this.terminate();
93
101
  return sample;
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../src/Storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrC,8BAAsB,OAAO,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM;IAA7C,SAAS,aAAsB,MAAM,EAAE,MAAM;IAE7C,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAEzC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAK7C,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;CAgB7C"}
1
+ {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../src/Storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAIrC,8BAAsB,OAAO,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM;IAA7C,SAAS,aAAsB,MAAM,EAAE,MAAM;IAE7C,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAEzC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3C,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAK7C,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;CAgB7C"}
package/dist/Storage.js CHANGED
@@ -8,6 +8,7 @@ export class Storage {
8
8
  }
9
9
  async deleteItem(uuid) {
10
10
  const path = `${this.folder}/${UUID.toString(uuid)}`;
11
+ console.debug(`deleteItem '${path}'`);
11
12
  const uuids = await this.loadTrashedIds();
12
13
  uuids.push(UUID.toString(uuid));
13
14
  await this.saveTrashedIds(uuids);
@@ -20,12 +20,20 @@ export declare const StudioPreferences: import("@opendaw/lib-fusion").Preference
20
20
  "modifying-controls-wheel": boolean;
21
21
  "normalize-mouse-wheel": boolean;
22
22
  };
23
+ editing: {
24
+ "overlapping-regions-behaviour": "clip" | "push-existing" | "keep-existing";
25
+ "show-clipboard-menu": boolean;
26
+ };
23
27
  debug: {
24
28
  "footer-show-fps-meter": boolean;
25
29
  "footer-show-samples-memory": boolean;
26
30
  "footer-show-build-infos": boolean;
31
+ "show-cpu-stats": boolean;
27
32
  "enable-beta-features": boolean;
28
33
  "enable-debug-menu": boolean;
29
34
  };
35
+ storage: {
36
+ "auto-delete-orphaned-samples": boolean;
37
+ };
30
38
  }>;
31
39
  //# sourceMappingURL=StudioPreferences.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StudioPreferences.d.ts","sourceRoot":"","sources":["../src/StudioPreferences.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAwD,CAAA"}
1
+ {"version":3,"file":"StudioPreferences.d.ts","sourceRoot":"","sources":["../src/StudioPreferences.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAwD,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  export declare const FpsOptions: readonly [24, 25, 29.97, 30];
3
+ export declare const OverlappingRegionsBehaviourOptions: readonly ["clip", "push-existing", "keep-existing"];
3
4
  export declare const StudioSettingsSchema: z.ZodObject<{
4
5
  visibility: z.ZodDefault<z.ZodObject<{
5
6
  "visible-help-hints": z.ZodBoolean;
@@ -22,13 +23,25 @@ export declare const StudioSettingsSchema: z.ZodObject<{
22
23
  "modifying-controls-wheel": z.ZodBoolean;
23
24
  "normalize-mouse-wheel": z.ZodBoolean;
24
25
  }, z.core.$strip>>;
26
+ editing: z.ZodDefault<z.ZodObject<{
27
+ "overlapping-regions-behaviour": z.ZodEnum<{
28
+ clip: "clip";
29
+ "push-existing": "push-existing";
30
+ "keep-existing": "keep-existing";
31
+ }>;
32
+ "show-clipboard-menu": z.ZodBoolean;
33
+ }, z.core.$strip>>;
25
34
  debug: z.ZodDefault<z.ZodObject<{
26
35
  "footer-show-fps-meter": z.ZodBoolean;
27
36
  "footer-show-samples-memory": z.ZodBoolean;
28
37
  "footer-show-build-infos": z.ZodBoolean;
38
+ "show-cpu-stats": z.ZodBoolean;
29
39
  "enable-beta-features": z.ZodBoolean;
30
40
  "enable-debug-menu": z.ZodBoolean;
31
41
  }, z.core.$strip>>;
42
+ storage: z.ZodDefault<z.ZodObject<{
43
+ "auto-delete-orphaned-samples": z.ZodBoolean;
44
+ }, z.core.$strip>>;
32
45
  }, z.core.$strip>;
33
46
  export type StudioSettings = z.infer<typeof StudioSettingsSchema>;
34
47
  //# sourceMappingURL=StudioSettings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StudioSettings.d.ts","sourceRoot":"","sources":["../src/StudioSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AAGrB,eAAO,MAAM,UAAU,8BAA+B,CAAA;AAEtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+C/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
1
+ {"version":3,"file":"StudioSettings.d.ts","sourceRoot":"","sources":["../src/StudioSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AAGrB,eAAO,MAAM,UAAU,8BAA+B,CAAA;AACtD,eAAO,MAAM,kCAAkC,qDAAsD,CAAA;AAErG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6D/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { Browser } from "@opendaw/lib-dom";
3
3
  export const FpsOptions = [24, 25, 29.97, 30];
4
+ export const OverlappingRegionsBehaviourOptions = ["clip", "push-existing", "keep-existing"];
4
5
  export const StudioSettingsSchema = z.object({
5
6
  "visibility": z.object({
6
7
  "visible-help-hints": z.boolean(),
@@ -35,17 +36,31 @@ export const StudioSettingsSchema = z.object({
35
36
  "modifying-controls-wheel": false,
36
37
  "normalize-mouse-wheel": true
37
38
  }),
39
+ "editing": z.object({
40
+ "overlapping-regions-behaviour": z.enum(OverlappingRegionsBehaviourOptions),
41
+ "show-clipboard-menu": z.boolean()
42
+ }).default({
43
+ "overlapping-regions-behaviour": "clip",
44
+ "show-clipboard-menu": false
45
+ }),
38
46
  "debug": z.object({
39
47
  "footer-show-fps-meter": z.boolean(),
40
48
  "footer-show-samples-memory": z.boolean(),
41
49
  "footer-show-build-infos": z.boolean(),
50
+ "show-cpu-stats": z.boolean(),
42
51
  "enable-beta-features": z.boolean(),
43
52
  "enable-debug-menu": z.boolean()
44
53
  }).default({
45
54
  "footer-show-fps-meter": false,
46
55
  "footer-show-samples-memory": false,
47
56
  "footer-show-build-infos": false,
57
+ "show-cpu-stats": false,
48
58
  "enable-beta-features": false,
49
59
  "enable-debug-menu": false
60
+ }),
61
+ "storage": z.object({
62
+ "auto-delete-orphaned-samples": z.boolean()
63
+ }).default({
64
+ "auto-delete-orphaned-samples": false
50
65
  })
51
66
  });
@@ -1 +1 @@
1
- {"version":3,"file":"CaptureAudio.d.ts","sourceRoot":"","sources":["../../src/capture/CaptureAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,uBAAuB,EAEvB,MAAM,EAEN,UAAU,EACb,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAM/C,qBAAa,YAAa,SAAQ,OAAO,CAAC,eAAe,CAAC;;gBAc1C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe;IAkCjG,IAAI,YAAY,IAAI,OAAO,CAA4B;IACvD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAS9B;IACD,IAAI,MAAM,IAAI,MAAM,CAAsB;IAC1C,IAAI,eAAe,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAA+B;IACnE,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAmD;IACnF,IAAI,MAAM,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAsB;IACxE,IAAI,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,CAEnC;IACD,IAAI,KAAK,IAAI,MAAM,CAAsE;IACzF,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAA+D;IAChG,IAAI,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAE/C;IACD,IAAI,UAAU,IAAI,MAAM,CAAC,SAAS,CAAC,CAAiD;IACpF,IAAI,qBAAqB,IAAI,MAAM,CAAsD;IAEnF,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BvC,cAAc,IAAI,UAAU;CAwG/B"}
1
+ {"version":3,"file":"CaptureAudio.d.ts","sourceRoot":"","sources":["../../src/capture/CaptureAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,uBAAuB,EAEvB,MAAM,EAEN,UAAU,EACb,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAC,YAAY,EAAE,eAAe,EAAC,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAM/C,qBAAa,YAAa,SAAQ,OAAO,CAAC,eAAe,CAAC;;gBAe1C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe;IAkCjG,IAAI,YAAY,IAAI,OAAO,CAA4B;IACvD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAS9B;IACD,IAAI,MAAM,IAAI,MAAM,CAAsB;IAC1C,IAAI,eAAe,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAA+B;IACnE,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAmD;IACnF,IAAI,MAAM,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAsB;IACxE,IAAI,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,CAEnC;IACD,IAAI,KAAK,IAAI,MAAM,CAAsE;IACzF,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAA+D;IAChG,IAAI,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAE/C;IACD,IAAI,UAAU,IAAI,MAAM,CAAC,SAAS,CAAC,CAAiD;IACpF,IAAI,qBAAqB,IAAI,MAAM,CAA6C;IAE1E,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BvC,cAAc,IAAI,UAAU;CAsG/B"}