@opendaw/studio-core 0.0.92 → 0.0.93

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 (117) hide show
  1. package/dist/AudioOfflineRenderer.d.ts +2 -0
  2. package/dist/AudioOfflineRenderer.d.ts.map +1 -1
  3. package/dist/AudioOfflineRenderer.js +2 -1
  4. package/dist/Engine.d.ts +2 -1
  5. package/dist/Engine.d.ts.map +1 -1
  6. package/dist/EngineFacade.d.ts +2 -1
  7. package/dist/EngineFacade.d.ts.map +1 -1
  8. package/dist/EngineFacade.js +3 -0
  9. package/dist/EngineWorklet.d.ts +2 -1
  10. package/dist/EngineWorklet.d.ts.map +1 -1
  11. package/dist/EngineWorklet.js +8 -2
  12. package/dist/OfflineEngineRenderer.d.ts +16 -5
  13. package/dist/OfflineEngineRenderer.d.ts.map +1 -1
  14. package/dist/OfflineEngineRenderer.js +85 -38
  15. package/dist/OpenDAWHeaders.d.ts.map +1 -1
  16. package/dist/OpenDAWHeaders.js +1 -2
  17. package/dist/RecordingWorklet.d.ts.map +1 -1
  18. package/dist/RecordingWorklet.js +0 -1
  19. package/dist/StudioPreferences.d.ts +22 -12
  20. package/dist/StudioPreferences.d.ts.map +1 -1
  21. package/dist/StudioSettings.d.ts +22 -12
  22. package/dist/StudioSettings.d.ts.map +1 -1
  23. package/dist/StudioSettings.js +41 -12
  24. package/dist/WavFile.d.ts.map +1 -1
  25. package/dist/WavFile.js +33 -9
  26. package/dist/capture/RecordAudio.d.ts.map +1 -1
  27. package/dist/capture/RecordAudio.js +41 -6
  28. package/dist/capture/RecordMidi.d.ts.map +1 -1
  29. package/dist/capture/RecordMidi.js +41 -6
  30. package/dist/capture/Recording.d.ts +2 -0
  31. package/dist/capture/Recording.d.ts.map +1 -1
  32. package/dist/capture/Recording.js +6 -2
  33. package/dist/midi/MIDIReceiver.d.ts +2 -2
  34. package/dist/midi/MIDIReceiver.d.ts.map +1 -1
  35. package/dist/midi/MIDIReceiver.js +2 -7
  36. package/dist/midi/index.d.ts +1 -0
  37. package/dist/midi/index.d.ts.map +1 -1
  38. package/dist/midi/index.js +1 -0
  39. package/dist/offline-engine.js +1 -1
  40. package/dist/offline-engine.js.map +3 -3
  41. package/dist/processors.js +15 -15
  42. package/dist/processors.js.map +4 -4
  43. package/dist/project/Project.d.ts +2 -1
  44. package/dist/project/Project.d.ts.map +1 -1
  45. package/dist/project/Project.js +18 -3
  46. package/dist/project/ProjectMigration.d.ts.map +1 -1
  47. package/dist/project/ProjectMigration.js +18 -251
  48. package/dist/project/migration/MigrateAudioClipBox.d.ts +4 -0
  49. package/dist/project/migration/MigrateAudioClipBox.d.ts.map +1 -0
  50. package/dist/project/migration/MigrateAudioClipBox.js +32 -0
  51. package/dist/project/migration/MigrateAudioFileBox.d.ts +5 -0
  52. package/dist/project/migration/MigrateAudioFileBox.d.ts.map +1 -0
  53. package/dist/project/migration/MigrateAudioFileBox.js +13 -0
  54. package/dist/project/migration/MigrateAudioRegionBox.d.ts +4 -0
  55. package/dist/project/migration/MigrateAudioRegionBox.d.ts.map +1 -0
  56. package/dist/project/migration/MigrateAudioRegionBox.js +54 -0
  57. package/dist/project/migration/MigrateAudioUnitBox.d.ts +4 -0
  58. package/dist/project/migration/MigrateAudioUnitBox.d.ts.map +1 -0
  59. package/dist/project/migration/MigrateAudioUnitBox.js +19 -0
  60. package/dist/project/migration/MigrateDelayDeviceBox.d.ts +4 -0
  61. package/dist/project/migration/MigrateDelayDeviceBox.d.ts.map +1 -0
  62. package/dist/project/migration/MigrateDelayDeviceBox.js +36 -0
  63. package/dist/project/migration/MigrateMIDIOutputDeviceBox.d.ts +4 -0
  64. package/dist/project/migration/MigrateMIDIOutputDeviceBox.d.ts.map +1 -0
  65. package/dist/project/migration/MigrateMIDIOutputDeviceBox.js +20 -0
  66. package/dist/project/migration/MigrateRevampDeviceBox.d.ts +4 -0
  67. package/dist/project/migration/MigrateRevampDeviceBox.d.ts.map +1 -0
  68. package/dist/project/migration/MigrateRevampDeviceBox.js +7 -0
  69. package/dist/project/migration/MigrateTimelineBox.d.ts +4 -0
  70. package/dist/project/migration/MigrateTimelineBox.d.ts.map +1 -0
  71. package/dist/project/migration/MigrateTimelineBox.js +10 -0
  72. package/dist/project/migration/MigrateValueEventBox.d.ts +4 -0
  73. package/dist/project/migration/MigrateValueEventBox.d.ts.map +1 -0
  74. package/dist/project/migration/MigrateValueEventBox.js +32 -0
  75. package/dist/project/migration/MigrateValueEventCollection.d.ts +4 -0
  76. package/dist/project/migration/MigrateValueEventCollection.d.ts.map +1 -0
  77. package/dist/project/migration/MigrateValueEventCollection.js +59 -0
  78. package/dist/project/migration/MigrateValueEventCollection.test.d.ts +2 -0
  79. package/dist/project/migration/MigrateValueEventCollection.test.d.ts.map +1 -0
  80. package/dist/project/migration/MigrateValueEventCollection.test.js +199 -0
  81. package/dist/project/migration/MigrateVaporisateurDeviceBox.d.ts +4 -0
  82. package/dist/project/migration/MigrateVaporisateurDeviceBox.d.ts.map +1 -0
  83. package/dist/project/migration/MigrateVaporisateurDeviceBox.js +28 -0
  84. package/dist/project/migration/MigrateZeitgeistDeviceBox.d.ts +4 -0
  85. package/dist/project/migration/MigrateZeitgeistDeviceBox.d.ts.map +1 -0
  86. package/dist/project/migration/MigrateZeitgeistDeviceBox.js +8 -0
  87. package/dist/project/migration/index.d.ts +13 -0
  88. package/dist/project/migration/index.d.ts.map +1 -0
  89. package/dist/project/migration/index.js +12 -0
  90. package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
  91. package/dist/samples/OpenSampleAPI.js +3 -0
  92. package/dist/ui/generic/ClipboardManager.js +1 -1
  93. package/dist/ui/generic/ContextMenu.d.ts +1 -1
  94. package/dist/ui/generic/ContextMenu.js +1 -1
  95. package/dist/ui/generic/{menu-item.d.ts → MenuItems.d.ts} +1 -1
  96. package/dist/ui/generic/{menu-item.d.ts.map → MenuItems.d.ts.map} +1 -1
  97. package/dist/ui/index.d.ts +1 -1
  98. package/dist/ui/index.js +1 -1
  99. package/dist/workers-main.js +1 -1
  100. package/dist/workers-main.js.map +3 -3
  101. package/package.json +15 -15
  102. package/dist/ui/RegionClipResolver.d.ts +0 -37
  103. package/dist/ui/RegionClipResolver.d.ts.map +0 -1
  104. package/dist/ui/RegionClipResolver.js +0 -188
  105. package/dist/ui/RegionClipResolver.test.d.ts +0 -2
  106. package/dist/ui/RegionClipResolver.test.d.ts.map +0 -1
  107. package/dist/ui/RegionClipResolver.test.js +0 -166
  108. package/dist/ui/RegionModifyStrategies.d.ts +0 -25
  109. package/dist/ui/RegionModifyStrategies.d.ts.map +0 -1
  110. package/dist/ui/RegionModifyStrategies.js +0 -25
  111. package/dist/ui/TimeGrid.d.ts +0 -20
  112. package/dist/ui/TimeGrid.d.ts.map +0 -1
  113. package/dist/ui/TimeGrid.js +0 -88
  114. package/dist/ui/TimelineRange.d.ts +0 -51
  115. package/dist/ui/TimelineRange.d.ts.map +0 -1
  116. package/dist/ui/TimelineRange.js +0 -85
  117. /package/dist/ui/generic/{menu-item.js → MenuItems.js} +0 -0
