@opendaw/studio-adapters 0.0.69 → 0.0.71

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 (148) hide show
  1. package/dist/AutomatableParameterFieldAdapter.d.ts.map +1 -1
  2. package/dist/AutomatableParameterFieldAdapter.js +5 -3
  3. package/dist/BoxAdapters.d.ts.map +1 -1
  4. package/dist/BoxAdapters.js +2 -0
  5. package/dist/BoxAdaptersContext.d.ts +1 -2
  6. package/dist/BoxAdaptersContext.d.ts.map +1 -1
  7. package/dist/ClipSequencing.d.ts +1 -1
  8. package/dist/ClipSequencing.d.ts.map +1 -1
  9. package/dist/DeviceAdapter.d.ts +7 -6
  10. package/dist/DeviceAdapter.d.ts.map +1 -1
  11. package/dist/DeviceAdapter.js +1 -1
  12. package/dist/DeviceBox.d.ts +1 -1
  13. package/dist/DeviceBox.js +1 -1
  14. package/dist/EngineStateSchema.d.ts +1 -0
  15. package/dist/EngineStateSchema.d.ts.map +1 -1
  16. package/dist/EngineStateSchema.js +1 -0
  17. package/dist/LabeledAudioOutputsOwner.d.ts +11 -0
  18. package/dist/LabeledAudioOutputsOwner.d.ts.map +1 -0
  19. package/dist/LabeledAudioOutputsOwner.js +1 -0
  20. package/dist/NoteSignal.d.ts +11 -1
  21. package/dist/NoteSignal.d.ts.map +1 -1
  22. package/dist/NoteSignal.js +2 -0
  23. package/dist/RootBoxAdapter.d.ts +3 -1
  24. package/dist/RootBoxAdapter.d.ts.map +1 -1
  25. package/dist/RootBoxAdapter.js +10 -1
  26. package/dist/TempoRange.d.ts +5 -0
  27. package/dist/TempoRange.d.ts.map +1 -0
  28. package/dist/TempoRange.js +1 -0
  29. package/dist/Validator.d.ts +0 -2
  30. package/dist/Validator.d.ts.map +1 -1
  31. package/dist/Validator.js +4 -3
  32. package/dist/VaryingTempoMap.d.ts +18 -0
  33. package/dist/VaryingTempoMap.d.ts.map +1 -0
  34. package/dist/VaryingTempoMap.js +105 -0
  35. package/dist/audio/AudioFileBoxAdapter.js +1 -1
  36. package/dist/audio-unit/AudioBusBoxAdapter.d.ts +3 -1
  37. package/dist/audio-unit/AudioBusBoxAdapter.d.ts.map +1 -1
  38. package/dist/audio-unit/AudioBusBoxAdapter.js +4 -0
  39. package/dist/audio-unit/AudioUnitBoxAdapter.d.ts +4 -2
  40. package/dist/audio-unit/AudioUnitBoxAdapter.d.ts.map +1 -1
  41. package/dist/audio-unit/AudioUnitBoxAdapter.js +16 -2
  42. package/dist/devices/audio-effects/CompressorDeviceBoxAdapter.d.ts +3 -0
  43. package/dist/devices/audio-effects/CompressorDeviceBoxAdapter.d.ts.map +1 -1
  44. package/dist/devices/audio-effects/CompressorDeviceBoxAdapter.js +8 -2
  45. package/dist/devices/audio-effects/CrusherDeviceBoxAdapter.d.ts +2 -0
  46. package/dist/devices/audio-effects/CrusherDeviceBoxAdapter.d.ts.map +1 -1
  47. package/dist/devices/audio-effects/CrusherDeviceBoxAdapter.js +7 -2
  48. package/dist/devices/audio-effects/DattorroReverbDeviceBoxAdapter.d.ts +2 -0
  49. package/dist/devices/audio-effects/DattorroReverbDeviceBoxAdapter.d.ts.map +1 -1
  50. package/dist/devices/audio-effects/DattorroReverbDeviceBoxAdapter.js +7 -2
  51. package/dist/devices/audio-effects/DelayDeviceBoxAdapter.d.ts +2 -0
  52. package/dist/devices/audio-effects/DelayDeviceBoxAdapter.d.ts.map +1 -1
  53. package/dist/devices/audio-effects/DelayDeviceBoxAdapter.js +7 -2
  54. package/dist/devices/audio-effects/FoldDeviceBoxAdapter.d.ts +2 -0
  55. package/dist/devices/audio-effects/FoldDeviceBoxAdapter.d.ts.map +1 -1
  56. package/dist/devices/audio-effects/FoldDeviceBoxAdapter.js +7 -2
  57. package/dist/devices/audio-effects/ModularDeviceBoxAdapter.d.ts +2 -0
  58. package/dist/devices/audio-effects/ModularDeviceBoxAdapter.d.ts.map +1 -1
  59. package/dist/devices/audio-effects/ModularDeviceBoxAdapter.js +4 -1
  60. package/dist/devices/audio-effects/RevampDeviceBoxAdapter.d.ts +2 -0
  61. package/dist/devices/audio-effects/RevampDeviceBoxAdapter.d.ts.map +1 -1
  62. package/dist/devices/audio-effects/RevampDeviceBoxAdapter.js +7 -2
  63. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts +2 -0
  64. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts.map +1 -1
  65. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.js +7 -2
  66. package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts +2 -0
  67. package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts.map +1 -1
  68. package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.js +7 -2
  69. package/dist/devices/audio-effects/TidalDeviceBoxAdapter.d.ts +2 -0
  70. package/dist/devices/audio-effects/TidalDeviceBoxAdapter.d.ts.map +1 -1
  71. package/dist/devices/audio-effects/TidalDeviceBoxAdapter.js +7 -2
  72. package/dist/devices/audio-effects/UnknownAudioEffectDeviceBoxAdapter.d.ts +2 -0
  73. package/dist/devices/audio-effects/UnknownAudioEffectDeviceBoxAdapter.d.ts.map +1 -1
  74. package/dist/devices/audio-effects/UnknownAudioEffectDeviceBoxAdapter.js +4 -0
  75. package/dist/devices/instruments/MIDIOutputDeviceBoxAdapter.d.ts +2 -0
  76. package/dist/devices/instruments/MIDIOutputDeviceBoxAdapter.d.ts.map +1 -1
  77. package/dist/devices/instruments/MIDIOutputDeviceBoxAdapter.js +4 -1
  78. package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts +2 -0
  79. package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts.map +1 -1
  80. package/dist/devices/instruments/NanoDeviceBoxAdapter.js +7 -2
  81. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts +5 -2
  82. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts.map +1 -1
  83. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.js +12 -1
  84. package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts +3 -1
  85. package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts.map +1 -1
  86. package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.js +18 -1
  87. package/dist/devices/instruments/SoundfontDeviceBoxAdapter.d.ts +2 -0
  88. package/dist/devices/instruments/SoundfontDeviceBoxAdapter.d.ts.map +1 -1
  89. package/dist/devices/instruments/SoundfontDeviceBoxAdapter.js +4 -1
  90. package/dist/devices/instruments/TapeDeviceBoxAdapter.d.ts +2 -0
  91. package/dist/devices/instruments/TapeDeviceBoxAdapter.d.ts.map +1 -1
  92. package/dist/devices/instruments/TapeDeviceBoxAdapter.js +7 -2
  93. package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.d.ts +2 -0
  94. package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.d.ts.map +1 -1
  95. package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.js +7 -2
  96. package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.d.ts +1 -1
  97. package/dist/devices/midi-effects/PitchDeviceBoxAdapter.d.ts +1 -1
  98. package/dist/devices/midi-effects/UnknownMidiEffectDeviceBoxAdapter.d.ts +1 -1
  99. package/dist/devices/midi-effects/VelocityDeviceBoxAdapter.d.ts +1 -1
  100. package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.d.ts +1 -1
  101. package/dist/editing/UserEditing.js +1 -1
  102. package/dist/index.d.ts +5 -0
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +5 -0
  105. package/dist/preset/PresetDecoder.d.ts.map +1 -1
  106. package/dist/preset/PresetDecoder.js +20 -9
  107. package/dist/project/ProjectSkeleton.d.ts.map +1 -1
  108. package/dist/project/ProjectSkeleton.js +5 -4
  109. package/dist/project/ProjectUtils.d.ts.map +1 -1
  110. package/dist/project/ProjectUtils.js +40 -10
  111. package/dist/selection/FilteredSelection.js +2 -2
  112. package/dist/selection/VertexSelection.d.ts +2 -1
  113. package/dist/selection/VertexSelection.d.ts.map +1 -1
  114. package/dist/selection/VertexSelection.js +1 -1
  115. package/dist/timeline/RegionBoxAdapter.d.ts +8 -0
  116. package/dist/timeline/RegionBoxAdapter.d.ts.map +1 -1
  117. package/dist/timeline/SignatureEventBoxAdapter.d.ts +24 -0
  118. package/dist/timeline/SignatureEventBoxAdapter.d.ts.map +1 -0
  119. package/dist/timeline/SignatureEventBoxAdapter.js +42 -0
  120. package/dist/timeline/SignatureTrackAdapter.d.ts +41 -0
  121. package/dist/timeline/SignatureTrackAdapter.d.ts.map +1 -0
  122. package/dist/timeline/SignatureTrackAdapter.js +279 -0
  123. package/dist/timeline/TimelineBoxAdapter.d.ts +7 -2
  124. package/dist/timeline/TimelineBoxAdapter.d.ts.map +1 -1
  125. package/dist/timeline/TimelineBoxAdapter.js +52 -7
  126. package/dist/timeline/TrackBoxAdapter.d.ts +1 -0
  127. package/dist/timeline/TrackBoxAdapter.d.ts.map +1 -1
  128. package/dist/timeline/TrackBoxAdapter.js +1 -0
  129. package/dist/timeline/clip/AudioClipBoxAdapter.d.ts +1 -2
  130. package/dist/timeline/clip/AudioClipBoxAdapter.d.ts.map +1 -1
  131. package/dist/timeline/clip/AudioClipBoxAdapter.js +3 -4
  132. package/dist/timeline/collection/NoteEventCollectionBoxAdapter.d.ts.map +1 -1
  133. package/dist/timeline/collection/NoteEventCollectionBoxAdapter.js +10 -8
  134. package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts +2 -2
  135. package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts.map +1 -1
  136. package/dist/timeline/collection/ValueEventCollectionBoxAdapter.js +15 -8
  137. package/dist/timeline/event/ValueEventBoxAdapter.d.ts +1 -1
  138. package/dist/timeline/event/ValueEventBoxAdapter.d.ts.map +1 -1
  139. package/dist/timeline/region/AudioRegionBoxAdapter.d.ts +4 -0
  140. package/dist/timeline/region/AudioRegionBoxAdapter.d.ts.map +1 -1
  141. package/dist/timeline/region/AudioRegionBoxAdapter.js +17 -17
  142. package/dist/timeline/region/NoteRegionBoxAdapter.d.ts +5 -1
  143. package/dist/timeline/region/NoteRegionBoxAdapter.d.ts.map +1 -1
  144. package/dist/timeline/region/NoteRegionBoxAdapter.js +4 -0
  145. package/dist/timeline/region/ValueRegionBoxAdapter.d.ts +4 -0
  146. package/dist/timeline/region/ValueRegionBoxAdapter.d.ts.map +1 -1
  147. package/dist/timeline/region/ValueRegionBoxAdapter.js +4 -0
  148. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"AutomatableParameterFieldAdapter.d.ts","sourceRoot":"","sources":["../src/AutomatableParameterFieldAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,qBAAqB,EAIrB,QAAQ,EACR,MAAM,EAEN,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,SAAS,EACT,YAAY,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,OAAO,EAA8B,cAAc,EAAE,aAAa,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AACpH,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAQvD,qBAAa,gCAAgC,CAAC,CAAC,SAAS,eAAe,GAAG,GAAG,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU;;gBAiBlG,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,EAC7B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,SAAS;IA0D9B,mBAAmB,IAAI,UAAU;IAWjC,IAAI,KAAK,IAAI,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAqB;IACxE,IAAI,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,CAA4B;IAC/D,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,CAA6B;IAClE,IAAI,IAAI,IAAI,MAAM,CAAoB;IACtC,IAAI,MAAM,IAAI,SAAS,CAAsB;IAC7C,IAAI,IAAI,IAAI,aAAa,CAA0B;IACnD,IAAI,OAAO,IAAI,OAAO,CAA6B;IACnD,IAAI,KAAK,IAAI,MAAM,CAAC,eAAe,CAAC,CAA+B;IAEnE,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC;IAW1B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAEhF,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAK1F,iCAAiC,CAAC,QAAQ,EAAE,qBAAqB,GAAG,YAAY;IAMhF,QAAQ,IAAI,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IACpC,YAAY,IAAI,SAAS;IACzB,kBAAkB,IAAI,CAAC;IACvB,sBAAsB,IAAI,SAAS;IACnC,uBAAuB,IAAI,QAAQ,CAAC,YAAY,CAAC;IACjD,aAAa,IAAI,QAAQ,CAAC,YAAY,CAAC;IACvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWjC,KAAK,IAAI,IAAI;IAEb,SAAS,IAAI,IAAI;CAKpB"}
