@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
@@ -0,0 +1,18 @@
|
|
1
|
+
import { int, Option } from "@opendaw/lib-std";
|
2
|
+
export type EngineProcessorOptions = {
|
3
|
+
sab: SharedArrayBuffer;
|
4
|
+
project: ArrayBufferLike;
|
5
|
+
exportConfiguration?: ExportStemsConfiguration;
|
6
|
+
};
|
7
|
+
export type ExportStemConfiguration = {
|
8
|
+
includeAudioEffects: boolean;
|
9
|
+
includeSends: boolean;
|
10
|
+
fileName: string;
|
11
|
+
};
|
12
|
+
export type ExportStemsConfiguration = Record<string, ExportStemConfiguration>;
|
13
|
+
export declare namespace ExportStemsConfiguration {
|
14
|
+
const countStems: (config: Option<ExportStemsConfiguration>) => int;
|
15
|
+
const sanitizeFileName: (name: string) => string;
|
16
|
+
const sanitizeExportNamesInPlace: (configuration: ExportStemsConfiguration) => void;
|
17
|
+
}
|
18
|
+
//# sourceMappingURL=EngineProcessorOptions.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EngineProcessorOptions.d.ts","sourceRoot":"","sources":["../src/EngineProcessorOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAG5C,MAAM,MAAM,sBAAsB,GAAG;IACjC,GAAG,EAAE,iBAAiB,CAAA;IACtB,OAAO,EAAE,eAAe,CAAA;IACxB,mBAAmB,CAAC,EAAE,wBAAwB,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;AAE9E,yBAAiB,wBAAwB,CAAC;IAC/B,MAAM,UAAU,GAAI,QAAQ,MAAM,CAAC,wBAAwB,CAAC,KAAG,GAIhE,CAAA;IAEC,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAA4D,CAAA;IAErG,MAAM,0BAA0B,GAAI,eAAe,wBAAwB,KAAG,IAiBpF,CAAA;CACJ"}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
export var ExportStemsConfiguration;
|
2
|
+
(function (ExportStemsConfiguration) {
|
3
|
+
ExportStemsConfiguration.countStems = (config) => config.match({
|
4
|
+
none: () => 1,
|
5
|
+
some: (configuration) => Object.keys(configuration).length
|
6
|
+
});
|
7
|
+
ExportStemsConfiguration.sanitizeFileName = (name) => name.replace(/[<>:"/\\|?*\x00-\x1F]/g, "_").trim();
|
8
|
+
ExportStemsConfiguration.sanitizeExportNamesInPlace = (configuration) => {
|
9
|
+
const sanitizedNames = new Map();
|
10
|
+
const getUniqueName = (baseName) => {
|
11
|
+
let count = sanitizedNames.get(baseName) ?? 0;
|
12
|
+
let newName = baseName;
|
13
|
+
while (sanitizedNames.has(newName)) {
|
14
|
+
count++;
|
15
|
+
newName = `${baseName} ${count}`;
|
16
|
+
}
|
17
|
+
sanitizedNames.set(baseName, count);
|
18
|
+
sanitizedNames.set(newName, 1);
|
19
|
+
return newName;
|
20
|
+
};
|
21
|
+
Object.keys(configuration).forEach((key) => {
|
22
|
+
const entry = configuration[key];
|
23
|
+
entry.fileName = getUniqueName(ExportStemsConfiguration.sanitizeFileName(entry.fileName));
|
24
|
+
});
|
25
|
+
};
|
26
|
+
})(ExportStemsConfiguration || (ExportStemsConfiguration = {}));
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { Schema } from "@opendaw/lib-std";
|
2
|
+
export declare const EngineStateSchema: () => Schema.IO<{
|
3
|
+
position: number;
|
4
|
+
clipIndex: number;
|
5
|
+
}>;
|
6
|
+
export type EngineState = ReturnType<typeof EngineStateSchema>["object"];
|
7
|
+
//# sourceMappingURL=EngineStateSchema.d.ts.map
|
@@ -0,0 +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;;;EAG5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAA"}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import { MutableObservableValue, Observer, Option, StringMapping, StringResult, Subscription, Terminable, unitValue, ValueMapping } from "@opendaw/lib-std";
|
2
|
+
import { Address, PrimitiveField, PrimitiveType, PrimitiveValues } from "@opendaw/lib-box";
|
3
|
+
import { TrackBoxAdapter } from "./timeline/TrackBoxAdapter";
|
4
|
+
export declare class FieldAdapter<T extends PrimitiveValues = any> implements MutableObservableValue<T>, Terminable {
|
5
|
+
#private;
|
6
|
+
constructor(field: PrimitiveField<T, any>, valueMapping: ValueMapping<T>, stringMapping: StringMapping<T>, name: string, anchor?: unitValue);
|
7
|
+
get field(): PrimitiveField<T>;
|
8
|
+
get valueMapping(): ValueMapping<T>;
|
9
|
+
get stringMapping(): StringMapping<T>;
|
10
|
+
get name(): string;
|
11
|
+
get anchor(): unitValue;
|
12
|
+
get type(): PrimitiveType;
|
13
|
+
get address(): Address;
|
14
|
+
get track(): Option<TrackBoxAdapter>;
|
15
|
+
subscribe(observer: Observer<FieldAdapter<T>>): Subscription;
|
16
|
+
catchupAndSubscribe(observer: Observer<FieldAdapter<T>>): Subscription;
|
17
|
+
getValue(): T;
|
18
|
+
setValue(value: T): void;
|
19
|
+
setUnitValue(value: unitValue): void;
|
20
|
+
getUnitValue(): unitValue;
|
21
|
+
getPrintValue(): Readonly<StringResult>;
|
22
|
+
setPrintValue(text: string): void;
|
23
|
+
reset(): void;
|
24
|
+
terminate(): void;
|
25
|
+
}
|
26
|
+
//# sourceMappingURL=FieldAdapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"FieldAdapter.d.ts","sourceRoot":"","sources":["../src/FieldAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,sBAAsB,EAEtB,QAAQ,EACR,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,SAAS,EACT,YAAY,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AACxF,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAE1D,qBAAa,YAAY,CAAC,CAAC,SAAS,eAAe,GAAG,GAAG,CAAE,YAAW,sBAAsB,CAAC,CAAC,CAAC,EAAE,UAAU;;gBAY3F,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;IAkB9B,IAAI,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,CAAqB;IACnD,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,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAE5D,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY;IAKtE,QAAQ,IAAI,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IACpC,YAAY,IAAI,SAAS;IACzB,aAAa,IAAI,QAAQ,CAAC,YAAY,CAAC;IACvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWjC,KAAK,IAAI,IAAI;IAEb,SAAS,IAAI,IAAI;CACpB"}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import { clamp, Notifier, Option, Terminator } from "@opendaw/lib-std";
|
2
|
+
export class FieldAdapter {
|
3
|
+
#field;
|
4
|
+
#valueMapping;
|
5
|
+
#stringMapping;
|
6
|
+
#name;
|
7
|
+
#anchor;
|
8
|
+
#terminator = new Terminator();
|
9
|
+
#valueChangeNotifier;
|
10
|
+
#trackBoxAdapter = Option.None;
|
11
|
+
constructor(field, valueMapping, stringMapping, name, anchor) {
|
12
|
+
this.#field = field;
|
13
|
+
this.#valueMapping = valueMapping;
|
14
|
+
this.#stringMapping = stringMapping;
|
15
|
+
this.#name = name;
|
16
|
+
this.#anchor = anchor ?? 0.0;
|
17
|
+
this.#valueChangeNotifier = this.#terminator.own(new Notifier());
|
18
|
+
this.#terminator.own(this.#field.subscribe(() => this.#valueChangeNotifier.notify(this)));
|
19
|
+
/*
|
20
|
+
For debugging: It's not live because floating errors expose false positives,
|
21
|
+
and I am too lazy to implement this in the mappings itself.
|
22
|
+
*/
|
23
|
+
if (field.getValue() !== valueMapping.clamp(field.getValue())) {
|
24
|
+
console.warn(`${name} (${field.getValue()}) is out of bounds`, valueMapping);
|
25
|
+
}
|
26
|
+
}
|
27
|
+
get field() { return this.#field; }
|
28
|
+
get valueMapping() { return this.#valueMapping; }
|
29
|
+
get stringMapping() { return this.#stringMapping; }
|
30
|
+
get name() { return this.#name; }
|
31
|
+
get anchor() { return this.#anchor; }
|
32
|
+
get type() { return this.#field.type; }
|
33
|
+
get address() { return this.#field.address; }
|
34
|
+
get track() { return this.#trackBoxAdapter; }
|
35
|
+
subscribe(observer) { return this.#valueChangeNotifier.subscribe(observer); }
|
36
|
+
catchupAndSubscribe(observer) {
|
37
|
+
observer(this);
|
38
|
+
return this.subscribe(observer);
|
39
|
+
}
|
40
|
+
getValue() { return this.#field.getValue(); }
|
41
|
+
setValue(value) { this.#field.setValue(this.#valueMapping.clamp(value)); }
|
42
|
+
setUnitValue(value) { this.setValue(this.#valueMapping.y(value)); }
|
43
|
+
getUnitValue() { return this.#valueMapping.x(this.getValue()); }
|
44
|
+
getPrintValue() { return this.#stringMapping.x(this.getValue()); }
|
45
|
+
setPrintValue(text) {
|
46
|
+
const result = this.#stringMapping.y(text);
|
47
|
+
if (result.type === "unitValue") {
|
48
|
+
this.setUnitValue(clamp(result.value, 0.0, 1.0));
|
49
|
+
}
|
50
|
+
else if (result.type === "explicit") {
|
51
|
+
this.setValue(this.valueMapping.clamp(result.value));
|
52
|
+
}
|
53
|
+
else {
|
54
|
+
console.debug(`Unknown text input: '${result.value}'`);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
reset() { this.setValue(this.#valueMapping.clamp(this.#field.initValue)); }
|
58
|
+
terminate() { this.#terminator.terminate(); }
|
59
|
+
}
|
@@ -0,0 +1,119 @@
|
|
1
|
+
export declare enum IconSymbol {
|
2
|
+
Rectangle = 0,
|
3
|
+
Checkbox = 1,
|
4
|
+
Panel = 2,
|
5
|
+
MainMenu = 3,
|
6
|
+
Dropdown = 4,
|
7
|
+
AudioDevice = 5,
|
8
|
+
GuitarTab = 6,
|
9
|
+
Effects = 7,
|
10
|
+
Flask = 8,
|
11
|
+
Robot = 9,
|
12
|
+
NotePad = 10,
|
13
|
+
Pencil = 11,
|
14
|
+
Waveform = 12,
|
15
|
+
Mix = 13,
|
16
|
+
Adsr = 14,
|
17
|
+
Dial = 15,
|
18
|
+
Record = 16,
|
19
|
+
Play = 17,
|
20
|
+
Stop = 18,
|
21
|
+
Loop = 19,
|
22
|
+
Timeline = 20,
|
23
|
+
Region = 21,
|
24
|
+
Box = 22,
|
25
|
+
Mixing = 23,
|
26
|
+
Vinyl = 24,
|
27
|
+
Help = 25,
|
28
|
+
Metronome = 26,
|
29
|
+
System = 27,
|
30
|
+
Add = 28,
|
31
|
+
Subtract = 29,
|
32
|
+
Peak = 30,
|
33
|
+
LowPass = 31,
|
34
|
+
HighPass = 32,
|
35
|
+
LowShelf = 33,
|
36
|
+
HighShelf = 34,
|
37
|
+
RoundUp = 35,
|
38
|
+
RoundDown = 36,
|
39
|
+
Mute = 37,
|
40
|
+
Solo = 38,
|
41
|
+
Exclude = 39,
|
42
|
+
Menu = 40,
|
43
|
+
Pointer = 41,
|
44
|
+
Eraser = 42,
|
45
|
+
Scissors = 43,
|
46
|
+
Tape = 44,
|
47
|
+
CollapseDown = 45,
|
48
|
+
FileList = 46,
|
49
|
+
Close = 47,
|
50
|
+
DragConnections = 48,
|
51
|
+
Heart = 49,
|
52
|
+
Merge = 50,
|
53
|
+
SpeakerHeadphone = 51,
|
54
|
+
AudioBus = 52,
|
55
|
+
DrumSet = 53,
|
56
|
+
BassGuitar = 54,
|
57
|
+
Guitar = 55,
|
58
|
+
Saxophone = 56,
|
59
|
+
Microphone = 57,
|
60
|
+
New = 58,
|
61
|
+
Piano = 59,
|
62
|
+
ExpandWidth = 60,
|
63
|
+
OpenDAW = 61,
|
64
|
+
Automation = 62,
|
65
|
+
Embed = 63,
|
66
|
+
Popout = 64,
|
67
|
+
Minimized = 65,
|
68
|
+
Maximized = 66,
|
69
|
+
Search = 67,
|
70
|
+
Generator = 68,
|
71
|
+
Groove = 69,
|
72
|
+
Table = 70,
|
73
|
+
Note = 71,
|
74
|
+
Exit = 72,
|
75
|
+
Start = 73,
|
76
|
+
Duration = 74,
|
77
|
+
Velocity = 75,
|
78
|
+
Random = 76,
|
79
|
+
Divide = 77,
|
80
|
+
Curve = 78,
|
81
|
+
Primary = 79,
|
82
|
+
Clips = 80,
|
83
|
+
NoAudio = 81,
|
84
|
+
Unknown = 82,
|
85
|
+
UserFolder = 83,
|
86
|
+
CloudFolder = 84,
|
87
|
+
Run = 85,
|
88
|
+
Insert = 86,
|
89
|
+
ArrayDown = 87,
|
90
|
+
Sun = 88,
|
91
|
+
Book = 89,
|
92
|
+
Stack = 90,
|
93
|
+
EditBox = 91,
|
94
|
+
Delete = 92,
|
95
|
+
Time = 93,
|
96
|
+
EQ = 94,
|
97
|
+
Cube = 95,
|
98
|
+
NanoWave = 96,
|
99
|
+
Midi = 97,
|
100
|
+
DinSlot = 98,
|
101
|
+
VUMeter = 99,
|
102
|
+
Playfield = 100,
|
103
|
+
Invert = 101,
|
104
|
+
Headphone = 102,
|
105
|
+
Stereo = 103,
|
106
|
+
AutoGain = 104,
|
107
|
+
AudioFile = 105,
|
108
|
+
Tool = 106,
|
109
|
+
Focus = 107,
|
110
|
+
Swap = 108,
|
111
|
+
Connected = 109,
|
112
|
+
Disconnected = 110,
|
113
|
+
Zeitgeist = 111
|
114
|
+
}
|
115
|
+
export declare namespace IconSymbol {
|
116
|
+
const toName: (symbol: IconSymbol) => string;
|
117
|
+
const fromName: (name: keyof typeof IconSymbol | string) => IconSymbol;
|
118
|
+
}
|
119
|
+
//# sourceMappingURL=IconSymbol.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"IconSymbol.d.ts","sourceRoot":"","sources":["../src/IconSymbol.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IAClB,SAAS,IAAA;IACT,QAAQ,IAAA;IACR,KAAK,IAAA;IACL,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,WAAW,IAAA;IACX,SAAS,IAAA;IACT,OAAO,IAAA;IACP,KAAK,IAAA;IACL,KAAK,IAAA;IACL,OAAO,KAAA;IACP,MAAM,KAAA;IACN,QAAQ,KAAA;IACR,GAAG,KAAA;IACH,IAAI,KAAA;IACJ,IAAI,KAAA;IACJ,MAAM,KAAA;IACN,IAAI,KAAA;IACJ,IAAI,KAAA;IACJ,IAAI,KAAA;IACJ,QAAQ,KAAA;IACR,MAAM,KAAA;IACN,GAAG,KAAA;IACH,MAAM,KAAA;IACN,KAAK,KAAA;IACL,IAAI,KAAA;IACJ,SAAS,KAAA;IACT,MAAM,KAAA;IACN,GAAG,KAAA;IACH,QAAQ,KAAA;IACR,IAAI,KAAA;IACJ,OAAO,KAAA;IACP,QAAQ,KAAA;IACR,QAAQ,KAAA;IACR,SAAS,KAAA;IACT,OAAO,KAAA;IACP,SAAS,KAAA;IACT,IAAI,KAAA;IACJ,IAAI,KAAA;IACJ,OAAO,KAAA;IACP,IAAI,KAAA;IACJ,OAAO,KAAA;IACP,MAAM,KAAA;IACN,QAAQ,KAAA;IACR,IAAI,KAAA;IACJ,YAAY,KAAA;IACZ,QAAQ,KAAA;IACR,KAAK,KAAA;IACL,eAAe,KAAA;IACf,KAAK,KAAA;IACL,KAAK,KAAA;IACL,gBAAgB,KAAA;IAChB,QAAQ,KAAA;IACR,OAAO,KAAA;IACP,UAAU,KAAA;IACV,MAAM,KAAA;IACN,SAAS,KAAA;IACT,UAAU,KAAA;IACV,GAAG,KAAA;IACH,KAAK,KAAA;IACL,WAAW,KAAA;IACX,OAAO,KAAA;IACP,UAAU,KAAA;IACV,KAAK,KAAA;IACL,MAAM,KAAA;IACN,SAAS,KAAA;IACT,SAAS,KAAA;IACT,MAAM,KAAA;IACN,SAAS,KAAA;IACT,MAAM,KAAA;IACN,KAAK,KAAA;IACL,IAAI,KAAA;IACJ,IAAI,KAAA;IACJ,KAAK,KAAA;IACL,QAAQ,KAAA;IACR,QAAQ,KAAA;IACR,MAAM,KAAA;IACN,MAAM,KAAA;IACN,KAAK,KAAA;IACL,OAAO,KAAA;IACP,KAAK,KAAA;IACL,OAAO,KAAA;IACP,OAAO,KAAA;IACP,UAAU,KAAA;IACV,WAAW,KAAA;IACX,GAAG,KAAA;IACH,MAAM,KAAA;IACN,SAAS,KAAA;IACT,GAAG,KAAA;IACH,IAAI,KAAA;IACJ,KAAK,KAAA;IACL,OAAO,KAAA;IACP,MAAM,KAAA;IACN,IAAI,KAAA;IACJ,EAAE,KAAA;IACF,IAAI,KAAA;IACJ,QAAQ,KAAA;IACR,IAAI,KAAA;IACJ,OAAO,KAAA;IACP,OAAO,KAAA;IACP,SAAS,MAAA;IACT,MAAM,MAAA;IACN,SAAS,MAAA;IACT,MAAM,MAAA;IACN,QAAQ,MAAA;IACR,SAAS,MAAA;IACT,IAAI,MAAA;IACJ,KAAK,MAAA;IACL,IAAI,MAAA;IACJ,SAAS,MAAA;IACT,YAAY,MAAA;IACZ,SAAS,MAAA;CACZ;AAED,yBAAiB,UAAU,CAAC;IACjB,MAAM,MAAM,GAAI,QAAQ,UAAU,KAAG,MAA4B,CAAA;IACjE,MAAM,QAAQ,GAAI,MAAM,MAAM,OAAO,UAAU,GAAG,MAAM,KAAG,UACiB,CAAA;CACtF"}
|
@@ -0,0 +1,119 @@
|
|
1
|
+
export var IconSymbol;
|
2
|
+
(function (IconSymbol) {
|
3
|
+
IconSymbol[IconSymbol["Rectangle"] = 0] = "Rectangle";
|
4
|
+
IconSymbol[IconSymbol["Checkbox"] = 1] = "Checkbox";
|
5
|
+
IconSymbol[IconSymbol["Panel"] = 2] = "Panel";
|
6
|
+
IconSymbol[IconSymbol["MainMenu"] = 3] = "MainMenu";
|
7
|
+
IconSymbol[IconSymbol["Dropdown"] = 4] = "Dropdown";
|
8
|
+
IconSymbol[IconSymbol["AudioDevice"] = 5] = "AudioDevice";
|
9
|
+
IconSymbol[IconSymbol["GuitarTab"] = 6] = "GuitarTab";
|
10
|
+
IconSymbol[IconSymbol["Effects"] = 7] = "Effects";
|
11
|
+
IconSymbol[IconSymbol["Flask"] = 8] = "Flask";
|
12
|
+
IconSymbol[IconSymbol["Robot"] = 9] = "Robot";
|
13
|
+
IconSymbol[IconSymbol["NotePad"] = 10] = "NotePad";
|
14
|
+
IconSymbol[IconSymbol["Pencil"] = 11] = "Pencil";
|
15
|
+
IconSymbol[IconSymbol["Waveform"] = 12] = "Waveform";
|
16
|
+
IconSymbol[IconSymbol["Mix"] = 13] = "Mix";
|
17
|
+
IconSymbol[IconSymbol["Adsr"] = 14] = "Adsr";
|
18
|
+
IconSymbol[IconSymbol["Dial"] = 15] = "Dial";
|
19
|
+
IconSymbol[IconSymbol["Record"] = 16] = "Record";
|
20
|
+
IconSymbol[IconSymbol["Play"] = 17] = "Play";
|
21
|
+
IconSymbol[IconSymbol["Stop"] = 18] = "Stop";
|
22
|
+
IconSymbol[IconSymbol["Loop"] = 19] = "Loop";
|
23
|
+
IconSymbol[IconSymbol["Timeline"] = 20] = "Timeline";
|
24
|
+
IconSymbol[IconSymbol["Region"] = 21] = "Region";
|
25
|
+
IconSymbol[IconSymbol["Box"] = 22] = "Box";
|
26
|
+
IconSymbol[IconSymbol["Mixing"] = 23] = "Mixing";
|
27
|
+
IconSymbol[IconSymbol["Vinyl"] = 24] = "Vinyl";
|
28
|
+
IconSymbol[IconSymbol["Help"] = 25] = "Help";
|
29
|
+
IconSymbol[IconSymbol["Metronome"] = 26] = "Metronome";
|
30
|
+
IconSymbol[IconSymbol["System"] = 27] = "System";
|
31
|
+
IconSymbol[IconSymbol["Add"] = 28] = "Add";
|
32
|
+
IconSymbol[IconSymbol["Subtract"] = 29] = "Subtract";
|
33
|
+
IconSymbol[IconSymbol["Peak"] = 30] = "Peak";
|
34
|
+
IconSymbol[IconSymbol["LowPass"] = 31] = "LowPass";
|
35
|
+
IconSymbol[IconSymbol["HighPass"] = 32] = "HighPass";
|
36
|
+
IconSymbol[IconSymbol["LowShelf"] = 33] = "LowShelf";
|
37
|
+
IconSymbol[IconSymbol["HighShelf"] = 34] = "HighShelf";
|
38
|
+
IconSymbol[IconSymbol["RoundUp"] = 35] = "RoundUp";
|
39
|
+
IconSymbol[IconSymbol["RoundDown"] = 36] = "RoundDown";
|
40
|
+
IconSymbol[IconSymbol["Mute"] = 37] = "Mute";
|
41
|
+
IconSymbol[IconSymbol["Solo"] = 38] = "Solo";
|
42
|
+
IconSymbol[IconSymbol["Exclude"] = 39] = "Exclude";
|
43
|
+
IconSymbol[IconSymbol["Menu"] = 40] = "Menu";
|
44
|
+
IconSymbol[IconSymbol["Pointer"] = 41] = "Pointer";
|
45
|
+
IconSymbol[IconSymbol["Eraser"] = 42] = "Eraser";
|
46
|
+
IconSymbol[IconSymbol["Scissors"] = 43] = "Scissors";
|
47
|
+
IconSymbol[IconSymbol["Tape"] = 44] = "Tape";
|
48
|
+
IconSymbol[IconSymbol["CollapseDown"] = 45] = "CollapseDown";
|
49
|
+
IconSymbol[IconSymbol["FileList"] = 46] = "FileList";
|
50
|
+
IconSymbol[IconSymbol["Close"] = 47] = "Close";
|
51
|
+
IconSymbol[IconSymbol["DragConnections"] = 48] = "DragConnections";
|
52
|
+
IconSymbol[IconSymbol["Heart"] = 49] = "Heart";
|
53
|
+
IconSymbol[IconSymbol["Merge"] = 50] = "Merge";
|
54
|
+
IconSymbol[IconSymbol["SpeakerHeadphone"] = 51] = "SpeakerHeadphone";
|
55
|
+
IconSymbol[IconSymbol["AudioBus"] = 52] = "AudioBus";
|
56
|
+
IconSymbol[IconSymbol["DrumSet"] = 53] = "DrumSet";
|
57
|
+
IconSymbol[IconSymbol["BassGuitar"] = 54] = "BassGuitar";
|
58
|
+
IconSymbol[IconSymbol["Guitar"] = 55] = "Guitar";
|
59
|
+
IconSymbol[IconSymbol["Saxophone"] = 56] = "Saxophone";
|
60
|
+
IconSymbol[IconSymbol["Microphone"] = 57] = "Microphone";
|
61
|
+
IconSymbol[IconSymbol["New"] = 58] = "New";
|
62
|
+
IconSymbol[IconSymbol["Piano"] = 59] = "Piano";
|
63
|
+
IconSymbol[IconSymbol["ExpandWidth"] = 60] = "ExpandWidth";
|
64
|
+
IconSymbol[IconSymbol["OpenDAW"] = 61] = "OpenDAW";
|
65
|
+
IconSymbol[IconSymbol["Automation"] = 62] = "Automation";
|
66
|
+
IconSymbol[IconSymbol["Embed"] = 63] = "Embed";
|
67
|
+
IconSymbol[IconSymbol["Popout"] = 64] = "Popout";
|
68
|
+
IconSymbol[IconSymbol["Minimized"] = 65] = "Minimized";
|
69
|
+
IconSymbol[IconSymbol["Maximized"] = 66] = "Maximized";
|
70
|
+
IconSymbol[IconSymbol["Search"] = 67] = "Search";
|
71
|
+
IconSymbol[IconSymbol["Generator"] = 68] = "Generator";
|
72
|
+
IconSymbol[IconSymbol["Groove"] = 69] = "Groove";
|
73
|
+
IconSymbol[IconSymbol["Table"] = 70] = "Table";
|
74
|
+
IconSymbol[IconSymbol["Note"] = 71] = "Note";
|
75
|
+
IconSymbol[IconSymbol["Exit"] = 72] = "Exit";
|
76
|
+
IconSymbol[IconSymbol["Start"] = 73] = "Start";
|
77
|
+
IconSymbol[IconSymbol["Duration"] = 74] = "Duration";
|
78
|
+
IconSymbol[IconSymbol["Velocity"] = 75] = "Velocity";
|
79
|
+
IconSymbol[IconSymbol["Random"] = 76] = "Random";
|
80
|
+
IconSymbol[IconSymbol["Divide"] = 77] = "Divide";
|
81
|
+
IconSymbol[IconSymbol["Curve"] = 78] = "Curve";
|
82
|
+
IconSymbol[IconSymbol["Primary"] = 79] = "Primary";
|
83
|
+
IconSymbol[IconSymbol["Clips"] = 80] = "Clips";
|
84
|
+
IconSymbol[IconSymbol["NoAudio"] = 81] = "NoAudio";
|
85
|
+
IconSymbol[IconSymbol["Unknown"] = 82] = "Unknown";
|
86
|
+
IconSymbol[IconSymbol["UserFolder"] = 83] = "UserFolder";
|
87
|
+
IconSymbol[IconSymbol["CloudFolder"] = 84] = "CloudFolder";
|
88
|
+
IconSymbol[IconSymbol["Run"] = 85] = "Run";
|
89
|
+
IconSymbol[IconSymbol["Insert"] = 86] = "Insert";
|
90
|
+
IconSymbol[IconSymbol["ArrayDown"] = 87] = "ArrayDown";
|
91
|
+
IconSymbol[IconSymbol["Sun"] = 88] = "Sun";
|
92
|
+
IconSymbol[IconSymbol["Book"] = 89] = "Book";
|
93
|
+
IconSymbol[IconSymbol["Stack"] = 90] = "Stack";
|
94
|
+
IconSymbol[IconSymbol["EditBox"] = 91] = "EditBox";
|
95
|
+
IconSymbol[IconSymbol["Delete"] = 92] = "Delete";
|
96
|
+
IconSymbol[IconSymbol["Time"] = 93] = "Time";
|
97
|
+
IconSymbol[IconSymbol["EQ"] = 94] = "EQ";
|
98
|
+
IconSymbol[IconSymbol["Cube"] = 95] = "Cube";
|
99
|
+
IconSymbol[IconSymbol["NanoWave"] = 96] = "NanoWave";
|
100
|
+
IconSymbol[IconSymbol["Midi"] = 97] = "Midi";
|
101
|
+
IconSymbol[IconSymbol["DinSlot"] = 98] = "DinSlot";
|
102
|
+
IconSymbol[IconSymbol["VUMeter"] = 99] = "VUMeter";
|
103
|
+
IconSymbol[IconSymbol["Playfield"] = 100] = "Playfield";
|
104
|
+
IconSymbol[IconSymbol["Invert"] = 101] = "Invert";
|
105
|
+
IconSymbol[IconSymbol["Headphone"] = 102] = "Headphone";
|
106
|
+
IconSymbol[IconSymbol["Stereo"] = 103] = "Stereo";
|
107
|
+
IconSymbol[IconSymbol["AutoGain"] = 104] = "AutoGain";
|
108
|
+
IconSymbol[IconSymbol["AudioFile"] = 105] = "AudioFile";
|
109
|
+
IconSymbol[IconSymbol["Tool"] = 106] = "Tool";
|
110
|
+
IconSymbol[IconSymbol["Focus"] = 107] = "Focus";
|
111
|
+
IconSymbol[IconSymbol["Swap"] = 108] = "Swap";
|
112
|
+
IconSymbol[IconSymbol["Connected"] = 109] = "Connected";
|
113
|
+
IconSymbol[IconSymbol["Disconnected"] = 110] = "Disconnected";
|
114
|
+
IconSymbol[IconSymbol["Zeitgeist"] = 111] = "Zeitgeist";
|
115
|
+
})(IconSymbol || (IconSymbol = {}));
|
116
|
+
(function (IconSymbol) {
|
117
|
+
IconSymbol.toName = (symbol) => IconSymbol[symbol];
|
118
|
+
IconSymbol.fromName = (name) => IconSymbol[name] ?? IconSymbol.Rectangle;
|
119
|
+
})(IconSymbol || (IconSymbol = {}));
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"IndexComparator.d.ts","sourceRoot":"","sources":["../src/IndexComparator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,GAAG,EAAQ,MAAM,kBAAkB,CAAA;AAEvD,eAAO,MAAM,eAAe,EAAE,UAAU,CAAC,GAAG,CAO3C,CAAA"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { panic } from "@opendaw/lib-std";
|
2
|
+
export const IndexComparator = (a, b) => {
|
3
|
+
if (a === b) {
|
4
|
+
return 0;
|
5
|
+
}
|
6
|
+
const difference = a - b;
|
7
|
+
if (difference === 0) {
|
8
|
+
return panic(`Indices cannot be equal (${a}, ${b})`);
|
9
|
+
}
|
10
|
+
return difference;
|
11
|
+
};
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { AudioBusBox, AudioUnitBox, RootBox, TimelineBox, UserInterfaceBox } from "@opendaw/studio-boxes";
|
2
|
+
export type MandatoryBoxes = {
|
3
|
+
rootBox: RootBox;
|
4
|
+
timelineBox: TimelineBox;
|
5
|
+
masterBusBox: AudioBusBox;
|
6
|
+
masterAudioUnit: AudioUnitBox;
|
7
|
+
userInterfaceBox: UserInterfaceBox;
|
8
|
+
};
|
9
|
+
//# sourceMappingURL=ManadatoryBoxes.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ManadatoryBoxes.d.ts","sourceRoot":"","sources":["../src/ManadatoryBoxes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAA;AAEvG,MAAM,MAAM,cAAc,GAAG;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,WAAW,CAAA;IACzB,eAAe,EAAE,YAAY,CAAA;IAC7B,gBAAgB,EAAE,gBAAgB,CAAA;CACrC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { LiveStreamBroadcaster } from "@opendaw/lib-fusion";
|
2
|
+
import { Address } from "@opendaw/lib-box";
|
3
|
+
import { int, Terminable } from "@opendaw/lib-std";
|
4
|
+
export declare class NoteBroadcaster implements Terminable {
|
5
|
+
#private;
|
6
|
+
constructor(broadcaster: LiveStreamBroadcaster, address: Address);
|
7
|
+
noteOn(note: int): void;
|
8
|
+
noteOff(note: int): void;
|
9
|
+
reset(): void;
|
10
|
+
clear(): void;
|
11
|
+
terminate(): void;
|
12
|
+
toString(): string;
|
13
|
+
}
|
14
|
+
//# sourceMappingURL=NoteBroadcaster.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"NoteBroadcaster.d.ts","sourceRoot":"","sources":["../src/NoteBroadcaster.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAkB,GAAG,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAA;AAE7E,qBAAa,eAAgB,YAAW,UAAU;;gBAOlC,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO;IAUhE,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IACvB,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAExB,KAAK,IAAI,IAAI;IACb,KAAK,IAAI,IAAI;IACb,SAAS,IAAI,IAAI;IAEjB,QAAQ,IAAI,MAAM;CACrB"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { Bits, EmptyExec, Terminator } from "@opendaw/lib-std";
|
2
|
+
export class NoteBroadcaster {
|
3
|
+
#terminator = new Terminator();
|
4
|
+
#broadcaster;
|
5
|
+
#address;
|
6
|
+
#bits;
|
7
|
+
constructor(broadcaster, address) {
|
8
|
+
this.#broadcaster = broadcaster;
|
9
|
+
this.#address = address;
|
10
|
+
this.#bits = new Bits(128);
|
11
|
+
this.#terminator.own(this.#broadcaster.broadcastIntegers(this.#address, new Int32Array(this.#bits.buffer), EmptyExec));
|
12
|
+
}
|
13
|
+
noteOn(note) { if (note >= 0 && note < 128) {
|
14
|
+
this.#bits.setBit(note, true);
|
15
|
+
} }
|
16
|
+
noteOff(note) { if (note >= 0 && note < 128) {
|
17
|
+
this.#bits.setBit(note, false);
|
18
|
+
} }
|
19
|
+
reset() { }
|
20
|
+
clear() { this.#bits.clear(); }
|
21
|
+
terminate() { this.#terminator.terminate(); }
|
22
|
+
toString() { return `{${this.constructor.name}}`; }
|
23
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { byte, Terminable, unitValue } from "@opendaw/lib-std";
|
2
|
+
export interface NoteSender {
|
3
|
+
noteOn(note: byte, velocity: unitValue): void;
|
4
|
+
noteOff(note: byte): void;
|
5
|
+
}
|
6
|
+
export declare namespace NoteSustainer {
|
7
|
+
const start: (sender: NoteSender, note: byte, velocity?: unitValue) => Terminable;
|
8
|
+
}
|
9
|
+
//# sourceMappingURL=NoteSender.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"NoteSender.d.ts","sourceRoot":"","sources":["../src/NoteSender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAE5D,MAAM,WAAW,UAAU;IACvB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAA;IAC7C,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAC5B;AAED,yBAAiB,aAAa,CAAC;IACpB,MAAM,KAAK,GAAI,QAAQ,UAAU,EAAE,MAAM,IAAI,EAAE,WAAU,SAAe,KAAG,UAWjF,CAAA;CACJ"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
export var NoteSustainer;
|
2
|
+
(function (NoteSustainer) {
|
3
|
+
NoteSustainer.start = (sender, note, velocity = 1.0) => {
|
4
|
+
let playing = true;
|
5
|
+
sender.noteOn(note, velocity);
|
6
|
+
return {
|
7
|
+
terminate: () => {
|
8
|
+
if (playing) {
|
9
|
+
sender.noteOff(note);
|
10
|
+
playing = false;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
};
|
14
|
+
};
|
15
|
+
})(NoteSustainer || (NoteSustainer = {}));
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { byte, Observer, Subscription, Terminable } from "@opendaw/lib-std";
|
2
|
+
import { Address } from "@opendaw/lib-box";
|
3
|
+
import { LiveStreamReceiver } from "@opendaw/lib-fusion";
|
4
|
+
export declare class NoteStreamReceiver implements Terminable {
|
5
|
+
#private;
|
6
|
+
constructor(receiver: LiveStreamReceiver, address: Address);
|
7
|
+
isNoteOn(note: byte): boolean;
|
8
|
+
isAnyNoteOn(): boolean;
|
9
|
+
subscribe(observer: Observer<this>): Subscription;
|
10
|
+
terminate(): void;
|
11
|
+
}
|
12
|
+
//# sourceMappingURL=NoteStreamReceiver.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"NoteStreamReceiver.d.ts","sourceRoot":"","sources":["../src/NoteStreamReceiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,IAAI,EAAY,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAA;AACrG,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAA;AAEtD,qBAAa,kBAAmB,YAAW,UAAU;;gBASrC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO;IAa1D,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAC7B,WAAW,IAAI,OAAO;IAEtB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAEjD,SAAS,IAAI,IAAI;CACpB"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { Bits, Notifier, Terminator } from "@opendaw/lib-std";
|
2
|
+
export class NoteStreamReceiver {
|
3
|
+
#terminator = new Terminator();
|
4
|
+
#receiver;
|
5
|
+
#address;
|
6
|
+
#bits;
|
7
|
+
#notifier;
|
8
|
+
constructor(receiver, address) {
|
9
|
+
this.#receiver = receiver;
|
10
|
+
this.#address = address;
|
11
|
+
this.#bits = new Bits(128);
|
12
|
+
this.#notifier = new Notifier();
|
13
|
+
this.#terminator.own(this.#receiver.subscribeIntegers(this.#address, (array) => {
|
14
|
+
if (this.#bits.replace(array.buffer)) {
|
15
|
+
this.#notifier.notify(this);
|
16
|
+
}
|
17
|
+
}));
|
18
|
+
}
|
19
|
+
isNoteOn(note) { return this.#bits.getBit(note); }
|
20
|
+
isAnyNoteOn() { return this.#bits.nonEmpty(); }
|
21
|
+
subscribe(observer) { return this.#notifier.subscribe(observer); }
|
22
|
+
terminate() { this.#terminator.terminate(); }
|
23
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { FieldKeys, PointerTypes, PrimitiveField, PrimitiveValues } from "@opendaw/lib-box";
|
2
|
+
import { StringMapping, Terminable, unitValue, ValueMapping } from "@opendaw/lib-std";
|
3
|
+
import { AutomatableParameterFieldAdapter } from "./AutomatableParameterFieldAdapter";
|
4
|
+
import { BoxAdaptersContext } from "./BoxAdaptersContext";
|
5
|
+
export declare class ParameterAdapterSet implements Terminable {
|
6
|
+
#private;
|
7
|
+
constructor(context: BoxAdaptersContext);
|
8
|
+
terminate(): void;
|
9
|
+
parameters(): ReadonlyArray<AutomatableParameterFieldAdapter>;
|
10
|
+
parameterAt(fieldIndices: FieldKeys): AutomatableParameterFieldAdapter;
|
11
|
+
createParameter<T extends PrimitiveValues>(field: PrimitiveField<T, PointerTypes>, valueMapping: ValueMapping<T>, stringMapping: StringMapping<T>, name: string, anchor?: unitValue): AutomatableParameterFieldAdapter<T>;
|
12
|
+
removeParameter<T extends PrimitiveValues>(parameter: AutomatableParameterFieldAdapter<T>): void;
|
13
|
+
}
|
14
|
+
//# sourceMappingURL=ParameterAdapterSet.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ParameterAdapterSet.d.ts","sourceRoot":"","sources":["../src/ParameterAdapterSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAA;AACzF,OAAO,EAA2C,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAA;AAC7H,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAA;AAEnF,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAEvD,qBAAa,mBAAoB,YAAW,UAAU;;gBAItC,OAAO,EAAE,kBAAkB;IAKvC,SAAS,IAAI,IAAI;IAKjB,UAAU,IAAI,aAAa,CAAC,gCAAgC,CAAC;IAC7D,WAAW,CAAC,YAAY,EAAE,SAAS,GAAG,gCAAgC;IAKtE,eAAe,CAAC,CAAC,SAAS,eAAe,EACrC,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,YAAY,CAAC,EACtC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,EAC7B,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,SAAS,GAAG,gCAAgC,CAAC,CAAC,CAAC;IAO5D,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,SAAS,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAAG,IAAI;CAGnG"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { assert, NumberArrayComparator, SortedSet } from "@opendaw/lib-std";
|
2
|
+
import { AutomatableParameterFieldAdapter } from "./AutomatableParameterFieldAdapter";
|
3
|
+
export class ParameterAdapterSet {
|
4
|
+
#context;
|
5
|
+
#parameters;
|
6
|
+
constructor(context) {
|
7
|
+
this.#context = context;
|
8
|
+
this.#parameters = new SortedSet(adapter => adapter.address.fieldKeys, NumberArrayComparator);
|
9
|
+
}
|
10
|
+
terminate() {
|
11
|
+
this.#parameters.forEach(parameter => parameter.terminate());
|
12
|
+
this.#parameters.clear();
|
13
|
+
}
|
14
|
+
parameters() { return this.#parameters.values(); }
|
15
|
+
parameterAt(fieldIndices) {
|
16
|
+
return this.#parameters.getOrThrow(fieldIndices, () => new Error(`No ParameterAdapter found at [${fieldIndices}]`));
|
17
|
+
}
|
18
|
+
createParameter(field, valueMapping, stringMapping, name, anchor) {
|
19
|
+
const adapter = new AutomatableParameterFieldAdapter(this.#context, field, valueMapping, stringMapping, name, anchor);
|
20
|
+
const added = this.#parameters.add(adapter);
|
21
|
+
assert(added, `Could not add adapter for ${field}`);
|
22
|
+
return adapter;
|
23
|
+
}
|
24
|
+
removeParameter(parameter) {
|
25
|
+
this.#parameters.removeByValue(parameter);
|
26
|
+
}
|
27
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Option, Terminable } from "@opendaw/lib-std";
|
2
|
+
import { Address } from "@opendaw/lib-box";
|
3
|
+
import { AutomatableParameterFieldAdapter } from "./AutomatableParameterFieldAdapter";
|
4
|
+
export declare class ParameterFieldAdapters {
|
5
|
+
#private;
|
6
|
+
constructor();
|
7
|
+
register(adapter: AutomatableParameterFieldAdapter): Terminable;
|
8
|
+
get(address: Address): AutomatableParameterFieldAdapter;
|
9
|
+
opt(address: Address): Option<AutomatableParameterFieldAdapter>;
|
10
|
+
}
|
11
|
+
//# sourceMappingURL=ParameterFieldAdapters.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ParameterFieldAdapters.d.ts","sourceRoot":"","sources":["../src/ParameterFieldAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAa,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAA;AAEnF,qBAAa,sBAAsB;;;IAO/B,QAAQ,CAAC,OAAO,EAAE,gCAAgC,GAAG,UAAU;IAK/D,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,gCAAgC;IACvD,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,gCAAgC,CAAC;CAClE"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { Address } from "@opendaw/lib-box";
|
2
|
+
export class ParameterFieldAdapters {
|
3
|
+
#set;
|
4
|
+
constructor() {
|
5
|
+
this.#set = Address.newSet(adapter => adapter.field.address);
|
6
|
+
}
|
7
|
+
register(adapter) {
|
8
|
+
this.#set.add(adapter);
|
9
|
+
return { terminate: () => this.#set.removeByValue(adapter) };
|
10
|
+
}
|
11
|
+
get(address) { return this.#set.get(address); }
|
12
|
+
opt(address) { return this.#set.opt(address); }
|
13
|
+
}
|