@opendaw/studio-adapters 0.0.6
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.
- package/README.md +1 -0
- package/dist/AudioData.d.ts +7 -0
- package/dist/AudioData.d.ts.map +1 -0
- package/dist/AudioData.js +1 -0
- package/dist/AudioFileBoxAdapter.d.ts +22 -0
- package/dist/AudioFileBoxAdapter.d.ts.map +1 -0
- package/dist/AudioFileBoxAdapter.js +19 -0
- package/dist/AudioLoader.d.ts +26 -0
- package/dist/AudioLoader.d.ts.map +1 -0
- package/dist/AudioLoader.js +1 -0
- package/dist/AudioMetaData.d.ts +8 -0
- package/dist/AudioMetaData.d.ts.map +1 -0
- package/dist/AudioMetaData.js +1 -0
- package/dist/AudioSample.d.ts +5 -0
- package/dist/AudioSample.d.ts.map +1 -0
- package/dist/AudioSample.js +1 -0
- package/dist/AutomatableParameterFieldAdapter.d.ts +35 -0
- package/dist/AutomatableParameterFieldAdapter.d.ts.map +1 -0
- package/dist/AutomatableParameterFieldAdapter.js +161 -0
- package/dist/BoxAdapter.d.ts +7 -0
- package/dist/BoxAdapter.d.ts.map +1 -0
- package/dist/BoxAdapter.js +1 -0
- package/dist/BoxAdapterCollection.d.ts +19 -0
- package/dist/BoxAdapterCollection.d.ts.map +1 -0
- package/dist/BoxAdapterCollection.js +35 -0
- package/dist/BoxAdapters.d.ts +11 -0
- package/dist/BoxAdapters.d.ts.map +1 -0
- package/dist/BoxAdapters.js +129 -0
- package/dist/BoxAdaptersContext.d.ts +24 -0
- package/dist/BoxAdaptersContext.d.ts.map +1 -0
- package/dist/BoxAdaptersContext.js +1 -0
- package/dist/ClipNotifications.d.ts +14 -0
- package/dist/ClipNotifications.d.ts.map +1 -0
- package/dist/ClipNotifications.js +1 -0
- package/dist/ClipSequencing.d.ts +12 -0
- package/dist/ClipSequencing.d.ts.map +1 -0
- package/dist/ClipSequencing.js +1 -0
- package/dist/EngineProcessorOptions.d.ts +18 -0
- package/dist/EngineProcessorOptions.d.ts.map +1 -0
- package/dist/EngineProcessorOptions.js +26 -0
- package/dist/EngineStateSchema.d.ts +7 -0
- package/dist/EngineStateSchema.d.ts.map +1 -0
- package/dist/EngineStateSchema.js +5 -0
- package/dist/FieldAdapter.d.ts +26 -0
- package/dist/FieldAdapter.d.ts.map +1 -0
- package/dist/FieldAdapter.js +59 -0
- package/dist/IconSymbol.d.ts +119 -0
- package/dist/IconSymbol.d.ts.map +1 -0
- package/dist/IconSymbol.js +119 -0
- package/dist/IndexComparator.d.ts +3 -0
- package/dist/IndexComparator.d.ts.map +1 -0
- package/dist/IndexComparator.js +11 -0
- package/dist/ManadatoryBoxes.d.ts +9 -0
- package/dist/ManadatoryBoxes.d.ts.map +1 -0
- package/dist/ManadatoryBoxes.js +1 -0
- package/dist/NoteBroadcaster.d.ts +14 -0
- package/dist/NoteBroadcaster.d.ts.map +1 -0
- package/dist/NoteBroadcaster.js +23 -0
- package/dist/NoteSender.d.ts +9 -0
- package/dist/NoteSender.d.ts.map +1 -0
- package/dist/NoteSender.js +15 -0
- package/dist/NoteStreamReceiver.d.ts +12 -0
- package/dist/NoteStreamReceiver.d.ts.map +1 -0
- package/dist/NoteStreamReceiver.js +23 -0
- package/dist/ParameterAdapterSet.d.ts +14 -0
- package/dist/ParameterAdapterSet.d.ts.map +1 -0
- package/dist/ParameterAdapterSet.js +27 -0
- package/dist/ParameterFieldAdapters.d.ts +11 -0
- package/dist/ParameterFieldAdapters.d.ts.map +1 -0
- package/dist/ParameterFieldAdapters.js +13 -0
- package/dist/PeakMeterProcessorOptions.d.ts +8 -0
- package/dist/PeakMeterProcessorOptions.d.ts.map +1 -0
- package/dist/PeakMeterProcessorOptions.js +1 -0
- package/dist/PianoModeAdapter.d.ts +15 -0
- package/dist/PianoModeAdapter.d.ts.map +1 -0
- package/dist/PianoModeAdapter.js +28 -0
- package/dist/ProjectDecoder.d.ts +13 -0
- package/dist/ProjectDecoder.d.ts.map +1 -0
- package/dist/ProjectDecoder.js +27 -0
- package/dist/RecordingProcessorOptions.d.ts +4 -0
- package/dist/RecordingProcessorOptions.d.ts.map +1 -0
- package/dist/RecordingProcessorOptions.js +1 -0
- package/dist/RingBuffer.d.ts +19 -0
- package/dist/RingBuffer.d.ts.map +1 -0
- package/dist/RingBuffer.js +92 -0
- package/dist/RootBoxAdapter.d.ts +30 -0
- package/dist/RootBoxAdapter.d.ts.map +1 -0
- package/dist/RootBoxAdapter.js +43 -0
- package/dist/SortedBoxAdapterCollection.d.ts +29 -0
- package/dist/SortedBoxAdapterCollection.d.ts.map +1 -0
- package/dist/SortedBoxAdapterCollection.js +100 -0
- package/dist/UnionAdapterTypes.d.ts +15 -0
- package/dist/UnionAdapterTypes.d.ts.map +1 -0
- package/dist/UnionAdapterTypes.js +5 -0
- package/dist/UpdateClockRate.d.ts +2 -0
- package/dist/UpdateClockRate.d.ts.map +1 -0
- package/dist/UpdateClockRate.js +2 -0
- package/dist/audio-unit/AudioBusBoxAdapter.d.ts +28 -0
- package/dist/audio-unit/AudioBusBoxAdapter.d.ts.map +1 -0
- package/dist/audio-unit/AudioBusBoxAdapter.js +33 -0
- package/dist/audio-unit/AudioUnitBoxAdapter.d.ts +55 -0
- package/dist/audio-unit/AudioUnitBoxAdapter.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitBoxAdapter.js +97 -0
- package/dist/audio-unit/AudioUnitInput.d.ts +21 -0
- package/dist/audio-unit/AudioUnitInput.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitInput.js +74 -0
- package/dist/audio-unit/AudioUnitInputAdapter.d.ts +4 -0
- package/dist/audio-unit/AudioUnitInputAdapter.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitInputAdapter.js +1 -0
- package/dist/audio-unit/AudioUnitOutput.d.ts +14 -0
- package/dist/audio-unit/AudioUnitOutput.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitOutput.js +42 -0
- package/dist/audio-unit/AudioUnitTracks.d.ts +21 -0
- package/dist/audio-unit/AudioUnitTracks.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitTracks.js +62 -0
- package/dist/audio-unit/AuxSendBoxAdapter.d.ts +23 -0
- package/dist/audio-unit/AuxSendBoxAdapter.d.ts.map +1 -0
- package/dist/audio-unit/AuxSendBoxAdapter.js +58 -0
- package/dist/devices/audio-effects/DelayDeviceBoxAdapter.d.ts +35 -0
- package/dist/devices/audio-effects/DelayDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/DelayDeviceBoxAdapter.js +50 -0
- package/dist/devices/audio-effects/ModularDeviceBoxAdapter.d.ts +31 -0
- package/dist/devices/audio-effects/ModularDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/ModularDeviceBoxAdapter.js +38 -0
- package/dist/devices/audio-effects/RevampDeviceBoxAdapter.d.ts +52 -0
- package/dist/devices/audio-effects/RevampDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/RevampDeviceBoxAdapter.js +66 -0
- package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts +35 -0
- package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.js +44 -0
- package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts +33 -0
- package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.js +41 -0
- package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts +32 -0
- package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/NanoDeviceBoxAdapter.js +40 -0
- package/dist/devices/instruments/Playfield/Gate.d.ts +6 -0
- package/dist/devices/instruments/Playfield/Gate.d.ts.map +1 -0
- package/dist/devices/instruments/Playfield/Gate.js +6 -0
- package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts +63 -0
- package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.js +128 -0
- package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts +35 -0
- package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.js +40 -0
- package/dist/devices/instruments/TapeDeviceBoxAdapter.d.ts +34 -0
- package/dist/devices/instruments/TapeDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/TapeDeviceBoxAdapter.js +42 -0
- package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.d.ts +39 -0
- package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.js +47 -0
- package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.d.ts +37 -0
- package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.js +51 -0
- package/dist/devices/midi-effects/PitchDeviceBoxAdapter.d.ts +32 -0
- package/dist/devices/midi-effects/PitchDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/midi-effects/PitchDeviceBoxAdapter.js +39 -0
- package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.d.ts +28 -0
- package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.js +35 -0
- package/dist/devices.d.ts +68 -0
- package/dist/devices.d.ts.map +1 -0
- package/dist/devices.js +55 -0
- package/dist/editing/UserEditing.d.ts +15 -0
- package/dist/editing/UserEditing.d.ts.map +1 -0
- package/dist/editing/UserEditing.js +39 -0
- package/dist/editing/UserEditingManager.d.ts +14 -0
- package/dist/editing/UserEditingManager.d.ts.map +1 -0
- package/dist/editing/UserEditingManager.js +23 -0
- package/dist/grooves/GrooveBoxAdapter.d.ts +10 -0
- package/dist/grooves/GrooveBoxAdapter.d.ts.map +1 -0
- package/dist/grooves/GrooveBoxAdapter.js +4 -0
- package/dist/grooves/GrooveShuffleBoxAdapter.d.ts +27 -0
- package/dist/grooves/GrooveShuffleBoxAdapter.d.ts.map +1 -0
- package/dist/grooves/GrooveShuffleBoxAdapter.js +43 -0
- package/dist/index.d.ts +98 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +99 -0
- package/dist/modular/abstract.d.ts +30 -0
- package/dist/modular/abstract.d.ts.map +1 -0
- package/dist/modular/abstract.js +39 -0
- package/dist/modular/connection.d.ts +15 -0
- package/dist/modular/connection.d.ts.map +1 -0
- package/dist/modular/connection.js +12 -0
- package/dist/modular/connector.d.ts +21 -0
- package/dist/modular/connector.d.ts.map +1 -0
- package/dist/modular/connector.js +42 -0
- package/dist/modular/modular.d.ts +30 -0
- package/dist/modular/modular.d.ts.map +1 -0
- package/dist/modular/modular.js +68 -0
- package/dist/modular/module.d.ts +21 -0
- package/dist/modular/module.d.ts.map +1 -0
- package/dist/modular/module.js +23 -0
- package/dist/modular/modules/audio-input.d.ts +14 -0
- package/dist/modular/modules/audio-input.d.ts.map +1 -0
- package/dist/modular/modules/audio-input.js +17 -0
- package/dist/modular/modules/audio-output.d.ts +14 -0
- package/dist/modular/modules/audio-output.d.ts.map +1 -0
- package/dist/modular/modules/audio-output.js +17 -0
- package/dist/modular/modules/delay.d.ts +17 -0
- package/dist/modular/modules/delay.d.ts.map +1 -0
- package/dist/modular/modules/delay.js +23 -0
- package/dist/modular/modules/gain.d.ts +17 -0
- package/dist/modular/modules/gain.d.ts.map +1 -0
- package/dist/modular/modules/gain.js +23 -0
- package/dist/modular/modules/multiplier.d.ts +13 -0
- package/dist/modular/modules/multiplier.d.ts.map +1 -0
- package/dist/modular/modules/multiplier.js +19 -0
- package/dist/modular/user-interface.d.ts +21 -0
- package/dist/modular/user-interface.d.ts.map +1 -0
- package/dist/modular/user-interface.js +23 -0
- package/dist/protocols.d.ts +25 -0
- package/dist/protocols.d.ts.map +1 -0
- package/dist/protocols.js +1 -0
- package/dist/selection/FilteredSelection.d.ts +20 -0
- package/dist/selection/FilteredSelection.d.ts.map +1 -0
- package/dist/selection/FilteredSelection.js +58 -0
- package/dist/selection/SelectableVertex.d.ts +4 -0
- package/dist/selection/SelectableVertex.d.ts.map +1 -0
- package/dist/selection/SelectableVertex.js +1 -0
- package/dist/selection/SelectionEntry.d.ts +7 -0
- package/dist/selection/SelectionEntry.d.ts.map +1 -0
- package/dist/selection/SelectionEntry.js +1 -0
- package/dist/selection/VertexSelection.d.ts +29 -0
- package/dist/selection/VertexSelection.d.ts.map +1 -0
- package/dist/selection/VertexSelection.js +120 -0
- package/dist/selection/isVertexOfBox.d.ts +5 -0
- package/dist/selection/isVertexOfBox.d.ts.map +1 -0
- package/dist/selection/isVertexOfBox.js +1 -0
- package/dist/timeline/ClipBoxAdapter.d.ts +38 -0
- package/dist/timeline/ClipBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/ClipBoxAdapter.js +11 -0
- package/dist/timeline/MarkerBoxAdapter.d.ts +24 -0
- package/dist/timeline/MarkerBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/MarkerBoxAdapter.js +41 -0
- package/dist/timeline/MarkerTrackAdapter.d.ts +19 -0
- package/dist/timeline/MarkerTrackAdapter.d.ts.map +1 -0
- package/dist/timeline/MarkerTrackAdapter.js +45 -0
- package/dist/timeline/RegionBoxAdapter.d.ts +48 -0
- package/dist/timeline/RegionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/RegionBoxAdapter.js +12 -0
- package/dist/timeline/RegionEditing.d.ts +7 -0
- package/dist/timeline/RegionEditing.d.ts.map +1 -0
- package/dist/timeline/RegionEditing.js +40 -0
- package/dist/timeline/TimelineBoxAdapter.d.ts +16 -0
- package/dist/timeline/TimelineBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/TimelineBoxAdapter.js +14 -0
- package/dist/timeline/TrackBoxAdapter.d.ts +32 -0
- package/dist/timeline/TrackBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/TrackBoxAdapter.js +167 -0
- package/dist/timeline/TrackClips.d.ts +16 -0
- package/dist/timeline/TrackClips.d.ts.map +1 -0
- package/dist/timeline/TrackClips.js +26 -0
- package/dist/timeline/TrackRegions.d.ts +17 -0
- package/dist/timeline/TrackRegions.d.ts.map +1 -0
- package/dist/timeline/TrackRegions.js +41 -0
- package/dist/timeline/TrackType.d.ts +12 -0
- package/dist/timeline/TrackType.d.ts.map +1 -0
- package/dist/timeline/TrackType.js +37 -0
- package/dist/timeline/clip/AudioClipBoxAdapter.d.ts +39 -0
- package/dist/timeline/clip/AudioClipBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/clip/AudioClipBoxAdapter.js +87 -0
- package/dist/timeline/clip/NoteClipBoxAdapter.d.ts +39 -0
- package/dist/timeline/clip/NoteClipBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/clip/NoteClipBoxAdapter.js +92 -0
- package/dist/timeline/clip/ValueClipBoxAdapter.d.ts +40 -0
- package/dist/timeline/clip/ValueClipBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/clip/ValueClipBoxAdapter.js +98 -0
- package/dist/timeline/collection/NoteEventCollectionBoxAdapter.d.ts +40 -0
- package/dist/timeline/collection/NoteEventCollectionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/collection/NoteEventCollectionBoxAdapter.js +136 -0
- package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts +33 -0
- package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/collection/ValueEventCollectionBoxAdapter.js +139 -0
- package/dist/timeline/event/InterpolationFieldAdapter.d.ts +8 -0
- package/dist/timeline/event/InterpolationFieldAdapter.d.ts.map +1 -0
- package/dist/timeline/event/InterpolationFieldAdapter.js +47 -0
- package/dist/timeline/event/NoteEventBoxAdapter.d.ts +45 -0
- package/dist/timeline/event/NoteEventBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/event/NoteEventBoxAdapter.js +106 -0
- package/dist/timeline/event/ValueEventBoxAdapter.d.ts +39 -0
- package/dist/timeline/event/ValueEventBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/event/ValueEventBoxAdapter.js +113 -0
- package/dist/timeline/region/AudioRegionBoxAdapter.d.ts +53 -0
- package/dist/timeline/region/AudioRegionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/region/AudioRegionBoxAdapter.js +143 -0
- package/dist/timeline/region/NoteRegionBoxAdapter.d.ts +53 -0
- package/dist/timeline/region/NoteRegionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/region/NoteRegionBoxAdapter.js +186 -0
- package/dist/timeline/region/ValueRegionBoxAdapter.d.ts +59 -0
- package/dist/timeline/region/ValueRegionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/region/ValueRegionBoxAdapter.js +193 -0
- package/dist/unions.d.ts +11 -0
- package/dist/unions.d.ts.map +1 -0
- package/dist/unions.js +17 -0
- package/package.json +38 -0
package/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
This package is part of the openDAW SDK
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AudioData.d.ts","sourceRoot":"","sources":["../src/AudioData.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;CACtC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { AudioFileBox } from "@opendaw/studio-boxes";
|
2
|
+
import { Option, UUID } from "@opendaw/lib-std";
|
3
|
+
import { Peaks } from "@opendaw/lib-fusion";
|
4
|
+
import { AudioData } from "./AudioData";
|
5
|
+
import { Address } from "@opendaw/lib-box";
|
6
|
+
import { AudioLoader } from "./AudioLoader";
|
7
|
+
import { BoxAdaptersContext } from "./BoxAdaptersContext";
|
8
|
+
import { BoxAdapter } from "./BoxAdapter";
|
9
|
+
export declare class AudioFileBoxAdapter implements BoxAdapter {
|
10
|
+
#private;
|
11
|
+
constructor(context: BoxAdaptersContext, box: AudioFileBox);
|
12
|
+
get box(): AudioFileBox;
|
13
|
+
get uuid(): UUID.Format;
|
14
|
+
get address(): Address;
|
15
|
+
get startInSeconds(): number;
|
16
|
+
get endInSeconds(): number;
|
17
|
+
get data(): Option<AudioData>;
|
18
|
+
get peaks(): Option<Peaks>;
|
19
|
+
getOrCreateAudioLoader(): AudioLoader;
|
20
|
+
terminate(): void;
|
21
|
+
}
|
22
|
+
//# sourceMappingURL=AudioFileBoxAdapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AudioFileBoxAdapter.d.ts","sourceRoot":"","sources":["../src/AudioFileBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAA;AACzC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AACzC,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,qBAAa,mBAAoB,YAAW,UAAU;;gBAItC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,YAAY;IAK1D,IAAI,GAAG,IAAI,YAAY,CAAmB;IAC1C,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAgC;IACvD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,cAAc,IAAI,MAAM,CAA6C;IACzE,IAAI,YAAY,IAAI,MAAM,CAA2C;IACrE,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,CAA4C;IACzE,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAA6C;IAEvE,sBAAsB,IAAI,WAAW;IAIrC,SAAS,IAAI,IAAI;CACpB"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
export class AudioFileBoxAdapter {
|
2
|
+
#context;
|
3
|
+
#box;
|
4
|
+
constructor(context, box) {
|
5
|
+
this.#context = context;
|
6
|
+
this.#box = box;
|
7
|
+
}
|
8
|
+
get box() { return this.#box; }
|
9
|
+
get uuid() { return this.#box.address.uuid; }
|
10
|
+
get address() { return this.#box.address; }
|
11
|
+
get startInSeconds() { return this.#box.startInSeconds.getValue(); }
|
12
|
+
get endInSeconds() { return this.#box.endInSeconds.getValue(); }
|
13
|
+
get data() { return this.getOrCreateAudioLoader().data; }
|
14
|
+
get peaks() { return this.getOrCreateAudioLoader().peaks; }
|
15
|
+
getOrCreateAudioLoader() {
|
16
|
+
return this.#context.audioManager.getOrCreate(this.#box.address.uuid);
|
17
|
+
}
|
18
|
+
terminate() { }
|
19
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import { AudioData } from "./AudioData";
|
2
|
+
import { Peaks } from "@opendaw/lib-fusion";
|
3
|
+
import { Observer, Option, Subscription, unitValue, UUID } from "@opendaw/lib-std";
|
4
|
+
export interface AudioLoaderManager {
|
5
|
+
getOrCreate(uuid: UUID.Format): AudioLoader;
|
6
|
+
invalidate(uuid: UUID.Format): void;
|
7
|
+
}
|
8
|
+
export interface AudioLoader {
|
9
|
+
readonly data: Option<AudioData>;
|
10
|
+
readonly peaks: Option<Peaks>;
|
11
|
+
readonly uuid: UUID.Format;
|
12
|
+
readonly state: AudioLoaderState;
|
13
|
+
subscribe(observer: Observer<AudioLoaderState>): Subscription;
|
14
|
+
}
|
15
|
+
export type AudioLoaderState = {
|
16
|
+
type: "idle";
|
17
|
+
} | {
|
18
|
+
type: "progress";
|
19
|
+
progress: unitValue;
|
20
|
+
} | {
|
21
|
+
type: "error";
|
22
|
+
reason: string;
|
23
|
+
} | {
|
24
|
+
type: "loaded";
|
25
|
+
};
|
26
|
+
//# sourceMappingURL=AudioLoader.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AudioLoader.d.ts","sourceRoot":"","sources":["../src/AudioLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAA;AACzC,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAEhF,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAA;IAC3C,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;CACtC;AAED,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;IAChC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAA;CAChE;AAED,MAAM,MAAM,gBAAgB,GACtB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AudioMetaData.d.ts","sourceRoot":"","sources":["../src/AudioMetaData.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AudioSample.d.ts","sourceRoot":"","sources":["../src/AudioSample.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAE7C,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import { ControlSourceListener, Observer, Option, Parameter, StringMapping, StringResult, Subscription, Terminable, unitValue, ValueMapping } from "@opendaw/lib-std";
|
2
|
+
import { ppqn } from "@opendaw/lib-dsp";
|
3
|
+
import { Address, PrimitiveField, PrimitiveType, PrimitiveValues } from "@opendaw/lib-box";
|
4
|
+
import { Pointers } from "@opendaw/studio-enums";
|
5
|
+
import { TrackBoxAdapter } from "./timeline/TrackBoxAdapter";
|
6
|
+
import { BoxAdaptersContext } from "./BoxAdaptersContext";
|
7
|
+
export declare class AutomatableParameterFieldAdapter<T extends PrimitiveValues = any> implements Parameter<T>, Terminable {
|
8
|
+
#private;
|
9
|
+
constructor(context: BoxAdaptersContext, field: PrimitiveField<T, any>, valueMapping: ValueMapping<T>, stringMapping: StringMapping<T>, name: string, anchor?: unitValue);
|
10
|
+
registerMidiControl(): Terminable;
|
11
|
+
get field(): PrimitiveField<T, Pointers.Automation>;
|
12
|
+
get valueMapping(): ValueMapping<T>;
|
13
|
+
get stringMapping(): StringMapping<T>;
|
14
|
+
get name(): string;
|
15
|
+
get anchor(): unitValue;
|
16
|
+
get type(): PrimitiveType;
|
17
|
+
get address(): Address;
|
18
|
+
get track(): Option<TrackBoxAdapter>;
|
19
|
+
valueAt(position: ppqn): T;
|
20
|
+
subscribe(observer: Observer<AutomatableParameterFieldAdapter<T>>): Subscription;
|
21
|
+
catchupAndSubscribe(observer: Observer<AutomatableParameterFieldAdapter<T>>): Subscription;
|
22
|
+
catchupAndSubscribeControlSources(observer: ControlSourceListener): Subscription;
|
23
|
+
getValue(): T;
|
24
|
+
setValue(value: T): void;
|
25
|
+
setUnitValue(value: unitValue): void;
|
26
|
+
getUnitValue(): unitValue;
|
27
|
+
getControlledValue(): T;
|
28
|
+
getControlledUnitValue(): unitValue;
|
29
|
+
getControlledPrintValue(): Readonly<StringResult>;
|
30
|
+
getPrintValue(): Readonly<StringResult>;
|
31
|
+
setPrintValue(text: string): void;
|
32
|
+
reset(): void;
|
33
|
+
terminate(): void;
|
34
|
+
}
|
35
|
+
//# sourceMappingURL=AutomatableParameterFieldAdapter.d.ts.map
|
@@ -0,0 +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;IAwD9B,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"}
|
@@ -0,0 +1,161 @@
|
|
1
|
+
import { assert, clamp, Listeners, Notifier, Option, panic, Terminator } from "@opendaw/lib-std";
|
2
|
+
import { Pointers } from "@opendaw/studio-enums";
|
3
|
+
import { TrackBoxAdapter } from "./timeline/TrackBoxAdapter";
|
4
|
+
const ExternalControlTypes = [
|
5
|
+
Pointers.Automation,
|
6
|
+
Pointers.Modulation,
|
7
|
+
Pointers.MidiControl,
|
8
|
+
Pointers.ParameterController
|
9
|
+
];
|
10
|
+
export class AutomatableParameterFieldAdapter {
|
11
|
+
#context;
|
12
|
+
#field;
|
13
|
+
#valueMapping;
|
14
|
+
#stringMapping;
|
15
|
+
#name;
|
16
|
+
#anchor;
|
17
|
+
#terminator = new Terminator();
|
18
|
+
#valueChangeNotifier;
|
19
|
+
#controlSource;
|
20
|
+
#trackBoxAdapter = Option.None;
|
21
|
+
#automationHandle = Option.None;
|
22
|
+
#controlledValue = null;
|
23
|
+
#midiControlled = false;
|
24
|
+
constructor(context, field, valueMapping, stringMapping, name, anchor) {
|
25
|
+
this.#context = context;
|
26
|
+
this.#field = field;
|
27
|
+
this.#valueMapping = valueMapping;
|
28
|
+
this.#stringMapping = stringMapping;
|
29
|
+
this.#name = name;
|
30
|
+
this.#anchor = anchor ?? 0.0;
|
31
|
+
this.#terminator.own(this.#context.parameterFieldAdapters.register(this));
|
32
|
+
this.#valueChangeNotifier = this.#terminator.own(new Notifier());
|
33
|
+
this.#controlSource = new Listeners();
|
34
|
+
this.#terminator.own(this.#field.subscribe(() => this.#valueChangeNotifier.notify(this)));
|
35
|
+
this.#terminator.own(this.#field.pointerHub.catchupAndSubscribeTransactual({
|
36
|
+
onAdd: (pointer) => {
|
37
|
+
this.#controlSource.proxy.onControlSourceAdd(mapPointerToControlSource(pointer.pointerType));
|
38
|
+
pointer.box.accept({
|
39
|
+
visitTrackBox: (box) => {
|
40
|
+
assert(this.#trackBoxAdapter.isEmpty(), "Already assigned");
|
41
|
+
const adapter = this.#context.boxAdapters.adapterFor(box, TrackBoxAdapter);
|
42
|
+
this.#trackBoxAdapter = Option.wrap(adapter);
|
43
|
+
if (this.#context.isMainThread) {
|
44
|
+
this.#automationHandle = Option.wrap(this.#context.liveStreamReceiver
|
45
|
+
.subscribeFloat(this.#field.address, value => {
|
46
|
+
if (this.#controlledValue === value) {
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
this.#controlledValue = value;
|
50
|
+
this.#valueChangeNotifier.notify(this);
|
51
|
+
}));
|
52
|
+
}
|
53
|
+
}
|
54
|
+
});
|
55
|
+
},
|
56
|
+
onRemove: (pointer) => {
|
57
|
+
this.#controlSource.proxy.onControlSourceRemove(mapPointerToControlSource(pointer.pointerType));
|
58
|
+
pointer.box.accept({
|
59
|
+
visitTrackBox: (box) => {
|
60
|
+
assert(this.#trackBoxAdapter.unwrapOrNull()?.address?.equals(box.address) === true, `Unknown ${box}`);
|
61
|
+
this.#trackBoxAdapter = Option.None;
|
62
|
+
if (this.#context.isMainThread) {
|
63
|
+
this.#automationHandle.ifSome(handle => handle.terminate());
|
64
|
+
this.#automationHandle = Option.None;
|
65
|
+
this.#controlledValue = null;
|
66
|
+
this.#valueChangeNotifier.notify(this);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
});
|
70
|
+
}
|
71
|
+
}, ...ExternalControlTypes));
|
72
|
+
/*
|
73
|
+
For debugging: It's not live because floating errors expose false positives,
|
74
|
+
and I am too lazy to implement this in the mappings itself.
|
75
|
+
*/
|
76
|
+
if (field.getValue() !== valueMapping.clamp(field.getValue())) {
|
77
|
+
console.warn(`${name} (${field.getValue()}) is out of bounds`, valueMapping);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
registerMidiControl() {
|
81
|
+
this.#controlSource.proxy.onControlSourceAdd("midi");
|
82
|
+
this.#midiControlled = true;
|
83
|
+
return {
|
84
|
+
terminate: () => {
|
85
|
+
this.#midiControlled = false;
|
86
|
+
this.#controlSource.proxy.onControlSourceRemove("midi");
|
87
|
+
}
|
88
|
+
};
|
89
|
+
}
|
90
|
+
get field() { return this.#field; }
|
91
|
+
get valueMapping() { return this.#valueMapping; }
|
92
|
+
get stringMapping() { return this.#stringMapping; }
|
93
|
+
get name() { return this.#name; }
|
94
|
+
get anchor() { return this.#anchor; }
|
95
|
+
get type() { return this.#field.type; }
|
96
|
+
get address() { return this.#field.address; }
|
97
|
+
get track() { return this.#trackBoxAdapter; }
|
98
|
+
valueAt(position) {
|
99
|
+
const optTrack = this.#trackBoxAdapter;
|
100
|
+
if (optTrack.nonEmpty()) {
|
101
|
+
const track = optTrack.unwrap();
|
102
|
+
if (track.enabled) {
|
103
|
+
return this.valueMapping.y(track.valueAt(position, this.getUnitValue()));
|
104
|
+
}
|
105
|
+
}
|
106
|
+
return this.getValue();
|
107
|
+
}
|
108
|
+
subscribe(observer) { return this.#valueChangeNotifier.subscribe(observer); }
|
109
|
+
catchupAndSubscribe(observer) {
|
110
|
+
observer(this);
|
111
|
+
return this.subscribe(observer);
|
112
|
+
}
|
113
|
+
catchupAndSubscribeControlSources(observer) {
|
114
|
+
if (this.#midiControlled) {
|
115
|
+
observer.onControlSourceAdd("midi");
|
116
|
+
}
|
117
|
+
this.#field.pointerHub.filter(...ExternalControlTypes)
|
118
|
+
.forEach(pointer => observer.onControlSourceAdd(mapPointerToControlSource(pointer.pointerType)));
|
119
|
+
return this.#controlSource.subscribe(observer);
|
120
|
+
}
|
121
|
+
getValue() { return this.#field.getValue(); }
|
122
|
+
setValue(value) { this.#field.setValue(value); }
|
123
|
+
setUnitValue(value) { this.setValue(this.#valueMapping.y(value)); }
|
124
|
+
getUnitValue() { return this.#valueMapping.x(this.getValue()); }
|
125
|
+
getControlledValue() { return this.#valueMapping.y(this.getControlledUnitValue()); }
|
126
|
+
getControlledUnitValue() { return this.#controlledValue ?? this.getUnitValue(); }
|
127
|
+
getControlledPrintValue() { return this.#stringMapping.x(this.getControlledValue()); }
|
128
|
+
getPrintValue() { return this.#stringMapping.x(this.getValue()); }
|
129
|
+
setPrintValue(text) {
|
130
|
+
const result = this.#stringMapping.y(text);
|
131
|
+
if (result.type === "unitValue") {
|
132
|
+
this.setUnitValue(clamp(result.value, 0.0, 1.0));
|
133
|
+
}
|
134
|
+
else if (result.type === "explicit") {
|
135
|
+
this.setValue(this.valueMapping.clamp(result.value));
|
136
|
+
}
|
137
|
+
else {
|
138
|
+
console.debug(`Unknown text input: '${result.value}'`);
|
139
|
+
}
|
140
|
+
}
|
141
|
+
reset() { this.setValue(this.#valueMapping.clamp(this.#field.initValue)); }
|
142
|
+
terminate() {
|
143
|
+
this.#automationHandle.ifSome(handle => handle.terminate());
|
144
|
+
this.#automationHandle = Option.None;
|
145
|
+
this.#terminator.terminate();
|
146
|
+
}
|
147
|
+
}
|
148
|
+
const mapPointerToControlSource = (pointer) => {
|
149
|
+
switch (pointer) {
|
150
|
+
case Pointers.Automation:
|
151
|
+
return "automated";
|
152
|
+
case Pointers.Modulation:
|
153
|
+
return "modulated";
|
154
|
+
case Pointers.MidiControl:
|
155
|
+
return "midi";
|
156
|
+
case Pointers.ParameterController:
|
157
|
+
return "external";
|
158
|
+
default:
|
159
|
+
return panic(`${pointer.toString()} is an unknown pointer type`);
|
160
|
+
}
|
161
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"BoxAdapter.d.ts","sourceRoot":"","sources":["../src/BoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAC,WAAW,EAAE,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAEjD,MAAM,WAAW,UAAW,SAAQ,WAAW,EAAE,UAAU;IACvD,IAAI,GAAG,IAAI,GAAG,CAAA;IACd,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAA;CAC1B"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { Func, int, Subscription, Terminable } from "@opendaw/lib-std";
|
2
|
+
import { Box, PointerHub } from "@opendaw/lib-box";
|
3
|
+
import { Pointers } from "@opendaw/studio-enums";
|
4
|
+
import { BoxAdapter } from "./BoxAdapter";
|
5
|
+
export interface AdapterCollectionListener<ADAPTER extends BoxAdapter> {
|
6
|
+
onAdd(adapter: ADAPTER): void;
|
7
|
+
onRemove(adapter: ADAPTER): void;
|
8
|
+
}
|
9
|
+
export declare class BoxAdapterCollection<ADAPTER extends BoxAdapter> implements Terminable {
|
10
|
+
#private;
|
11
|
+
constructor(pointerHub: PointerHub, provider: Func<Box, ADAPTER>, pointers: Pointers);
|
12
|
+
subscribe(listener: AdapterCollectionListener<ADAPTER>): Subscription;
|
13
|
+
catchupAndSubscribe(listener: AdapterCollectionListener<ADAPTER>): Subscription;
|
14
|
+
adapters(): ReadonlyArray<ADAPTER>;
|
15
|
+
size(): int;
|
16
|
+
isEmpty(): boolean;
|
17
|
+
terminate(): void;
|
18
|
+
}
|
19
|
+
//# sourceMappingURL=BoxAdapterCollection.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"BoxAdapterCollection.d.ts","sourceRoot":"","sources":["../src/BoxAdapterCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,GAAG,EAAwB,YAAY,EAAE,UAAU,EAAO,MAAM,kBAAkB,CAAA;AACxG,OAAO,EAAC,GAAG,EAAgB,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAEvC,MAAM,WAAW,yBAAyB,CAAC,OAAO,SAAS,UAAU;IACjE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CACnC;AAED,qBAAa,oBAAoB,CAAC,OAAO,SAAS,UAAU,CAAE,YAAW,UAAU;;gBAKnE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ;IAiBpF,SAAS,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,YAAY;IAErE,mBAAmB,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,YAAY;IAK/E,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC;IAClC,IAAI,IAAI,GAAG;IACX,OAAO,IAAI,OAAO;IAElB,SAAS,IAAI,IAAI;CAKpB"}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import { assert, Listeners, UUID } from "@opendaw/lib-std";
|
2
|
+
export class BoxAdapterCollection {
|
3
|
+
#entries;
|
4
|
+
#listeners;
|
5
|
+
#subscription;
|
6
|
+
constructor(pointerHub, provider, pointers) {
|
7
|
+
this.#entries = UUID.newSet(adapter => adapter.uuid);
|
8
|
+
this.#listeners = new Listeners();
|
9
|
+
this.#subscription = pointerHub.catchupAndSubscribeTransactual({
|
10
|
+
onAdd: (pointer) => {
|
11
|
+
const adapter = provider(pointer.box);
|
12
|
+
const added = this.#entries.add(adapter);
|
13
|
+
assert(added, `Could not add ${adapter}`);
|
14
|
+
this.#listeners.proxy.onAdd(adapter);
|
15
|
+
},
|
16
|
+
onRemove: (pointer) => {
|
17
|
+
const uuid = pointer.box.address.uuid;
|
18
|
+
this.#listeners.proxy.onRemove(this.#entries.removeByKey(uuid));
|
19
|
+
}
|
20
|
+
}, pointers);
|
21
|
+
}
|
22
|
+
subscribe(listener) { return this.#listeners.subscribe(listener); }
|
23
|
+
catchupAndSubscribe(listener) {
|
24
|
+
this.#entries.forEach(adapter => listener.onAdd(adapter));
|
25
|
+
return this.subscribe(listener);
|
26
|
+
}
|
27
|
+
adapters() { return this.#entries.values(); }
|
28
|
+
size() { return this.#entries.size(); }
|
29
|
+
isEmpty() { return this.size() === 0; }
|
30
|
+
terminate() {
|
31
|
+
this.#entries.clear();
|
32
|
+
this.#listeners.terminate();
|
33
|
+
this.#subscription.terminate();
|
34
|
+
}
|
35
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { AssertType, Class, Terminable } from "@opendaw/lib-std";
|
2
|
+
import { Box } from "@opendaw/lib-box";
|
3
|
+
import { BoxAdaptersContext } from "./BoxAdaptersContext";
|
4
|
+
import { BoxAdapter } from "./BoxAdapter";
|
5
|
+
export declare class BoxAdapters implements Terminable {
|
6
|
+
#private;
|
7
|
+
constructor(context: BoxAdaptersContext);
|
8
|
+
terminate(): void;
|
9
|
+
adapterFor<BOX extends Box, T extends BoxAdapter>(box: BOX, checkType: Class<T> | AssertType<T>): T;
|
10
|
+
}
|
11
|
+
//# sourceMappingURL=BoxAdapters.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"BoxAdapters.d.ts","sourceRoot":"","sources":["../src/BoxAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAE,KAAK,EAA6C,UAAU,EAAO,MAAM,kBAAkB,CAAA;AAClI,OAAO,EAAC,GAAG,EAAS,MAAM,kBAAkB,CAAA;AAwF5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AAIvC,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;CA8DtG"}
|
@@ -0,0 +1,129 @@
|
|
1
|
+
import { asDefined, assert, isDefined, panic, UUID } from "@opendaw/lib-std";
|
2
|
+
import { AudioUnitBoxAdapter } from "./audio-unit/AudioUnitBoxAdapter";
|
3
|
+
import { DelayDeviceBoxAdapter } from "./devices/audio-effects/DelayDeviceBoxAdapter";
|
4
|
+
import { ReverbDeviceBoxAdapter } from "./devices/audio-effects/ReverbDeviceBoxAdapter";
|
5
|
+
import { RevampDeviceBoxAdapter } from "./devices/audio-effects/RevampDeviceBoxAdapter";
|
6
|
+
import { AudioFileBoxAdapter } from "./AudioFileBoxAdapter";
|
7
|
+
import { AudioRegionBoxAdapter } from "./timeline/region/AudioRegionBoxAdapter";
|
8
|
+
import { TimelineBoxAdapter } from "./timeline/TimelineBoxAdapter";
|
9
|
+
import { MarkerBoxAdapter } from "./timeline/MarkerBoxAdapter";
|
10
|
+
import { ModularAdapter } from "./modular/modular";
|
11
|
+
import { ModuleDelayAdapter } from "./modular/modules/delay";
|
12
|
+
import { ModuleMultiplierAdapter } from "./modular/modules/multiplier";
|
13
|
+
import { ModuleConnectionAdapter } from "./modular/connection";
|
14
|
+
import { ModularAudioOutputAdapter } from "./modular/modules/audio-output";
|
15
|
+
import { ModularAudioInputAdapter } from "./modular/modules/audio-input";
|
16
|
+
import { ModularDeviceBoxAdapter } from "./devices/audio-effects/ModularDeviceBoxAdapter";
|
17
|
+
import { DeviceInterfaceKnobAdapter } from "./modular/user-interface";
|
18
|
+
import { ModuleGainAdapter } from "./modular/modules/gain";
|
19
|
+
import { AudioBusBoxAdapter } from "./audio-unit/AudioBusBoxAdapter";
|
20
|
+
import { AuxSendBoxAdapter } from "./audio-unit/AuxSendBoxAdapter";
|
21
|
+
import { RootBoxAdapter } from "./RootBoxAdapter";
|
22
|
+
import { NoteEventBoxAdapter } from "./timeline/event/NoteEventBoxAdapter";
|
23
|
+
import { NoteRegionBoxAdapter } from "./timeline/region/NoteRegionBoxAdapter";
|
24
|
+
import { NoteEventCollectionBoxAdapter } from "./timeline/collection/NoteEventCollectionBoxAdapter";
|
25
|
+
import { ValueEventBoxAdapter } from "./timeline/event/ValueEventBoxAdapter";
|
26
|
+
import { ValueRegionBoxAdapter } from "./timeline/region/ValueRegionBoxAdapter";
|
27
|
+
import { ValueEventCollectionBoxAdapter } from "./timeline/collection/ValueEventCollectionBoxAdapter";
|
28
|
+
import { NoteClipBoxAdapter } from "./timeline/clip/NoteClipBoxAdapter";
|
29
|
+
import { AudioClipBoxAdapter } from "./timeline/clip/AudioClipBoxAdapter";
|
30
|
+
import { ValueClipBoxAdapter } from "./timeline/clip/ValueClipBoxAdapter";
|
31
|
+
import { TrackBoxAdapter } from "./timeline/TrackBoxAdapter";
|
32
|
+
import { TapeDeviceBoxAdapter } from "./devices/instruments/TapeDeviceBoxAdapter";
|
33
|
+
import { VaporisateurDeviceBoxAdapter } from "./devices/instruments/VaporisateurDeviceBoxAdapter";
|
34
|
+
import { ArpeggioDeviceBoxAdapter } from "./devices/midi-effects/ArpeggioDeviceBoxAdapter";
|
35
|
+
import { PitchDeviceBoxAdapter } from "./devices/midi-effects/PitchDeviceBoxAdapter";
|
36
|
+
import { NanoDeviceBoxAdapter } from "./devices/instruments/NanoDeviceBoxAdapter";
|
37
|
+
import { PlayfieldDeviceBoxAdapter } from "./devices/instruments/PlayfieldDeviceBoxAdapter";
|
38
|
+
import { StereoToolDeviceBoxAdapter } from "./devices/audio-effects/StereoToolDeviceBoxAdapter";
|
39
|
+
import { PlayfieldSampleBoxAdapter } from "./devices/instruments/Playfield/PlayfieldSampleBoxAdapter";
|
40
|
+
import { ZeitgeistDeviceBoxAdapter } from "./devices/midi-effects/ZeitgeistDeviceBoxAdapter";
|
41
|
+
import { GrooveShuffleBoxAdapter } from "./grooves/GrooveShuffleBoxAdapter";
|
42
|
+
export class BoxAdapters {
|
43
|
+
#context;
|
44
|
+
#adapters;
|
45
|
+
#deleted;
|
46
|
+
#terminable;
|
47
|
+
constructor(context) {
|
48
|
+
this.#context = context;
|
49
|
+
this.#adapters = UUID.newSet(adapter => adapter.uuid);
|
50
|
+
this.#deleted = new Set();
|
51
|
+
this.#terminable = this.#context.boxGraph.subscribeToAllUpdates({
|
52
|
+
onUpdate: (update) => {
|
53
|
+
if (update.type === "delete") {
|
54
|
+
const adapter = this.#adapters.getOrNull(update.uuid);
|
55
|
+
if (isDefined(adapter)) {
|
56
|
+
this.#deleted.add(adapter.box);
|
57
|
+
this.#adapters.removeByValue(adapter).terminate();
|
58
|
+
}
|
59
|
+
}
|
60
|
+
}
|
61
|
+
});
|
62
|
+
}
|
63
|
+
terminate() {
|
64
|
+
this.#adapters.values().forEach(adapter => adapter.terminate());
|
65
|
+
this.#adapters.clear();
|
66
|
+
this.#terminable.terminate();
|
67
|
+
}
|
68
|
+
adapterFor(box, checkType) {
|
69
|
+
if (this.#deleted.has(box)) {
|
70
|
+
return panic(`Cannot resolve adapter for already deleted box: ${box}`);
|
71
|
+
}
|
72
|
+
let adapter = this.#adapters.getOrNull(box.address.uuid);
|
73
|
+
if (adapter === null) {
|
74
|
+
adapter = this.#create(box);
|
75
|
+
const added = this.#adapters.add(adapter);
|
76
|
+
assert(added, `Could not add adapter for ${box}`);
|
77
|
+
}
|
78
|
+
if (typeof checkType === "function") {
|
79
|
+
return Object.hasOwn(checkType, "prototype")
|
80
|
+
? adapter instanceof checkType ? adapter : panic(`${adapter} is not instance of ${checkType}`)
|
81
|
+
: checkType(adapter) ? adapter : panic(`${adapter} did not pass custom type guard`);
|
82
|
+
}
|
83
|
+
return panic("Unknown checkType method");
|
84
|
+
}
|
85
|
+
#create(unknownBox) {
|
86
|
+
return asDefined(unknownBox.accept({
|
87
|
+
visitRootBox: (box) => new RootBoxAdapter(this.#context, box),
|
88
|
+
visitArpeggioDeviceBox: (box) => new ArpeggioDeviceBoxAdapter(this.#context, box),
|
89
|
+
visitPitchDeviceBox: (box) => new PitchDeviceBoxAdapter(this.#context, box),
|
90
|
+
visitStereoToolDeviceBox: (box) => new StereoToolDeviceBoxAdapter(this.#context, box),
|
91
|
+
visitDelayDeviceBox: (box) => new DelayDeviceBoxAdapter(this.#context, box),
|
92
|
+
visitReverbDeviceBox: (box) => new ReverbDeviceBoxAdapter(this.#context, box),
|
93
|
+
visitRevampDeviceBox: (box) => new RevampDeviceBoxAdapter(this.#context, box),
|
94
|
+
visitPlayfieldDeviceBox: (box) => new PlayfieldDeviceBoxAdapter(this.#context, box),
|
95
|
+
visitPlayfieldSampleBox: (box) => new PlayfieldSampleBoxAdapter(this.#context, box),
|
96
|
+
visitModularDeviceBox: (box) => new ModularDeviceBoxAdapter(this.#context, box),
|
97
|
+
visitTapeDeviceBox: (box) => new TapeDeviceBoxAdapter(this.#context, box),
|
98
|
+
visitNanoDeviceBox: (box) => new NanoDeviceBoxAdapter(this.#context, box),
|
99
|
+
visitVaporisateurDeviceBox: (box) => new VaporisateurDeviceBoxAdapter(this.#context, box),
|
100
|
+
visitModularBox: (box) => new ModularAdapter(this.#context, box),
|
101
|
+
visitModuleConnectionBox: (box) => new ModuleConnectionAdapter(this.#context, box),
|
102
|
+
visitModuleDelayBox: (box) => new ModuleDelayAdapter(this.#context, box),
|
103
|
+
visitModuleGainBox: (box) => new ModuleGainAdapter(this.#context, box),
|
104
|
+
visitModuleMultiplierBox: (box) => new ModuleMultiplierAdapter(this.#context, box),
|
105
|
+
visitModularAudioInputBox: (box) => new ModularAudioInputAdapter(this.#context, box),
|
106
|
+
visitModularAudioOutputBox: (box) => new ModularAudioOutputAdapter(this.#context, box),
|
107
|
+
visitDeviceInterfaceKnobBox: (box) => new DeviceInterfaceKnobAdapter(this.#context, box),
|
108
|
+
visitAudioUnitBox: (box) => new AudioUnitBoxAdapter(this.#context, box),
|
109
|
+
visitAudioBusBox: (box) => new AudioBusBoxAdapter(this.#context, box),
|
110
|
+
visitAuxSendBox: (box) => new AuxSendBoxAdapter(this.#context, box),
|
111
|
+
visitAudioFileBox: (box) => new AudioFileBoxAdapter(this.#context, box),
|
112
|
+
visitAudioClipBox: (box) => new AudioClipBoxAdapter(this.#context, box),
|
113
|
+
visitAudioRegionBox: (box) => new AudioRegionBoxAdapter(this.#context, box),
|
114
|
+
visitNoteEventBox: (box) => new NoteEventBoxAdapter(this.#context, box),
|
115
|
+
visitNoteEventCollectionBox: (box) => new NoteEventCollectionBoxAdapter(this.#context, box),
|
116
|
+
visitNoteClipBox: (box) => new NoteClipBoxAdapter(this.#context, box),
|
117
|
+
visitNoteRegionBox: (box) => new NoteRegionBoxAdapter(this.#context, box),
|
118
|
+
visitValueEventBox: (box) => new ValueEventBoxAdapter(this.#context, box),
|
119
|
+
visitValueEventCollectionBox: (box) => new ValueEventCollectionBoxAdapter(this.#context, box),
|
120
|
+
visitValueClipBox: (box) => new ValueClipBoxAdapter(this.#context, box),
|
121
|
+
visitValueRegionBox: (box) => new ValueRegionBoxAdapter(this.#context, box),
|
122
|
+
visitTrackBox: (box) => new TrackBoxAdapter(this.#context, box),
|
123
|
+
visitTimelineBox: (box) => new TimelineBoxAdapter(this.#context, box),
|
124
|
+
visitMarkerBox: (box) => new MarkerBoxAdapter(this.#context, box),
|
125
|
+
visitZeitgeistDeviceBox: (box) => new ZeitgeistDeviceBoxAdapter(this.#context, box),
|
126
|
+
visitGrooveShuffleBox: (box) => new GrooveShuffleBoxAdapter(this.#context, box)
|
127
|
+
}), `Could not find factory for ${unknownBox}`);
|
128
|
+
}
|
129
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { Terminable } from "@opendaw/lib-std";
|
2
|
+
import { BoxGraph } from "@opendaw/lib-box";
|
3
|
+
import { LiveStreamBroadcaster, LiveStreamReceiver } from "@opendaw/lib-fusion";
|
4
|
+
import { AudioLoaderManager } from "./AudioLoader";
|
5
|
+
import { RootBoxAdapter } from "./RootBoxAdapter";
|
6
|
+
import { TimelineBoxAdapter } from "./timeline/TimelineBoxAdapter";
|
7
|
+
import { ClipSequencing } from "./ClipSequencing";
|
8
|
+
import { ParameterFieldAdapters } from "./ParameterFieldAdapters";
|
9
|
+
import { BoxAdapters } from "./BoxAdapters";
|
10
|
+
export interface BoxAdaptersContext extends Terminable {
|
11
|
+
get boxGraph(): BoxGraph;
|
12
|
+
get boxAdapters(): BoxAdapters;
|
13
|
+
get audioManager(): AudioLoaderManager;
|
14
|
+
get rootBoxAdapter(): RootBoxAdapter;
|
15
|
+
get timelineBoxAdapter(): TimelineBoxAdapter;
|
16
|
+
get liveStreamReceiver(): LiveStreamReceiver;
|
17
|
+
get liveStreamBroadcaster(): LiveStreamBroadcaster;
|
18
|
+
get clipSequencing(): ClipSequencing;
|
19
|
+
get parameterFieldAdapters(): ParameterFieldAdapters;
|
20
|
+
get bpm(): number;
|
21
|
+
get isMainThread(): boolean;
|
22
|
+
get isAudioContext(): boolean;
|
23
|
+
}
|
24
|
+
//# sourceMappingURL=BoxAdaptersContext.d.ts.map
|
@@ -0,0 +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,kBAAkB,EAAC,MAAM,eAAe,CAAA;AAChD,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;AAEzC,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IAClD,IAAI,QAAQ,IAAI,QAAQ,CAAA;IACxB,IAAI,WAAW,IAAI,WAAW,CAAA;IAC9B,IAAI,YAAY,IAAI,kBAAkB,CAAA;IACtC,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,GAAG,IAAI,MAAM,CAAA;IACjB,IAAI,YAAY,IAAI,OAAO,CAAA;IAC3B,IAAI,cAAc,IAAI,OAAO,CAAA;CAChC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { UUID } from "@opendaw/lib-std";
|
2
|
+
export type ClipSequencingUpdates = {
|
3
|
+
started: ReadonlyArray<UUID.Format>;
|
4
|
+
stopped: ReadonlyArray<UUID.Format>;
|
5
|
+
obsolete: ReadonlyArray<UUID.Format>;
|
6
|
+
};
|
7
|
+
export type ClipNotification = {
|
8
|
+
type: "sequencing";
|
9
|
+
changes: ClipSequencingUpdates;
|
10
|
+
} | {
|
11
|
+
type: "waiting";
|
12
|
+
clips: ReadonlyArray<UUID.Format>;
|
13
|
+
};
|
14
|
+
//# sourceMappingURL=ClipNotifications.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ClipNotifications.d.ts","sourceRoot":"","sources":["../src/ClipNotifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,MAAM,MAAM,qBAAqB,GAAG;IAChC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,EAAE,qBAAqB,CAAA;CACjC,GAAG;IACA,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;CACpC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { Option, Terminable, UUID } from "@opendaw/lib-std";
|
2
|
+
import { ppqn } from "@opendaw/lib-dsp";
|
3
|
+
import { AnyClipBoxAdapter } from "./UnionAdapterTypes";
|
4
|
+
export type Section = {
|
5
|
+
optClip: Option<AnyClipBoxAdapter>;
|
6
|
+
sectionFrom: ppqn;
|
7
|
+
sectionTo: ppqn;
|
8
|
+
};
|
9
|
+
export interface ClipSequencing extends Terminable {
|
10
|
+
iterate(trackKey: UUID.Format, a: ppqn, b: ppqn): Generator<Section>;
|
11
|
+
}
|
12
|
+
//# sourceMappingURL=ClipSequencing.d.ts.map
|
@@ -0,0 +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,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;CACvE"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|