1
+ {"version":3,"file":"AutomatableParameterFieldAdapter.d.ts","sourceRoot":"","sources":["../src/AutomatableParameterFieldAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,qBAAqB,EAIrB,QAAQ,EACR,MAAM,EAEN,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,SAAS,EACT,YAAY,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,OAAO,EAA8B,cAAc,EAAE,aAAa,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AACpH,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAQvD,qBAAa,gCAAgC,CAAC,CAAC,SAAS,eAAe,GAAG,GAAG,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU;;gBAiBlG,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,EAC7B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,SAAS;IA0D9B,mBAAmB,IAAI,UAAU;IAWjC,IAAI,KAAK,IAAI,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAqB;IACxE,IAAI,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,CAA4B;IAC/D,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,CAA6B;IAClE,IAAI,IAAI,IAAI,MAAM,CAAoB;IACtC,IAAI,MAAM,IAAI,SAAS,CAAsB;IAC7C,IAAI,IAAI,IAAI,aAAa,CAA0B;IACnD,IAAI,OAAO,IAAI,OAAO,CAA6B;IACnD,IAAI,KAAK,IAAI,MAAM,CAAC,eAAe,CAAC,CAA+B;IAEnE,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC;IAW1B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAIhF,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAK1F,iCAAiC,CAAC,QAAQ,EAAE,qBAAqB,GAAG,YAAY;IAMhF,QAAQ,IAAI,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IACpC,YAAY,IAAI,SAAS;IACzB,kBAAkB,IAAI,CAAC;IACvB,sBAAsB,IAAI,SAAS;IACnC,uBAAuB,IAAI,QAAQ,CAAC,YAAY,CAAC;IACjD,aAAa,IAAI,QAAQ,CAAC,YAAY,CAAC;IACvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWjC,KAAK,IAAI,IAAI;IAEb,SAAS,IAAI,IAAI;CAKpB"}
@@ -16,7 +16,7 @@ import { TrackBoxAdapter } from "./timeline/TrackBoxAdapter";
16
16
  const ExternalControlTypes = [
17
17
  Pointers.Automation,
18
18
  Pointers.Modulation,
19
- Pointers.MidiControl,
19
+ Pointers.MIDIControl,
20
20
  Pointers.ParameterController
21
21
  ];
22
22
  export class AutomatableParameterFieldAdapter {
@@ -119,7 +119,9 @@ export class AutomatableParameterFieldAdapter {
119
119
  }
120
120
  return this.getValue();
121
121
  }
122
- subscribe(observer) { return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueChangeNotifier, "f").subscribe(observer); }
122
+ subscribe(observer) {
123
+ return __classPrivateFieldGet(this, _AutomatableParameterFieldAdapter_valueChangeNotifier, "f").subscribe(observer);
124
+ }
123
125
  catchupAndSubscribe(observer) {
124
126
  observer(this);
125
127
  return this.subscribe(observer);
@@ -166,7 +168,7 @@ const mapPointerToControlSource = (pointer) => {
166
168
  return "automated";
167
169
  case Pointers.Modulation:
168
170
  return "modulated";
169
- case Pointers.MidiControl:
171
+ case Pointers.MIDIControl:
170
172
  return "midi";
171
173
  case Pointers.ParameterController:
172
174
  return "external";
@@ -1 +1 @@
1
- {"version":3,"file":"BoxAdapters.d.ts","sourceRoot":"","sources":["../src/BoxAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,UAAU,EACV,KAAK,EAKL,UAAU,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,GAAG,EAAS,MAAM,kBAAkB,CAAA;AAiG5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAmBvC,qBAAa,WAAY,YAAW,UAAU;;gBAO9B,OAAO,EAAE,kBAAkB;IAkBvC,SAAS,IAAI,IAAI;IAMjB,UAAU,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,SAAS,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;CA6EtG"}
1
+ {"version":3,"file":"BoxAdapters.d.ts","sourceRoot":"","sources":["../src/BoxAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,UAAU,EACV,KAAK,EAKL,UAAU,EAEb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,GAAG,EAAS,MAAM,kBAAkB,CAAA;AAkG5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAoBvC,qBAAa,WAAY,YAAW,UAAU;;gBAO9B,OAAO,EAAE,kBAAkB;IAkBvC,SAAS,IAAI,IAAI;IAMjB,UAAU,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC,SAAS,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;CA8EtG"}
@@ -66,6 +66,7 @@ import { AudioPitchStretchBoxAdapter } from "./audio/AudioPitchStretchBoxAdapter
66
66
  import { TransientMarkerBoxAdapter } from "./audio/TransientMarkerBoxAdapter";
67
67
  import { WarpMarkerBoxAdapter } from "./audio/WarpMarkerBoxAdapter";
68
68
  import { AudioTimeStretchBoxAdapter } from "./audio/AudioTimeStretchBoxAdapter";
69
+ import { SignatureEventBoxAdapter } from "./timeline/SignatureEventBoxAdapter";
69
70
  export class BoxAdapters {
70
71
  constructor(context) {
71
72
  _BoxAdapters_instances.add(this);
@@ -133,6 +134,7 @@ _BoxAdapters_context = new WeakMap(), _BoxAdapters_adapters = new WeakMap(), _Bo
133
134
  visitFoldDeviceBox: (box) => new FoldDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
134
135
  visitGrooveShuffleBox: (box) => new GrooveShuffleBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
135
136
  visitMarkerBox: (box) => new MarkerBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
137
+ visitSignatureEventBox: (box) => new SignatureEventBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
136
138
  visitMIDIOutputDeviceBox: (box) => new MIDIOutputDeviceBoxAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
137
139
  visitModularAudioInputBox: (box) => new ModularAudioInputAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
138
140
  visitModularAudioOutputBox: (box) => new ModularAudioOutputAdapter(__classPrivateFieldGet(this, _BoxAdapters_context, "f"), box),
@@ -8,7 +8,7 @@ import { ParameterFieldAdapters } from "./ParameterFieldAdapters";
8
8
  import { BoxAdapters } from "./BoxAdapters";
9
9
  import { SampleLoaderManager } from "./sample/SampleLoaderManager";
10
10
  import { SoundfontLoaderManager } from "./soundfont/SoundfontLoaderManager";
11
- import { ppqn, TempoMap } from "@opendaw/lib-dsp";
11
+ import { TempoMap } from "@opendaw/lib-dsp";
12
12
  export interface BoxAdaptersContext extends Terminable {
13
13
  get boxGraph(): BoxGraph;
14
14
  get boxAdapters(): BoxAdapters;
@@ -20,7 +20,6 @@ export interface BoxAdaptersContext extends Terminable {
20
20
  get liveStreamBroadcaster(): LiveStreamBroadcaster;
21
21
  get clipSequencing(): ClipSequencing;
22
22
  get parameterFieldAdapters(): ParameterFieldAdapters;
23
- get signatureDuration(): ppqn;
24
23
  get tempoMap(): TempoMap;
25
24
  get isMainThread(): boolean;
26
25
  get isAudioContext(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"BoxAdaptersContext.d.ts","sourceRoot":"","sources":["../src/BoxAdaptersContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,OAAO,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAC,sBAAsB,EAAC,MAAM,oCAAoC,CAAA;AACzE,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAE/C,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IAClD,IAAI,QAAQ,IAAI,QAAQ,CAAA;IACxB,IAAI,WAAW,IAAI,WAAW,CAAA;IAC9B,IAAI,aAAa,IAAI,mBAAmB,CAAA;IACxC,IAAI,gBAAgB,IAAI,sBAAsB,CAAA;IAC9C,IAAI,cAAc,IAAI,cAAc,CAAA;IACpC,IAAI,kBAAkB,IAAI,kBAAkB,CAAA;IAC5C,IAAI,kBAAkB,IAAI,kBAAkB,CAAA;IAC5C,IAAI,qBAAqB,IAAI,qBAAqB,CAAA;IAClD,IAAI,cAAc,IAAI,cAAc,CAAA;IACpC,IAAI,sBAAsB,IAAI,sBAAsB,CAAA;IACpD,IAAI,iBAAiB,IAAI,IAAI,CAAA;IAC7B,IAAI,QAAQ,IAAI,QAAQ,CAAA;IACxB,IAAI,YAAY,IAAI,OAAO,CAAA;IAC3B,IAAI,cAAc,IAAI,OAAO,CAAA;CAChC"}
1
+ {"version":3,"file":"BoxAdaptersContext.d.ts","sourceRoot":"","sources":["../src/BoxAdaptersContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAC,qBAAqB,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,OAAO,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAC,sBAAsB,EAAC,MAAM,oCAAoC,CAAA;AACzE,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAEzC,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IAClD,IAAI,QAAQ,IAAI,QAAQ,CAAA;IACxB,IAAI,WAAW,IAAI,WAAW,CAAA;IAC9B,IAAI,aAAa,IAAI,mBAAmB,CAAA;IACxC,IAAI,gBAAgB,IAAI,sBAAsB,CAAA;IAC9C,IAAI,cAAc,IAAI,cAAc,CAAA;IACpC,IAAI,kBAAkB,IAAI,kBAAkB,CAAA;IAC5C,IAAI,kBAAkB,IAAI,kBAAkB,CAAA;IAC5C,IAAI,qBAAqB,IAAI,qBAAqB,CAAA;IAClD,IAAI,cAAc,IAAI,cAAc,CAAA;IACpC,IAAI,sBAAsB,IAAI,sBAAsB,CAAA;IACpD,IAAI,QAAQ,IAAI,QAAQ,CAAA;IACxB,IAAI,YAAY,IAAI,OAAO,CAAA;IAC3B,IAAI,cAAc,IAAI,OAAO,CAAA;CAChC"}
@@ -7,6 +7,6 @@ export type Section = {
7
7
  sectionTo: ppqn;
8
8
  };
9
9
  export interface ClipSequencing extends Terminable {
10
- iterate(trackKey: UUID.Bytes, a: ppqn, b: ppqn): Generator<Section>;
10
+ iterate(trackKey: UUID.Bytes, a: ppqn, b: ppqn): IterableIterator<Section>;
11
11
  }
12
12
  //# sourceMappingURL=ClipSequencing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClipSequencing.d.ts","sourceRoot":"","sources":["../src/ClipSequencing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AAErD,MAAM,MAAM,OAAO,GAAG;IAClB,OAAO,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAClC,WAAW,EAAE,IAAI,CAAA;IACjB,SAAS,EAAE,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAC9C,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;CACtE"}
1
+ {"version":3,"file":"ClipSequencing.d.ts","sourceRoot":"","sources":["../src/ClipSequencing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AAErD,MAAM,MAAM,OAAO,GAAG;IAClB,OAAO,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAClC,WAAW,EAAE,IAAI,CAAA;IACjB,SAAS,EAAE,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAC9C,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;CAC7E"}
@@ -6,20 +6,21 @@ import { IndexedBoxAdapterCollection } from "./IndexedBoxAdapterCollection";
6
6
  import { BoxAdapter } from "./BoxAdapter";
7
7
  import { AudioUnitInputAdapter } from "./audio-unit/AudioUnitInputAdapter";
8
8
  import { AudioUnitBoxAdapter } from "./audio-unit/AudioUnitBoxAdapter";
9
+ import { LabeledAudioOutputsOwner } from "./LabeledAudioOutputsOwner";
9
10
  export type DeviceType = "midi-effect" | "bus" | "instrument" | "audio-effect";
10
11
  export type DeviceAccepts = "midi" | "audio" | false;
11
12
  export declare namespace DeviceAccepts {
12
13
  const toTrackType: (type: DeviceAccepts) => TrackType.Notes | TrackType.Audio;
13
14
  }
14
- export interface MidiEffectDeviceAdapter extends EffectDeviceBoxAdapter<Pointers.MidiEffectHost> {
15
+ export interface MidiEffectDeviceAdapter extends EffectDeviceBoxAdapter<Pointers.MIDIEffectHost> {
15
16
  readonly type: "midi-effect";
16
17
  readonly accepts: "midi";
17
18
  }
18
- export interface AudioEffectDeviceAdapter extends EffectDeviceBoxAdapter<Pointers.AudioEffectHost> {
19
+ export interface AudioEffectDeviceAdapter extends EffectDeviceBoxAdapter<Pointers.AudioEffectHost>, LabeledAudioOutputsOwner {
19
20
  readonly type: "audio-effect";
20
21
  readonly accepts: "audio";
21
22
  }
22
- export type EffectPointerType = Pointers.AudioEffectHost | Pointers.MidiEffectHost;
23
+ export type EffectPointerType = Pointers.AudioEffectHost | Pointers.MIDIEffectHost;
23
24
  export interface EffectDeviceBoxAdapter<P extends EffectPointerType = EffectPointerType> extends DeviceBoxAdapter {
24
25
  readonly type: "audio-effect" | "midi-effect";
25
26
  readonly accepts: "audio" | "midi";
@@ -27,15 +28,15 @@ export interface EffectDeviceBoxAdapter<P extends EffectPointerType = EffectPoin
27
28
  get enabledField(): BooleanField;
28
29
  get host(): PointerField<P>;
29
30
  }
30
- export interface InstrumentDeviceBoxAdapter extends DeviceBoxAdapter {
31
+ export interface InstrumentDeviceBoxAdapter extends DeviceBoxAdapter, LabeledAudioOutputsOwner {
31
32
  readonly type: "instrument";
32
33
  get iconField(): StringField;
33
34
  get defaultTrackType(): TrackType;
34
35
  get acceptsMidiEvents(): boolean;
35
36
  }
36
- export interface DeviceHost extends BoxAdapter {
37
+ export interface DeviceHost extends BoxAdapter, LabeledAudioOutputsOwner {
37
38
  readonly class: "device-host";
38
- get midiEffects(): IndexedBoxAdapterCollection<MidiEffectDeviceAdapter, Pointers.MidiEffectHost>;
39
+ get midiEffects(): IndexedBoxAdapterCollection<MidiEffectDeviceAdapter, Pointers.MIDIEffectHost>;
39
40
  get inputAdapter(): Option<AudioUnitInputAdapter>;
40
41
  get audioEffects(): IndexedBoxAdapterCollection<AudioEffectDeviceAdapter, Pointers.AudioEffectHost>;
41
42
  get inputField(): Field<Pointers.InstrumentHost | Pointers.AudioOutput>;
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceAdapter.d.ts","sourceRoot":"","sources":["../src/DeviceAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DeviceAdapter.d.ts","sourceRoot":"","sources":["../src/DeviceAdapter.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ export var Devices;
35
35
  const targets = device.accepts === "audio"
36
36
  ? device.deviceHost().audioEffects.field().pointerHub.filter(Pointers.AudioEffectHost)
37
37
  : device.accepts === "midi"
38
- ? device.deviceHost().midiEffects.field().pointerHub.filter(Pointers.MidiEffectHost)
38
+ ? device.deviceHost().midiEffects.field().pointerHub.filter(Pointers.MIDIEffectHost)
39
39
  : panic("unknown type");
40
40
  targets.map(({ box }) => DeviceBoxUtils.lookupIndexField(box))
41
41
  .filter(index => devices.some(device => UUID.Comparator(device.uuid, index.address.uuid) !== 0))
@@ -11,7 +11,7 @@ export type InstrumentDeviceBox = {
11
11
  host: PointerField<Pointers.InstrumentHost>;
12
12
  } & DeviceBox;
13
13
  export type EffectDeviceBox = {
14
- host: PointerField<Pointers.AudioEffectHost | Pointers.MidiEffectHost>;
14
+ host: PointerField<Pointers.AudioEffectHost | Pointers.MIDIEffectHost>;
15
15
  index: Int32Field;
16
16
  } & DeviceBox;
17
17
  export declare namespace DeviceBoxUtils {
package/dist/DeviceBox.js CHANGED
@@ -9,7 +9,7 @@ export var DeviceBoxUtils;
9
9
  "minimized" in box && isInstanceOf(box.minimized, BooleanField);
10
10
  DeviceBoxUtils.isInstrumentDeviceBox = (box) => DeviceBoxUtils.isDeviceBox(box) && box.host.pointerType === Pointers.InstrumentHost;
11
11
  DeviceBoxUtils.isEffectDeviceBox = (box) => DeviceBoxUtils.isDeviceBox(box) && "index" in box && isInstanceOf(box.index, Int32Field) &&
12
- (box.host.pointerType === Pointers.MidiEffectHost || box.host.pointerType === Pointers.AudioEffectHost);
12
+ (box.host.pointerType === Pointers.MIDIEffectHost || box.host.pointerType === Pointers.AudioEffectHost);
13
13
  DeviceBoxUtils.lookupHostField = (box) => isDefined(box) && "host" in box && isInstanceOf(box.host, PointerField)
14
14
  ? box.host : panic(`Could not find 'host' field in '${box?.name}'`);
15
15
  DeviceBoxUtils.lookupLabelField = (box) => isDefined(box) && "label" in box && isInstanceOf(box.label, StringField)
@@ -1,6 +1,7 @@
1
1
  import { Schema } from "@opendaw/lib-std";
2
2
  export declare const EngineStateSchema: () => Schema.IO<{
3
3
  position: number;
4
+ bpm: number;
4
5
  playbackTimestamp: number;
5
6
  countInBeatsRemaining: number;
6
7
  isPlaying: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"EngineStateSchema.d.ts","sourceRoot":"","sources":["../src/EngineStateSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAEvC,eAAO,MAAM,iBAAiB;;;;;;;EAO5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"EngineStateSchema.d.ts","sourceRoot":"","sources":["../src/EngineStateSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAEvC,eAAO,MAAM,iBAAiB;;;;;;;;EAQ5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { Schema } from "@opendaw/lib-std";
2
2
  export const EngineStateSchema = Schema.createBuilder({
3
3
  position: Schema.float,
4
+ bpm: Schema.float,
4
5
  playbackTimestamp: Schema.float,
5
6
  countInBeatsRemaining: Schema.float,
6
7
  isPlaying: Schema.bool,
@@ -0,0 +1,11 @@
1
+ import { Address } from "@opendaw/lib-box";
2
+ import { Option, Provider } from "@opendaw/lib-std";
3
+ export type LabeledAudioOutput = {
4
+ readonly address: Address;
5
+ readonly label: string;
6
+ readonly children: Provider<Option<Iterable<LabeledAudioOutput>>>;
7
+ };
8
+ export interface LabeledAudioOutputsOwner {
9
+ labeledAudioOutputs(): Iterable<LabeledAudioOutput>;
10
+ }
11
+ //# sourceMappingURL=LabeledAudioOutputsOwner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabeledAudioOutputsOwner.d.ts","sourceRoot":"","sources":["../src/LabeledAudioOutputsOwner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAA;CACpE,CAAA;AAED,MAAM,WAAW,wBAAwB;IACrC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAAA;CACtD"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { byte, unitValue, UUID } from "@opendaw/lib-std";
2
+ import { ppqn } from "@opendaw/lib-dsp";
2
3
  export type NoteSignalOn = {
3
4
  type: "note-on";
4
5
  uuid: UUID.Bytes;
@@ -10,12 +11,21 @@ export type NoteSignalOff = {
10
11
  uuid: UUID.Bytes;
11
12
  pitch: byte;
12
13
  };
13
- export type NoteSignal = NoteSignalOn | NoteSignalOff;
14
+ export type NoteSignalAudition = {
15
+ type: "note-audition";
16
+ uuid: UUID.Bytes;
17
+ duration: ppqn;
18
+ pitch: byte;
19
+ velocity: unitValue;
20
+ };
21
+ export type NoteSignal = NoteSignalOn | NoteSignalOff | NoteSignalAudition;
14
22
  export declare namespace NoteSignal {
15
23
  const on: (uuid: UUID.Bytes, pitch: byte, velocity: unitValue) => NoteSignalOn;
16
24
  const off: (uuid: UUID.Bytes, pitch: byte) => NoteSignalOff;
25
+ const audition: (uuid: UUID.Bytes, pitch: byte, duration: ppqn, velocity: unitValue) => NoteSignalAudition;
17
26
  const isOn: (signal: NoteSignal) => signal is NoteSignalOn;
18
27
  const isOff: (signal: NoteSignal) => signal is NoteSignalOff;
28
+ const isAudition: (signal: NoteSignal) => signal is NoteSignalAudition;
19
29
  const fromEvent: (event: MIDIMessageEvent, uuid: UUID.Bytes) => NoteSignal;
20
30
  }
21
31
  //# sourceMappingURL=NoteSignal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NoteSignal.d.ts","sourceRoot":"","sources":["../src/NoteSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAS,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAG7D,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAA;AAElG,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,CAAA;AAE/E,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa,CAAA;AAErD,yBAAiB,UAAU,CAAC;IACjB,MAAM,EAAE,GAAI,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,UAAU,SAAS,KAAG,YAC1B,CAAA;IACvC,MAAM,GAAG,GAAI,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,KAAG,aACf,CAAA;IAE9B,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,MAAM,IAAI,YAAyC,CAAA;IACtF,MAAM,KAAK,GAAI,QAAQ,UAAU,KAAG,MAAM,IAAI,aAA2C,CAAA;IAEzF,MAAM,SAAS,GAAI,OAAO,gBAAgB,EAAE,MAAM,IAAI,CAAC,KAAK,KAAG,UAWrE,CAAA;CACJ"}
1
+ {"version":3,"file":"NoteSignal.d.ts","sourceRoot":"","sources":["../src/NoteSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAS,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAE7D,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAA;AAElG,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,CAAA;AAE/E,MAAM,MAAM,kBAAkB,GAAG;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,IAAI,CAAC;IACZ,QAAQ,EAAE,SAAS,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,kBAAkB,CAAA;AAE1E,yBAAiB,UAAU,CAAC;IACjB,MAAM,EAAE,GAAI,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,UAAU,SAAS,KAAG,YAC1B,CAAA;IACvC,MAAM,GAAG,GAAI,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,KAAG,aACf,CAAA;IAC9B,MAAM,QAAQ,GAAI,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,UAAU,IAAI,EAAE,UAAU,SAAS,KAAG,kBAChC,CAAA;IAEvD,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,MAAM,IAAI,YAAyC,CAAA;IACtF,MAAM,KAAK,GAAI,QAAQ,UAAU,KAAG,MAAM,IAAI,aAA2C,CAAA;IACzF,MAAM,UAAU,GAAI,QAAQ,UAAU,KAAG,MAAM,IAAI,kBAAqD,CAAA;IAExG,MAAM,SAAS,GAAI,OAAO,gBAAgB,EAAE,MAAM,IAAI,CAAC,KAAK,KAAG,UAWrE,CAAA;CACJ"}
@@ -4,8 +4,10 @@ export var NoteSignal;
4
4
  (function (NoteSignal) {
5
5
  NoteSignal.on = (uuid, pitch, velocity) => ({ type: "note-on", uuid, pitch, velocity });
6
6
  NoteSignal.off = (uuid, pitch) => ({ type: "note-off", uuid, pitch });
7
+ NoteSignal.audition = (uuid, pitch, duration, velocity) => ({ type: "note-audition", uuid, pitch, duration, velocity });
7
8
  NoteSignal.isOn = (signal) => signal.type === "note-on";
8
9
  NoteSignal.isOff = (signal) => signal.type === "note-off";
10
+ NoteSignal.isAudition = (signal) => signal.type === "note-audition";
9
11
  NoteSignal.fromEvent = (event, uuid) => {
10
12
  const data = event.data;
11
13
  if (MidiData.isNoteOn(data)) {
@@ -12,7 +12,8 @@ import { BoxAdapter } from "./BoxAdapter";
12
12
  import { TimelineBoxAdapter } from "./timeline/TimelineBoxAdapter";
13
13
  import { GrooveShuffleBoxAdapter } from "./grooves/GrooveShuffleBoxAdapter";
14
14
  import { PianoModeAdapter } from "./PianoModeAdapter";
15
- export declare class RootBoxAdapter implements BoxAdapter {
15
+ import { LabeledAudioOutput, LabeledAudioOutputsOwner } from "./LabeledAudioOutputsOwner";
16
+ export declare class RootBoxAdapter implements BoxAdapter, LabeledAudioOutputsOwner {
16
17
  #private;
17
18
  constructor(context: BoxAdaptersContext, box: RootBox);
18
19
  get uuid(): UUID.Bytes;
@@ -26,6 +27,7 @@ export declare class RootBoxAdapter implements BoxAdapter {
26
27
  get pianoMode(): PianoModeAdapter;
27
28
  get created(): Date;
28
29
  get midiOutputDevices(): ReadonlyArray<MIDIOutputBox>;
30
+ labeledAudioOutputs(): Iterable<LabeledAudioOutput>;
29
31
  terminate(): void;
30
32
  }
31
33
  //# sourceMappingURL=RootBoxAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RootBoxAdapter.d.ts","sourceRoot":"","sources":["../src/RootBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAe,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAC,uBAAuB,EAAC,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AAEnD,qBAAa,cAAe,YAAW,UAAU;;gBAQjC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO;IAarD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,GAAG,IAAI,OAAO,CAAmB;IACrC,IAAI,WAAW,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAA2B;IACtF,IAAI,UAAU,IAAI,2BAA2B,CAAC,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAA0B;IACjH,IAAI,KAAK,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAI5C;IACD,IAAI,MAAM,IAAI,uBAAuB,CAGpC;IACD,IAAI,QAAQ,IAAI,kBAAkB,CAGjC;IACD,IAAI,SAAS,IAAI,gBAAgB,CAAyB;IAC1D,IAAI,OAAO,IAAI,IAAI,CAAgD;IACnE,IAAI,iBAAiB,IAAI,aAAa,CAAC,aAAa,CAAC,CAEpD;IAED,SAAS,IAAI,IAAI;CACpB"}
1
+ {"version":3,"file":"RootBoxAdapter.d.ts","sourceRoot":"","sources":["../src/RootBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAuB,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAC,uBAAuB,EAAC,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAC,kBAAkB,EAAE,wBAAwB,EAAC,MAAM,4BAA4B,CAAA;AAEvF,qBAAa,cAAe,YAAW,UAAU,EAAE,wBAAwB;;gBAQ3D,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO;IAarD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,GAAG,IAAI,OAAO,CAAmB;IACrC,IAAI,WAAW,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAA2B;IACtF,IAAI,UAAU,IAAI,2BAA2B,CAAC,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAA0B;IACjH,IAAI,KAAK,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAI5C;IACD,IAAI,MAAM,IAAI,uBAAuB,CAGpC;IACD,IAAI,QAAQ,IAAI,kBAAkB,CAGjC;IACD,IAAI,SAAS,IAAI,gBAAgB,CAAyB;IAC1D,IAAI,OAAO,IAAI,IAAI,CAAgD;IACnE,IAAI,iBAAiB,IAAI,aAAa,CAAC,aAAa,CAAC,CAEpD;IAEC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAUrD,SAAS,IAAI,IAAI;CACpB"}
@@ -11,7 +11,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
11
11
  };
12
12
  var _RootBoxAdapter_context, _RootBoxAdapter_box, _RootBoxAdapter_audioUnits, _RootBoxAdapter_audioBusses, _RootBoxAdapter_pianoMode;
13
13
  import { MIDIOutputBox } from "@opendaw/studio-boxes";
14
- import { asInstanceOf } from "@opendaw/lib-std";
14
+ import { asInstanceOf, Option } from "@opendaw/lib-std";
15
15
  import { AudioBusBoxAdapter } from "./audio-unit/AudioBusBoxAdapter";
16
16
  import { Pointers } from "@opendaw/studio-enums";
17
17
  import { IndexedBoxAdapterCollection } from "./IndexedBoxAdapterCollection";
@@ -56,6 +56,15 @@ export class RootBoxAdapter {
56
56
  get midiOutputDevices() {
57
57
  return __classPrivateFieldGet(this, _RootBoxAdapter_box, "f").outputMidiDevices.pointerHub.incoming().map(({ box }) => asInstanceOf(box, MIDIOutputBox));
58
58
  }
59
+ *labeledAudioOutputs() {
60
+ for (const audioUnit of __classPrivateFieldGet(this, _RootBoxAdapter_audioUnits, "f").adapters()) {
61
+ yield {
62
+ label: audioUnit.label,
63
+ address: audioUnit.address,
64
+ children: () => Option.wrap(audioUnit.labeledAudioOutputs())
65
+ };
66
+ }
67
+ }
59
68
  terminate() { __classPrivateFieldGet(this, _RootBoxAdapter_audioUnits, "f").terminate(); }
60
69
  }
61
70
  _RootBoxAdapter_context = new WeakMap(), _RootBoxAdapter_box = new WeakMap(), _RootBoxAdapter_audioUnits = new WeakMap(), _RootBoxAdapter_audioBusses = new WeakMap(), _RootBoxAdapter_pianoMode = new WeakMap();
@@ -0,0 +1,5 @@
1
+ export declare const TempoRange: {
2
+ readonly min: 30;
3
+ readonly max: 1000;
4
+ };
5
+ //# sourceMappingURL=TempoRange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TempoRange.d.ts","sourceRoot":"","sources":["../src/TempoRange.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;CAAgC,CAAA"}
@@ -0,0 +1 @@
1
+ export const TempoRange = { min: 30, max: 1000 };
@@ -2,8 +2,6 @@ import { BoxGraph } from "@opendaw/lib-box";
2
2
  import { Attempt, int } from "@opendaw/lib-std";
3
3
  export declare namespace Validator {
4
4
  const isTimeSignatureValid: (numerator: int, denominator: int) => Attempt<[int, int], string>;
5
- const MIN_BPM = 30;
6
- const MAX_BPM = 1000;
7
5
  const clampBpm: (bpm: number) => number;
8
6
  const hasOverlappingRegions: (boxGraph: BoxGraph) => boolean;
9
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../src/Validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAS,OAAO,EAAmB,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAItE,yBAAiB,SAAS,CAAC;IAChB,MAAM,oBAAoB,GAAI,WAAW,GAAG,EAAE,aAAa,GAAG,KAAG,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,CAQjG,CAAA;IAEM,MAAM,OAAO,KAAO,CAAA;IACpB,MAAM,OAAO,OAAS,CAAA;IAEtB,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,MAAqE,CAAA;IAErG,MAAM,qBAAqB,GAAI,UAAU,QAAQ,KAAG,OAe3C,CAAA;CACnB"}
1
+ {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../src/Validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAS,OAAO,EAAmB,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAKtE,yBAAiB,SAAS,CAAC;IAChB,MAAM,oBAAoB,GAAI,WAAW,GAAG,EAAE,aAAa,GAAG,KAAG,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,CAQjG,CAAA;IAEM,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,MAE5B,CAAA;IAEJ,MAAM,qBAAqB,GAAI,UAAU,QAAQ,KAAG,OAe3C,CAAA;CACnB"}
package/dist/Validator.js CHANGED
@@ -2,6 +2,7 @@ import { AudioRegionBox } from "@opendaw/studio-boxes";
2
2
  import { Arrays, Attempts, clamp } from "@opendaw/lib-std";
3
3
  import { UnionBoxTypes } from "./unions";
4
4
  import { TimeBase } from "@opendaw/lib-dsp";
5
+ import { TempoRange } from "./TempoRange";
5
6
  export var Validator;
6
7
  (function (Validator) {
7
8
  Validator.isTimeSignatureValid = (numerator, denominator) => {
@@ -13,9 +14,9 @@ export var Validator;
13
14
  }
14
15
  return Attempts.ok([numerator, denominator]);
15
16
  };
16
- Validator.MIN_BPM = 30.0;
17
- Validator.MAX_BPM = 1000.0;
18
- Validator.clampBpm = (bpm) => Number.isFinite(bpm) ? clamp(bpm, Validator.MIN_BPM, Validator.MAX_BPM) : 120.0;
17
+ Validator.clampBpm = (bpm) => Number.isFinite(bpm)
18
+ ? clamp(bpm, TempoRange.min, TempoRange.max)
19
+ : 120.0;
19
20
  Validator.hasOverlappingRegions = (boxGraph) => boxGraph.boxes()
20
21
  .some(box => box.accept({
21
22
  visitTrackBox: (box) => {
@@ -0,0 +1,18 @@
1
+ import { bpm, ppqn, seconds, TempoMap } from "@opendaw/lib-dsp";
2
+ import { Observer, Subscription } from "@opendaw/lib-std";
3
+ import { TimelineBoxAdapter } from "./timeline/TimelineBoxAdapter";
4
+ /**
5
+ * TempoMap implementation that handles varying tempo (tempo automation).
6
+ * Steps through at TempoChangeGrid intervals to match BlockRenderer behavior.
7
+ */
8
+ export declare class VaryingTempoMap implements TempoMap {
9
+ #private;
10
+ constructor(adapter: TimelineBoxAdapter);
11
+ getTempoAt(position: ppqn): bpm;
12
+ ppqnToSeconds(position: ppqn): seconds;
13
+ secondsToPPQN(time: seconds): ppqn;
14
+ intervalToSeconds(fromPPQN: ppqn, toPPQN: ppqn): seconds;
15
+ intervalToPPQN(fromSeconds: seconds, toSeconds: seconds): ppqn;
16
+ subscribe(observer: Observer<TempoMap>): Subscription;
17
+ }
18
+ //# sourceMappingURL=VaryingTempoMap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VaryingTempoMap.d.ts","sourceRoot":"","sources":["../src/VaryingTempoMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAQ,OAAO,EAAmB,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAC,QAAQ,EAAgB,YAAY,EAAa,MAAM,kBAAkB,CAAA;AACjF,OAAO,EAAC,kBAAkB,EAAC,MAAM,+BAA+B,CAAA;AAEhE;;;GAGG;AACH,qBAAa,eAAgB,YAAW,QAAQ;;gBAGhC,OAAO,EAAE,kBAAkB;IAIvC,UAAU,CAAC,QAAQ,EAAE,IAAI,GAAG,GAAG;IAQ/B,aAAa,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO;IAItC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IA+BlC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO;IAwBxD,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAQ9D,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY;CAQxD"}
@@ -0,0 +1,105 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _VaryingTempoMap_instances, _VaryingTempoMap_adapter, _VaryingTempoMap_absoluteSecondsToPPQN;
13
+ import { PPQN, TempoChangeGrid } from "@opendaw/lib-dsp";
14
+ import { quantizeCeil, Terminator } from "@opendaw/lib-std";
15
+ /**
16
+ * TempoMap implementation that handles varying tempo (tempo automation).
17
+ * Steps through at TempoChangeGrid intervals to match BlockRenderer behavior.
18
+ */
19
+ export class VaryingTempoMap {
20
+ constructor(adapter) {
21
+ _VaryingTempoMap_instances.add(this);
22
+ _VaryingTempoMap_adapter.set(this, void 0);
23
+ __classPrivateFieldSet(this, _VaryingTempoMap_adapter, adapter, "f");
24
+ }
25
+ getTempoAt(position) {
26
+ const storageBpm = __classPrivateFieldGet(this, _VaryingTempoMap_adapter, "f").box.bpm.getValue();
27
+ return __classPrivateFieldGet(this, _VaryingTempoMap_adapter, "f").tempoTrackEvents.mapOr(collection => collection.valueAt(position, storageBpm), storageBpm);
28
+ }
29
+ ppqnToSeconds(position) {
30
+ return this.intervalToSeconds(0, position);
31
+ }
32
+ secondsToPPQN(time) {
33
+ return __classPrivateFieldGet(this, _VaryingTempoMap_instances, "m", _VaryingTempoMap_absoluteSecondsToPPQN).call(this, time);
34
+ }
35
+ intervalToSeconds(fromPPQN, toPPQN) {
36
+ if (fromPPQN >= toPPQN) {
37
+ return 0.0;
38
+ }
39
+ const storageBpm = __classPrivateFieldGet(this, _VaryingTempoMap_adapter, "f").box.bpm.getValue();
40
+ const tempoEvents = __classPrivateFieldGet(this, _VaryingTempoMap_adapter, "f").tempoTrackEvents;
41
+ if (tempoEvents.isEmpty()) {
42
+ return PPQN.pulsesToSeconds(toPPQN - fromPPQN, storageBpm);
43
+ }
44
+ const collection = tempoEvents.unwrap();
45
+ if (collection.events.isEmpty()) {
46
+ return PPQN.pulsesToSeconds(toPPQN - fromPPQN, storageBpm);
47
+ }
48
+ let totalSeconds = 0.0;
49
+ let currentPPQN = fromPPQN;
50
+ while (currentPPQN < toPPQN) {
51
+ const currentBpm = collection.valueAt(currentPPQN, storageBpm);
52
+ const nextGrid = quantizeCeil(currentPPQN, TempoChangeGrid);
53
+ const segmentEnd = nextGrid <= currentPPQN ? nextGrid + TempoChangeGrid : nextGrid;
54
+ const actualEnd = Math.min(segmentEnd, toPPQN);
55
+ totalSeconds += PPQN.pulsesToSeconds(actualEnd - currentPPQN, currentBpm);
56
+ currentPPQN = actualEnd;
57
+ }
58
+ return totalSeconds;
59
+ }
60
+ intervalToPPQN(fromSeconds, toSeconds) {
61
+ if (fromSeconds >= toSeconds) {
62
+ return 0.0;
63
+ }
64
+ // Find PPQN positions for both absolute times, return the difference
65
+ const fromPPQN = __classPrivateFieldGet(this, _VaryingTempoMap_instances, "m", _VaryingTempoMap_absoluteSecondsToPPQN).call(this, fromSeconds);
66
+ const toPPQN = __classPrivateFieldGet(this, _VaryingTempoMap_instances, "m", _VaryingTempoMap_absoluteSecondsToPPQN).call(this, toSeconds);
67
+ return toPPQN - fromPPQN;
68
+ }
69
+ subscribe(observer) {
70
+ const terminator = new Terminator();
71
+ terminator.ownAll(__classPrivateFieldGet(this, _VaryingTempoMap_adapter, "f").box.bpm.subscribe(() => observer(this)), __classPrivateFieldGet(this, _VaryingTempoMap_adapter, "f").catchupAndSubscribeTempoAutomation(() => observer(this)));
72
+ return terminator;
73
+ }
74
+ }
75
+ _VaryingTempoMap_adapter = new WeakMap(), _VaryingTempoMap_instances = new WeakSet(), _VaryingTempoMap_absoluteSecondsToPPQN = function _VaryingTempoMap_absoluteSecondsToPPQN(targetSeconds) {
76
+ if (targetSeconds <= 0) {
77
+ return 0.0;
78
+ }
79
+ const storageBpm = __classPrivateFieldGet(this, _VaryingTempoMap_adapter, "f").box.bpm.getValue();
80
+ const tempoEvents = __classPrivateFieldGet(this, _VaryingTempoMap_adapter, "f").tempoTrackEvents;
81
+ if (tempoEvents.isEmpty()) {
82
+ return PPQN.secondsToPulses(targetSeconds, storageBpm);
83
+ }
84
+ const collection = tempoEvents.unwrap();
85
+ if (collection.events.isEmpty()) {
86
+ return PPQN.secondsToPulses(targetSeconds, storageBpm);
87
+ }
88
+ let accumulatedSeconds = 0.0;
89
+ let accumulatedPPQN = 0.0;
90
+ while (accumulatedSeconds < targetSeconds) {
91
+ const currentBpm = collection.valueAt(accumulatedPPQN, storageBpm);
92
+ const nextGrid = quantizeCeil(accumulatedPPQN, TempoChangeGrid);
93
+ const segmentEnd = nextGrid <= accumulatedPPQN ? nextGrid + TempoChangeGrid : nextGrid;
94
+ const segmentPPQN = segmentEnd - accumulatedPPQN;
95
+ const segmentSeconds = PPQN.pulsesToSeconds(segmentPPQN, currentBpm);
96
+ if (accumulatedSeconds + segmentSeconds >= targetSeconds) {
97
+ const remainingSeconds = targetSeconds - accumulatedSeconds;
98
+ accumulatedPPQN += PPQN.secondsToPulses(remainingSeconds, currentBpm);
99
+ break;
100
+ }
101
+ accumulatedSeconds += segmentSeconds;
102
+ accumulatedPPQN = segmentEnd;
103
+ }
104
+ return accumulatedPPQN;
105
+ };
@@ -39,7 +39,7 @@ export class AudioFileBoxAdapter {
39
39
  }
40
40
  else if (state.type === "error") {
41
41
  subscription.terminate();
42
- reject(state.reason);
42
+ reject(new Error(state.reason));
43
43
  }
44
44
  });
45
45
  return promise;
@@ -2,10 +2,11 @@ import { Address, BooleanField, StringField } from "@opendaw/lib-box";
2
2
  import { Observer, Subscription, UUID } from "@opendaw/lib-std";
3
3
  import { AudioBusBox } from "@opendaw/studio-boxes";
4
4
  import { DeviceBoxAdapter, DeviceHost } from "../DeviceAdapter";
5
+ import { LabeledAudioOutput, LabeledAudioOutputsOwner } from "../LabeledAudioOutputsOwner";
5
6
  import { BoxAdaptersContext } from "../BoxAdaptersContext";
6
7
  import { AudioUnitBoxAdapter } from "./AudioUnitBoxAdapter";
7
8
  import { IconSymbol } from "@opendaw/studio-enums";
8
- export declare class AudioBusBoxAdapter implements DeviceBoxAdapter {
9
+ export declare class AudioBusBoxAdapter implements DeviceBoxAdapter, LabeledAudioOutputsOwner {
9
10
  #private;
10
11
  readonly type = "bus";
11
12
  readonly accepts = "audio";
@@ -22,6 +23,7 @@ export declare class AudioBusBoxAdapter implements DeviceBoxAdapter {
22
23
  get iconSymbol(): IconSymbol;
23
24
  deviceHost(): DeviceHost;
24
25
  audioUnitBoxAdapter(): AudioUnitBoxAdapter;
26
+ labeledAudioOutputs(): Iterable<LabeledAudioOutput>;
25
27
  terminate(): void;
26
28
  toString(): string;
27
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AudioBusBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/audio-unit/AudioBusBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAe,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAChF,OAAO,EAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAU,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAEhD,qBAAa,kBAAmB,YAAW,gBAAgB;;IACvD,QAAQ,CAAC,IAAI,SAAQ;IACrB,QAAQ,CAAC,OAAO,WAAU;gBAKd,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW;IAKzD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAK3D,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,GAAG,IAAI,WAAW,CAAmB;IACzC,IAAI,YAAY,IAAI,YAAY,CAA2B;IAC3D,IAAI,cAAc,IAAI,YAAY,CAA6B;IAC/D,IAAI,SAAS,IAAI,WAAW,CAAwB;IACpD,IAAI,UAAU,IAAI,WAAW,CAAyB;IACtD,IAAI,UAAU,IAAI,WAAW,CAAyB;IACtD,IAAI,UAAU,IAAI,UAAU,CAAuE;IAEnG,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAE1C,SAAS,IAAI,IAAI;IAEjB,QAAQ,IAAI,MAAM;CACrB"}
1
+ {"version":3,"file":"AudioBusBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/audio-unit/AudioBusBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAe,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAChF,OAAO,EAAC,QAAQ,EAAU,YAAY,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAC,gBAAgB,EAAE,UAAU,EAAU,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAC,kBAAkB,EAAE,wBAAwB,EAAC,MAAM,6BAA6B,CAAA;AACxF,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAA;AAEhD,qBAAa,kBAAmB,YAAW,gBAAgB,EAAE,wBAAwB;;IACjF,QAAQ,CAAC,IAAI,SAAQ;IACrB,QAAQ,CAAC,OAAO,WAAU;gBAKd,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW;IAKzD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAK3D,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAgC;IACtD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,GAAG,IAAI,WAAW,CAAmB;IACzC,IAAI,YAAY,IAAI,YAAY,CAA2B;IAC3D,IAAI,cAAc,IAAI,YAAY,CAA6B;IAC/D,IAAI,SAAS,IAAI,WAAW,CAAwB;IACpD,IAAI,UAAU,IAAI,WAAW,CAAyB;IACtD,IAAI,UAAU,IAAI,WAAW,CAAyB;IACtD,IAAI,UAAU,IAAI,UAAU,CAAuE;IAEnG,UAAU,IAAI,UAAU;IAKxB,mBAAmB,IAAI,mBAAmB;IAEzC,mBAAmB,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAIpD,SAAS,IAAI,IAAI;IAEjB,QAAQ,IAAI,MAAM;CACrB"}
@@ -11,6 +11,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
11
11
  };
12
12
  var _AudioBusBoxAdapter_context, _AudioBusBoxAdapter_box;
13
13
  import { Propagation } from "@opendaw/lib-box";
14
+ import { Option } from "@opendaw/lib-std";
14
15
  import { Devices } from "../DeviceAdapter";
15
16
  import { IconSymbol } from "@opendaw/studio-enums";
16
17
  export class AudioBusBoxAdapter {
@@ -40,6 +41,9 @@ export class AudioBusBoxAdapter {
40
41
  .adapterFor(__classPrivateFieldGet(this, _AudioBusBoxAdapter_box, "f").output.targetVertex.unwrap("No AudioUnitBox found").box, Devices.isHost);
41
42
  }
42
43
  audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }
44
+ *labeledAudioOutputs() {
45
+ yield { address: this.address, label: this.labelField.getValue(), children: () => Option.None };
46
+ }
43
47
  terminate() { }
44
48
  toString() { return `{${this.constructor.name}}`; }
45
49
  }