@@ -1,7 +1,9 @@
1
1
  import { int, Option, Progress } from "@opendaw/lib-std";
2
2
  import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
3
3
  import { Project } from "./project";
4
+ /** @deprecated */
4
5
  export declare namespace AudioOfflineRenderer {
6
+ /** @deprecated */
5
7
  const start: (source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, progress: Progress.Handler, abortSignal?: AbortSignal, sampleRate?: int) => Promise<AudioBuffer>;
6
8
  }
7
9
  //# sourceMappingURL=AudioOfflineRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioOfflineRenderer.d.ts","sourceRoot":"","sources":["../src/AudioOfflineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAa,MAAM,EAAS,QAAQ,EAAuB,MAAM,kBAAkB,CAAA;AAGtG,OAAO,EAAC,wBAAwB,EAAC,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,yBAAiB,oBAAoB,CAAC;IAE3B,MAAM,KAAK,GAAU,QAAQ,OAAO,EACf,wBAAwB,MAAM,CAAC,wBAAwB,CAAC,EACxD,UAAU,QAAQ,CAAC,OAAO,EAC1B,cAAc,WAAW,EACzB,aAAY,GAAY,KAAG,OAAO,CAAC,WAAW,CA+CzE,CAAA;CACJ"}
1
+ {"version":3,"file":"AudioOfflineRenderer.d.ts","sourceRoot":"","sources":["../src/AudioOfflineRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAa,MAAM,EAAS,QAAQ,EAAuB,MAAM,kBAAkB,CAAA;AAGtG,OAAO,EAAC,wBAAwB,EAAC,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAGjC,kBAAkB;AAClB,yBAAiB,oBAAoB,CAAC;IAClC,kBAAkB;IACX,MAAM,KAAK,GAAU,QAAQ,OAAO,EACf,wBAAwB,MAAM,CAAC,wBAAwB,CAAC,EACxD,UAAU,QAAQ,CAAC,OAAO,EAC1B,cAAc,WAAW,EACzB,aAAY,GAAY,KAAG,OAAO,CAAC,WAAW,CA+CzE,CAAA;CACJ"}
@@ -3,9 +3,10 @@ import { AnimationFrame } from "@opendaw/lib-dom";
3
3
  import { Wait } from "@opendaw/lib-runtime";
4
4
  import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
5
5
  import { AudioWorklets } from "./AudioWorklets";
6
+ /** @deprecated */
6
7
  export var AudioOfflineRenderer;
7
8
  (function (AudioOfflineRenderer) {
8
- /* Deprecated */
9
+ /** @deprecated */
9
10
  AudioOfflineRenderer.start = async (source, optExportConfiguration, progress, abortSignal, sampleRate = 48_000) => {
10
11
  const numStems = ExportStemsConfiguration.countStems(optExportConfiguration);
11
12
  if (numStems === 0) {
package/dist/Engine.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { int, Nullable, ObservableValue, Observer, Subscription, Terminable, UUID } from "@opendaw/lib-std";
2
- import { bpm, ppqn } from "@opendaw/lib-dsp";
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";
5
5
  export interface Engine extends Terminable {
@@ -14,6 +14,7 @@ export interface Engine extends Terminable {
14
14
  panic(): void;
15
15
  sleep(): void;
16
16
  wake(): void;
17
+ loadClickSound(index: 0 | 1, data: AudioData): void;
17
18
  noteSignal(signal: NoteSignal): void;
18
19
  subscribeNotes(observer: Observer<NoteSignal>): Subscription;
19
20
  ignoreNoteRegion(uuid: UUID.Bytes): void;
@@ -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,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1C,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,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;CACvC"}
@@ -1,5 +1,5 @@
1
1
  import { DefaultObservableValue, int, Nullable, ObservableValue, Observer, Subscription, UUID } from "@opendaw/lib-std";
2
- import { bpm, ppqn } from "@opendaw/lib-dsp";
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";
5
5
  import { EngineWorklet } from "./EngineWorklet";
@@ -31,6 +31,7 @@ export declare class EngineFacade implements Engine {
31
31
  panic(): void;
32
32
  sleep(): void;
33
33
  wake(): void;
34
+ loadClickSound(index: 0 | 1, data: AudioData): void;
34
35
  subscribeClipNotification(observer: Observer<ClipNotification>): Subscription;
35
36
  subscribeNotes(observer: Observer<NoteSignal>): Subscription;
36
37
  ignoreNoteRegion(uuid: UUID.Bytes): 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,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1C,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,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;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"}
@@ -52,6 +52,9 @@ export class EngineFacade {
52
52
  panic() { this.#worklet.ifSome(worklet => worklet.panic()); }
53
53
  sleep() { this.#worklet.ifSome(worklet => worklet.sleep()); }
54
54
  wake() { this.#worklet.ifSome(worklet => worklet.wake()); }
55
+ loadClickSound(index, data) {
56
+ this.#worklet.ifSome(worklet => worklet.loadClickSound(index, data));
57
+ }
55
58
  subscribeClipNotification(observer) {
56
59
  return this.#worklet.unwrap("No worklet to subscribeClipNotification").subscribeClipNotification(observer);
57
60
  }
@@ -1,5 +1,5 @@
1
1
  import { int, MutableObservableValue, Nullable, ObservableValue, Observer, Subscription, UUID } from "@opendaw/lib-std";
2
- import { bpm, ppqn } from "@opendaw/lib-dsp";
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";
5
5
  import { Project } from "./project";
@@ -16,6 +16,7 @@ export declare class EngineWorklet extends AudioWorkletNode implements Engine {
16
16
  panic(): void;
17
17
  sleep(): void;
18
18
  wake(): void;
19
+ loadClickSound(index: 0 | 1, data: AudioData): void;
19
20
  get isPlaying(): ObservableValue<boolean>;
20
21
  get isRecording(): ObservableValue<boolean>;
21
22
  get isCountingIn(): ObservableValue<boolean>;
@@ -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,EAAY,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;IAgItC,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;IAEZ,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;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;IAqItC,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"}
@@ -3,7 +3,7 @@ import { SyncSource } from "@opendaw/lib-box";
3
3
  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
- import { MIDIReceiver } from "./midi/MIDIReceiver";
6
+ import { MIDIReceiver } from "./midi";
7
7
  export class EngineWorklet extends AudioWorkletNode {
8
8
  static ID = 0 | 0;
9
9
  id = EngineWorklet.ID++;
@@ -70,6 +70,9 @@ export class EngineWorklet extends AudioWorkletNode {
70
70
  panic() { dispatcher.dispatchAndForget(this.panic); }
71
71
  sleep() { dispatcher.dispatchAndForget(this.sleep); }
72
72
  wake() { dispatcher.dispatchAndForget(this.wake); }
73
+ loadClickSound(index, data) {
74
+ dispatcher.dispatchAndForget(this.loadClickSound, index, data);
75
+ }
73
76
  noteSignal(signal) { dispatcher.dispatchAndForget(this.noteSignal, signal); }
74
77
  ignoreNoteRegion(uuid) {
75
78
  dispatcher.dispatchAndForget(this.ignoreNoteRegion, uuid);
@@ -85,7 +88,7 @@ export class EngineWorklet extends AudioWorkletNode {
85
88
  }
86
89
  terminate() { dispatcher.dispatchAndForget(this.terminate); }
87
90
  }));
88
- const { port, sab } = this.#terminator.own(MIDIReceiver.create(context, (deviceId, data, relativeTimeInMs) => this.#project.receivedMIDIFromEngine(deviceId, data, relativeTimeInMs)));
91
+ const { port, sab } = this.#terminator.own(MIDIReceiver.create(() => context instanceof AudioContext ? context.outputLatency * 1000 : 20, (deviceId, data, relativeTimeInMs) => this.#project.receivedMIDIFromEngine(deviceId, data, relativeTimeInMs)));
89
92
  this.#commands.setupMIDI(port, sab);
90
93
  Communicator.executor(messenger.channel("engine-to-client"), {
91
94
  log: (message) => console.log("WORKLET", message),
@@ -149,6 +152,9 @@ export class EngineWorklet extends AudioWorkletNode {
149
152
  this.#commands.stop(true);
150
153
  }
151
154
  wake() { Atomics.store(this.#controlFlags, 0, 0); }
155
+ loadClickSound(index, data) {
156
+ this.#commands.loadClickSound(index, data);
157
+ }
152
158
  get isPlaying() { return this.#isPlaying; }
153
159
  get isRecording() { return this.#isRecording; }
154
160
  get isCountingIn() { return this.#isCountingIn; }
@@ -1,10 +1,21 @@
1
1
  import { int, Option, Progress } from "@opendaw/lib-std";
2
2
  import { AudioData } from "@opendaw/lib-dsp";
3
- import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
3
+ import { ExportStemsConfiguration, OfflineEngineRenderConfig } from "@opendaw/studio-adapters";
4
4
  import { Project } from "./project";
5
- export declare namespace OfflineEngineRenderer {
6
- const install: (url: string) => void;
7
- const getWorkerUrl: () => string;
8
- const start: (source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, progress: Progress.Handler, abortSignal?: AbortSignal, sampleRate?: int) => Promise<AudioData>;
5
+ export declare class OfflineEngineRenderer {
6
+ #private;
7
+ static install(url: string): void;
8
+ static getWorkerUrl(): string;
9
+ static create(source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, sampleRate?: int): Promise<OfflineEngineRenderer>;
10
+ static start(source: Project, optExportConfiguration: Option<ExportStemsConfiguration>, progress: Progress.Handler, abortSignal?: AbortSignal, sampleRate?: int): Promise<AudioData>;
11
+ private constructor();
12
+ get sampleRate(): int;
13
+ get numberOfChannels(): int;
14
+ get totalFrames(): int;
15
+ play(): void;
16
+ stop(): void;
17
+ terminate(): void;
18
+ step(samples: int): Promise<Float32Array[]>;
19
+ render(config: OfflineEngineRenderConfig, progress: Progress.Handler, abortSignal?: AbortSignal): Promise<AudioData>;
9
20
  }
10
21
  //# sourceMappingURL=OfflineEngineRenderer.d.ts.map
@@ -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,EAK3B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAIjC,yBAAiB,qBAAqB,CAAC;IAG5B,MAAM,OAAO,GAAI,KAAK,MAAM,KAAG,IAGrC,CAAA;IAEM,MAAM,YAAY,QAAO,MAE/B,CAAA;IAEM,MAAM,KAAK,GAAU,QAAQ,OAAO,EACf,wBAAwB,MAAM,CAAC,wBAAwB,CAAC,EACxD,UAAU,QAAQ,CAAC,OAAO,EAC1B,cAAc,WAAW,EACzB,aAAY,GAAY,KAAG,OAAO,CAAC,SAAS,CAuIvE,CAAA;CACJ"}
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;WA8GpB,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"}
@@ -3,24 +3,23 @@ import { AudioData } from "@opendaw/lib-dsp";
3
3
  import { Communicator, Messenger } from "@opendaw/lib-runtime";
4
4
  import { ExportStemsConfiguration } from "@opendaw/studio-adapters";
5
5
  import { AudioWorklets } from "./AudioWorklets";
6
- export var OfflineEngineRenderer;
7
- (function (OfflineEngineRenderer) {
8
- let workerUrl = Option.None;
9
- OfflineEngineRenderer.install = (url) => {
6
+ import { MIDIReceiver } from "./midi";
7
+ let workerUrl = Option.None;
8
+ export class OfflineEngineRenderer {
9
+ static install(url) {
10
10
  console.debug(`OfflineEngineWorkerUrl: '${url}'`);
11
11
  workerUrl = Option.wrap(url);
12
- };
13
- OfflineEngineRenderer.getWorkerUrl = () => {
12
+ }
13
+ static getWorkerUrl() {
14
14
  return workerUrl.unwrap("OfflineEngineWorkerUrl is missing (call 'install' first)");
15
- };
16
- OfflineEngineRenderer.start = async (source, optExportConfiguration, progress, abortSignal, sampleRate = 48_000) => {
15
+ }
16
+ static async create(source, optExportConfiguration, sampleRate = 48_000) {
17
17
  const numStems = ExportStemsConfiguration.countStems(optExportConfiguration);
18
18
  if (numStems === 0) {
19
19
  return panic("Nothing to export");
20
20
  }
21
21
  const numberOfChannels = numStems * 2;
22
- const { promise, reject, resolve } = Promise.withResolvers();
23
- const worker = new Worker(OfflineEngineRenderer.getWorkerUrl(), { type: "module" });
22
+ const worker = new Worker(this.getWorkerUrl(), { type: "module" });
24
23
  const messenger = Messenger.for(worker);
25
24
  const protocol = Communicator.sender(messenger.channel("offline-engine"), dispatcher => new class {
26
25
  initialize(enginePort, progressPort, config) {
@@ -39,11 +38,6 @@ export var OfflineEngineRenderer;
39
38
  const syncStreamBuffer = new SharedArrayBuffer(1024);
40
39
  const controlFlagsBuffer = new SharedArrayBuffer(4);
41
40
  const terminator = new Terminator();
42
- const projectCopy = source.copy();
43
- const { timelineBox, boxGraph } = projectCopy;
44
- boxGraph.beginTransaction();
45
- timelineBox.loopArea.enabled.setValue(false);
46
- boxGraph.endTransaction();
47
41
  const engineMessenger = Messenger.for(channel.port2);
48
42
  Communicator.executor(engineMessenger.channel("engine-to-client"), {
49
43
  log: (message) => console.log("OFFLINE-ENGINE", message),
@@ -91,51 +85,104 @@ export var OfflineEngineRenderer;
91
85
  scheduleClipPlay(clipIds) { dispatcher.dispatchAndForget(this.scheduleClipPlay, clipIds); }
92
86
  scheduleClipStop(trackIds) { dispatcher.dispatchAndForget(this.scheduleClipStop, trackIds); }
93
87
  setupMIDI(port, buffer) { dispatcher.dispatchAndForget(this.setupMIDI, port, buffer); }
88
+ loadClickSound(index, data) { dispatcher.dispatchAndForget(this.loadClickSound, index, data); }
94
89
  terminate() { dispatcher.dispatchAndForget(this.terminate); }
95
90
  });
96
91
  channel.port2.start();
97
92
  progressChannel.port2.start();
98
- let cancelled = false;
99
- if (isDefined(abortSignal)) {
100
- abortSignal.onabort = () => {
101
- engineCommands.stop(true);
102
- protocol.stop();
103
- terminator.terminate();
104
- worker.terminate();
105
- cancelled = true;
106
- reject(Errors.AbortError);
107
- };
108
- }
109
- progressChannel.port2.onmessage = (event) => progress(event.data.frames / sampleRate);
93
+ terminator.own(source.liveStreamReceiver.connect(engineMessenger.channel("engine-live-data")));
94
+ const { port, sab } = terminator.own(MIDIReceiver.create(() => 0, (deviceId, data, relativeTimeInMs) => source.receivedMIDIFromEngine(deviceId, data, relativeTimeInMs)));
110
95
  await protocol.initialize(channel.port1, progressChannel.port1, {
111
96
  sampleRate,
112
97
  numberOfChannels,
113
98
  processorsUrl: AudioWorklets.processorsUrl,
114
99
  syncStreamBuffer,
115
100
  controlFlagsBuffer,
116
- project: projectCopy.toArrayBuffer(),
101
+ project: source.toArrayBuffer(),
117
102
  exportConfiguration: optExportConfiguration.unwrapOrUndefined()
118
103
  });
119
- engineCommands.play();
120
- protocol.render({}).then(channels => {
104
+ engineCommands.setupMIDI(port, sab);
105
+ return new OfflineEngineRenderer(worker, protocol, engineCommands, terminator, progressChannel.port2, sampleRate, numberOfChannels);
106
+ }
107
+ static async start(source, optExportConfiguration, progress, abortSignal, sampleRate = 48_000) {
108
+ const { timelineBox: { loopArea: { enabled } }, boxGraph } = source;
109
+ const wasEnabled = enabled.getValue();
110
+ boxGraph.beginTransaction();
111
+ enabled.setValue(false);
112
+ boxGraph.endTransaction();
113
+ const renderer = await this.create(source, optExportConfiguration, sampleRate);
114
+ const result = await renderer.render({}, progress, abortSignal);
115
+ boxGraph.beginTransaction();
116
+ enabled.setValue(wasEnabled);
117
+ boxGraph.endTransaction();
118
+ return result;
119
+ }
120
+ #worker;
121
+ #protocol;
122
+ #engineCommands;
123
+ #terminator;
124
+ #progressPort;
125
+ #sampleRate;
126
+ #numberOfChannels;
127
+ #totalFrames = 0;
128
+ constructor(worker, protocol, engineCommands, terminator, progressPort, sampleRate, numberOfChannels) {
129
+ this.#worker = worker;
130
+ this.#protocol = protocol;
131
+ this.#engineCommands = engineCommands;
132
+ this.#terminator = terminator;
133
+ this.#progressPort = progressPort;
134
+ this.#sampleRate = sampleRate;
135
+ this.#numberOfChannels = numberOfChannels;
136
+ }
137
+ get sampleRate() { return this.#sampleRate; }
138
+ get numberOfChannels() { return this.#numberOfChannels; }
139
+ get totalFrames() { return this.#totalFrames; }
140
+ play() {
141
+ this.#engineCommands.play();
142
+ }
143
+ stop() {
144
+ this.#engineCommands.stop(true);
145
+ this.#protocol.stop();
146
+ }
147
+ terminate() {
148
+ this.#terminator.terminate();
149
+ this.#worker.terminate();
150
+ }
151
+ async step(samples) {
152
+ const channels = await this.#protocol.step(samples);
153
+ this.#totalFrames += samples;
154
+ return channels;
155
+ }
156
+ async render(config, progress, abortSignal) {
157
+ const { promise, reject, resolve } = Promise.withResolvers();
158
+ let cancelled = false;
159
+ if (isDefined(abortSignal)) {
160
+ abortSignal.onabort = () => {
161
+ this.stop();
162
+ this.terminate();
163
+ cancelled = true;
164
+ reject(Errors.AbortError);
165
+ };
166
+ }
167
+ this.#progressPort.onmessage = (event) => progress(event.data.frames / this.#sampleRate);
168
+ this.play();
169
+ this.#protocol.render(config).then(channels => {
121
170
  if (cancelled) {
122
171
  return;
123
172
  }
124
- terminator.terminate();
125
- worker.terminate();
173
+ this.terminate();
126
174
  const numberOfFrames = channels[0].length;
127
- const audioData = AudioData.create(sampleRate, numberOfFrames, numberOfChannels);
128
- for (let channelIndex = 0; channelIndex < numberOfChannels; channelIndex++) {
175
+ const audioData = AudioData.create(this.#sampleRate, numberOfFrames, this.#numberOfChannels);
176
+ for (let channelIndex = 0; channelIndex < this.#numberOfChannels; channelIndex++) {
129
177
  audioData.frames[channelIndex].set(channels[channelIndex]);
130
178
  }
131
179
  resolve(audioData);
132
180
  }).catch(reason => {
133
181
  if (!cancelled) {
134
- terminator.terminate();
135
- worker.terminate();
182
+ this.terminate();
136
183
  reject(reason);
137
184
  }
138
185
  });
139
186
  return promise;
140
- };
141
- })(OfflineEngineRenderer || (OfflineEngineRenderer = {}));
187
+ }
188
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"OpenDAWHeaders.d.ts","sourceRoot":"","sources":["../src/OpenDAWHeaders.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,QAAkC,CAAA;AAChE,eAAO,MAAM,cAAc,EAAE,WAI5B,CAAA"}
1
+ {"version":3,"file":"OpenDAWHeaders.d.ts","sourceRoot":"","sources":["../src/OpenDAWHeaders.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,QAAkC,CAAA;AAChE,eAAO,MAAM,cAAc,EAAE,WAG5B,CAAA"}
@@ -3,6 +3,5 @@ const password = "prototype";
3
3
  export const base64Credentials = btoa(`${username}:${password}`);
4
4
  export const OpenDAWHeaders = {
5
5
  method: "GET",
6
- headers: { "Authorization": `Basic ${base64Credentials}` },
7
- credentials: "include"
6
+ headers: { "Authorization": `Basic ${base64Credentials}` }
8
7
  };
@@ -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;IAOjB,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,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"}
@@ -57,7 +57,6 @@ export class RecordingWorklet extends AudioWorkletNode {
57
57
  terminate() {
58
58
  this.#reader.stop();
59
59
  this.#isRecording = false;
60
- this.#data = Option.None;
61
60
  this.#terminator.terminate();
62
61
  }
63
62
  toString() { return `{RecordingWorklet}`; }
@@ -1,21 +1,31 @@
1
1
  export declare const StudioPreferences: import("@opendaw/lib-fusion").PreferencesHost<{
2
- "visible-help-hints": boolean;
3
- "enable-history-buttons": boolean;
4
- "note-audition-while-editing": boolean;
5
- "modifying-controls-wheel": boolean;
6
- "auto-open-clips": boolean;
7
- "auto-create-output-compressor": boolean;
8
- "footer-show-fps-meter": boolean;
9
- "footer-show-samples-memory": boolean;
10
- "footer-show-build-infos": boolean;
11
- "normalize-mouse-wheel": boolean;
2
+ visibility: {
3
+ "visible-help-hints": boolean;
4
+ "enable-history-buttons": boolean;
5
+ "auto-open-clips": boolean;
6
+ "scrollbar-padding": boolean;
7
+ };
12
8
  "time-display": {
13
9
  musical: boolean;
14
10
  absolute: boolean;
15
11
  details: boolean;
16
12
  fps: 30 | 24 | 25 | 29.97;
17
13
  };
18
- "dragging-use-pointer-lock": boolean;
19
- "enable-beta-features": boolean;
14
+ engine: {
15
+ "note-audition-while-editing": boolean;
16
+ "auto-create-output-compressor": boolean;
17
+ };
18
+ pointer: {
19
+ "dragging-use-pointer-lock": boolean;
20
+ "modifying-controls-wheel": boolean;
21
+ "normalize-mouse-wheel": boolean;
22
+ };
23
+ debug: {
24
+ "footer-show-fps-meter": boolean;
25
+ "footer-show-samples-memory": boolean;
26
+ "footer-show-build-infos": boolean;
27
+ "enable-beta-features": boolean;
28
+ "enable-debug-menu": boolean;
29
+ };
20
30
  }>;
21
31
  //# 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,24 +1,34 @@
1
1
  import { z } from "zod";
2
2
  export declare const FpsOptions: readonly [24, 25, 29.97, 30];
3
3
  export declare const StudioSettingsSchema: z.ZodObject<{
4
- "visible-help-hints": z.ZodDefault<z.ZodBoolean>;
5
- "enable-history-buttons": z.ZodDefault<z.ZodBoolean>;
6
- "note-audition-while-editing": z.ZodDefault<z.ZodBoolean>;
7
- "modifying-controls-wheel": z.ZodDefault<z.ZodBoolean>;
8
- "auto-open-clips": z.ZodDefault<z.ZodBoolean>;
9
- "auto-create-output-compressor": z.ZodDefault<z.ZodBoolean>;
10
- "footer-show-fps-meter": z.ZodDefault<z.ZodBoolean>;
11
- "footer-show-samples-memory": z.ZodDefault<z.ZodBoolean>;
12
- "footer-show-build-infos": z.ZodDefault<z.ZodBoolean>;
13
- "normalize-mouse-wheel": z.ZodDefault<z.ZodBoolean>;
4
+ visibility: z.ZodDefault<z.ZodObject<{
5
+ "visible-help-hints": z.ZodBoolean;
6
+ "enable-history-buttons": z.ZodBoolean;
7
+ "auto-open-clips": z.ZodBoolean;
8
+ "scrollbar-padding": z.ZodBoolean;
9
+ }, z.core.$strip>>;
14
10
  "time-display": z.ZodDefault<z.ZodObject<{
15
11
  musical: z.ZodBoolean;
16
12
  absolute: z.ZodBoolean;
17
13
  details: z.ZodBoolean;
18
14
  fps: z.ZodUnion<z.ZodLiteral<30 | 24 | 25 | 29.97>[]>;
19
15
  }, z.core.$strip>>;
20
- "dragging-use-pointer-lock": z.ZodDefault<z.ZodBoolean>;
21
- "enable-beta-features": z.ZodDefault<z.ZodBoolean>;
16
+ engine: z.ZodDefault<z.ZodObject<{
17
+ "note-audition-while-editing": z.ZodBoolean;
18
+ "auto-create-output-compressor": z.ZodBoolean;
19
+ }, z.core.$strip>>;
20
+ pointer: z.ZodDefault<z.ZodObject<{
21
+ "dragging-use-pointer-lock": z.ZodBoolean;
22
+ "modifying-controls-wheel": z.ZodBoolean;
23
+ "normalize-mouse-wheel": z.ZodBoolean;
24
+ }, z.core.$strip>>;
25
+ debug: z.ZodDefault<z.ZodObject<{
26
+ "footer-show-fps-meter": z.ZodBoolean;
27
+ "footer-show-samples-memory": z.ZodBoolean;
28
+ "footer-show-build-infos": z.ZodBoolean;
29
+ "enable-beta-features": z.ZodBoolean;
30
+ "enable-debug-menu": z.ZodBoolean;
31
+ }, z.core.$strip>>;
22
32
  }, z.core.$strip>;
23
33
  export type StudioSettings = z.infer<typeof StudioSettingsSchema>;
24
34
  //# 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;AAErB,eAAO,MAAM,UAAU,8BAA+B,CAAA;AAEtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;iBAmB/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;AAEtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+C/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
@@ -1,22 +1,51 @@
1
1
  import { z } from "zod";
2
+ import { Browser } from "@opendaw/lib-dom";
2
3
  export const FpsOptions = [24, 25, 29.97, 30];
3
4
  export const StudioSettingsSchema = z.object({
4
- "visible-help-hints": z.boolean().default(true),
5
- "enable-history-buttons": z.boolean().default(navigator.maxTouchPoints > 0),
6
- "note-audition-while-editing": z.boolean().default(true),
7
- "modifying-controls-wheel": z.boolean().default(false),
8
- "auto-open-clips": z.boolean().default(true),
9
- "auto-create-output-compressor": z.boolean().default(true),
10
- "footer-show-fps-meter": z.boolean().default(false),
11
- "footer-show-samples-memory": z.boolean().default(false),
12
- "footer-show-build-infos": z.boolean().default(false),
13
- "normalize-mouse-wheel": z.boolean().default(false),
5
+ "visibility": z.object({
6
+ "visible-help-hints": z.boolean(),
7
+ "enable-history-buttons": z.boolean(),
8
+ "auto-open-clips": z.boolean(),
9
+ "scrollbar-padding": z.boolean()
10
+ }).default({
11
+ "visible-help-hints": true,
12
+ "enable-history-buttons": navigator.maxTouchPoints > 0,
13
+ "auto-open-clips": true,
14
+ "scrollbar-padding": Browser.isWindows()
15
+ }),
14
16
  "time-display": z.object({
15
17
  "musical": z.boolean(),
16
18
  "absolute": z.boolean(),
17
19
  "details": z.boolean(),
18
20
  "fps": z.union(FpsOptions.map(value => z.literal(value)))
19
21
  }).default({ musical: true, absolute: false, details: false, fps: 25 }),
20
- "dragging-use-pointer-lock": z.boolean().default(false),
21
- "enable-beta-features": z.boolean().default(false)
22
+ "engine": z.object({
23
+ "note-audition-while-editing": z.boolean(),
24
+ "auto-create-output-compressor": z.boolean()
25
+ }).default({
26
+ "note-audition-while-editing": true,
27
+ "auto-create-output-compressor": true
28
+ }),
29
+ "pointer": z.object({
30
+ "dragging-use-pointer-lock": z.boolean(),
31
+ "modifying-controls-wheel": z.boolean(),
32
+ "normalize-mouse-wheel": z.boolean()
33
+ }).default({
34
+ "dragging-use-pointer-lock": false,
35
+ "modifying-controls-wheel": false,
36
+ "normalize-mouse-wheel": true
37
+ }),
38
+ "debug": z.object({
39
+ "footer-show-fps-meter": z.boolean(),
40
+ "footer-show-samples-memory": z.boolean(),
41
+ "footer-show-build-infos": z.boolean(),
42
+ "enable-beta-features": z.boolean(),
43
+ "enable-debug-menu": z.boolean()
44
+ }).default({
45
+ "footer-show-fps-meter": false,
46
+ "footer-show-samples-memory": false,
47
+ "footer-show-build-infos": false,
48
+ "enable-beta-features": false,
49
+ "enable-debug-menu": false
50
+ })
22
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"WavFile.d.ts","sourceRoot":"","sources":["../src/WavFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAQ,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAE1C,yBAAiB,OAAO,CAAC;IAMd,MAAM,YAAY,GAAI,QAAQ,WAAW,KAAG,SA2ClD,CAAA;IAEM,MAAM,YAAY,GAAI,OAAO,SAAS,GAAG,WAAW,EAAE,YAAW,GAA6B,KAAG,WAwCvG,CAAA;CACJ"}
1
+ {"version":3,"file":"WavFile.d.ts","sourceRoot":"","sources":["../src/WavFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAQ,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAE1C,yBAAiB,OAAO,CAAC;IAMd,MAAM,YAAY,GAAI,QAAQ,WAAW,KAAG,SAgElD,CAAA;IAEM,MAAM,YAAY,GAAI,OAAO,SAAS,GAAG,WAAW,EAAE,YAAW,GAA6B,KAAG,WAwCvG,CAAA;CACJ"}