@opendaw/studio-core 0.0.7 → 0.0.8
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/dist/EngineWorklet.d.ts +0 -2
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/EngineWorklet.js +0 -4
- package/dist/MeterWorklet.d.ts +1 -4
- package/dist/MeterWorklet.d.ts.map +1 -1
- package/dist/MeterWorklet.js +1 -8
- package/dist/RecordingWorklet.d.ts +2 -5
- package/dist/RecordingWorklet.d.ts.map +1 -1
- package/dist/RecordingWorklet.js +2 -13
- package/dist/RenderQuantum.d.ts +2 -0
- package/dist/RenderQuantum.d.ts.map +1 -0
- package/dist/RenderQuantum.js +1 -0
- package/dist/Worklets.d.ts +3 -9
- package/dist/Worklets.d.ts.map +1 -1
- package/dist/Worklets.js +13 -18
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/processors.js +6 -0
- package/dist/processors.js.map +7 -0
- package/package.json +20 -24
- package/dist/WorkletFactory.d.ts +0 -8
- package/dist/WorkletFactory.d.ts.map +0 -1
- package/dist/WorkletFactory.js +0 -9
- package/dist/engine-processor.js +0 -6
- package/dist/engine-processor.js.map +0 -7
- package/dist/meter-processor.js +0 -2
- package/dist/meter-processor.js.map +0 -7
- package/dist/recording-processor.js +0 -4
- package/dist/recording-processor.js.map +0 -7
@@ -1,7 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"version": 3,
|
3
|
-
"sources": ["../../../lib/std/dist/lang.js", "../../../lib/std/dist/arrays.js", "../../../lib/std/dist/option.js", "../../../lib/std/dist/attempts.js", "../../../lib/std/dist/binary-search.js", "../../../lib/std/dist/bits.js", "../../../lib/std/dist/cache.js", "../../../lib/std/dist/color.js", "../../../lib/std/dist/comparators.js", "../../../lib/std/dist/math.js", "../../../lib/std/dist/curve.js", "../../../lib/std/dist/numeric.js", "../../../lib/std/dist/iterables.js", "../../../lib/std/dist/data.js", "../../../lib/std/dist/decorators.js", "../../../lib/std/dist/generators.js", "../../../lib/std/dist/geom.js", "../../../lib/std/dist/hash.js", "../../../lib/std/dist/intervals.js", "../../../lib/std/dist/listeners.js", "../../../lib/std/dist/maps.js", "../../../lib/std/dist/sets.js", "../../../lib/std/dist/multimap.js", "../../../lib/std/dist/objects.js", "../../../lib/std/dist/terminable.js", "../../../lib/std/dist/observers.js", "../../../lib/std/dist/value-mapping.js", "../../../lib/std/dist/string-mapping.js", "../../../lib/std/dist/predicates.js", "../../../lib/std/dist/progress.js", "../../../lib/std/dist/random.js", "../../../lib/std/dist/schema.js", "../../../lib/std/dist/sorted-set.js", "../../../lib/std/dist/strings.js", "../../../lib/std/dist/time-span.js", "../../../lib/std/dist/sync-stream.js", "../../../lib/std/dist/uuid.js", "../../../lib/std/dist/value-guides.js", "../../../lib/std/dist/index.js", "../../../lib/box/dist/address.js", "../../../lib/box/dist/pointer-hub.js", "../../../lib/box/dist/field.js", "../../../lib/box/dist/vertex.js", "../../../lib/box/dist/array.js", "../../../lib/box/dist/serializer.js", "../../../lib/box/dist/box.js", "../../../lib/box/dist/dispatchers.js", "../../../lib/box/dist/primitive.js", "../../../lib/box/dist/updates.js", "../../../lib/box/dist/pointer.js", "../../../lib/box/dist/graph-edges.js", "../../../lib/box/dist/graph.js", "../../../lib/box/dist/object.js", "../../../lib/runtime/dist/communicator.js", "../../../lib/runtime/dist/fetch.js", "../../../lib/runtime/dist/runtime.js", "../../../lib/runtime/dist/messenger.js", "../../../lib/runtime/dist/promises.js", "../../../lib/runtime/dist/network.js", "../../../lib/runtime/dist/stopwatch.js", "../../../lib/runtime/dist/timespan.js", "../../../lib/runtime/dist/wait.js", "../../../lib/runtime/dist/index.js", "../../../lib/box/dist/sync-target.js", "../../../lib/box/dist/index.js", "../../core-processors/src/TimeInfo.ts", "../../enums/dist/Pointers.js", "../../enums/dist/AudioUnitType.js", "../../adapters/dist/IndexComparator.js", "../../adapters/dist/SortedBoxAdapterCollection.js", "../../../lib/dsp/dist/biquad-coeff.js", "../../../lib/dsp/dist/biquad-processor.js", "../../../lib/dsp/dist/bpm-tools.js", "../../../lib/dsp/dist/chords.js", "../../../lib/dsp/dist/events.js", "../../../lib/dsp/dist/fft.js", "../../../lib/dsp/dist/ppqn.js", "../../../lib/dsp/dist/fractions.js", "../../../lib/dsp/dist/fragmentor.js", "../../../lib/dsp/dist/graph.js", "../../../lib/dsp/dist/grooves.js", "../../../lib/dsp/dist/midi-keys.js", "../../../lib/dsp/dist/notes.js", "../../../lib/dsp/dist/osc.js", "../../../lib/dsp/dist/stereo.js", "../../../lib/dsp/dist/ramp.js", "../../../lib/dsp/dist/rms.js", "../../../lib/dsp/dist/utils.js", "../../../lib/dsp/dist/value.js", "../../../lib/dsp/dist/window.js", "../../../lib/dsp/dist/index.js", "../../boxes/dist/io.js", "../../boxes/dist/PianoMode.js", "../../boxes/dist/RootBox.js", "../../boxes/dist/SelectionBox.js", "../../boxes/dist/UserInterfaceBox.js", "../../boxes/dist/Signature.js", "../../boxes/dist/LoopArea.js", "../../boxes/dist/MarkerTrack.js", "../../boxes/dist/TimelineBox.js", "../../boxes/dist/TrackBox.js", "../../boxes/dist/NoteEventBox.js", "../../boxes/dist/NoteEventRepeatBox.js", "../../boxes/dist/NoteEventCollectionBox.js", "../../boxes/dist/NoteRegionBox.js", "../../boxes/dist/ClipPlaybackFields.js", "../../boxes/dist/NoteClipBox.js", "../../boxes/dist/ValueEventBox.js", "../../boxes/dist/ValueEventCollectionBox.js", "../../boxes/dist/ValueEventCurveBox.js", "../../boxes/dist/ValueRegionBox.js", "../../boxes/dist/ValueClipBox.js", "../../boxes/dist/AudioRegionBox.js", "../../boxes/dist/AudioClipBox.js", "../../boxes/dist/MarkerBox.js", "../../boxes/dist/AudioFileBox.js", "../../boxes/dist/AudioUnitBox.js", "../../boxes/dist/AudioBusBox.js", "../../boxes/dist/AuxSendBox.js", "../../boxes/dist/StepAutomationBox.js", "../../boxes/dist/GrooveShuffleBox.js", "../../boxes/dist/DeviceInterfaceKnobBox.js", "../../boxes/dist/DeviceUserInterface.js", "../../boxes/dist/ModularDeviceBox.js", "../../boxes/dist/ClashStep.js", "../../boxes/dist/ClashPattern.js", "../../boxes/dist/DeviceClashBox.js", "../../boxes/dist/StereoToolDeviceBox.js", "../../boxes/dist/DelayDeviceBox.js", "../../boxes/dist/RevampPass.js", "../../boxes/dist/RevampShelf.js", "../../boxes/dist/RevampBell.js", "../../boxes/dist/RevampDeviceBox.js", "../../boxes/dist/ReverbDeviceBox.js", "../../boxes/dist/VaporisateurDeviceBox.js", "../../boxes/dist/NanoDeviceBox.js", "../../boxes/dist/PlayfieldDeviceBox.js", "../../boxes/dist/PlayfieldSampleBox.js", "../../boxes/dist/TapeDeviceBox.js", "../../boxes/dist/ArpeggioDeviceBox.js", "../../boxes/dist/PitchDeviceBox.js", "../../boxes/dist/ZeitgeistDeviceBox.js", "../../boxes/dist/ModularBox.js", "../../boxes/dist/ModuleConnectionBox.js", "../../boxes/dist/ModuleAttributes.js", "../../boxes/dist/ModularAudioInputBox.js", "../../boxes/dist/ModularAudioOutputBox.js", "../../boxes/dist/ModuleDelayBox.js", "../../boxes/dist/ModuleMultiplierBox.js", "../../boxes/dist/ModuleGainBox.js", "../../adapters/dist/timeline/event/InterpolationFieldAdapter.js", "../../adapters/dist/timeline/event/ValueEventBoxAdapter.js", "../../adapters/dist/timeline/collection/ValueEventCollectionBoxAdapter.js", "../../adapters/dist/timeline/clip/ValueClipBoxAdapter.js", "../../adapters/dist/audio/AudioFileBoxAdapter.js", "../../adapters/dist/timeline/clip/AudioClipBoxAdapter.js", "../../adapters/dist/timeline/event/NoteEventBoxAdapter.js", "../../adapters/dist/timeline/collection/NoteEventCollectionBoxAdapter.js", "../../adapters/dist/timeline/clip/NoteClipBoxAdapter.js", "../../adapters/dist/timeline/ClipBoxAdapter.js", "../../adapters/dist/timeline/TrackClips.js", "../../adapters/dist/timeline/region/AudioRegionBoxAdapter.js", "../../adapters/dist/timeline/region/NoteRegionBoxAdapter.js", "../../adapters/dist/timeline/region/ValueRegionBoxAdapter.js", "../../adapters/dist/timeline/RegionBoxAdapter.js", "../../adapters/dist/timeline/TrackRegions.js", "../../adapters/dist/IconSymbol.js", "../../adapters/dist/timeline/TrackType.js", "../../adapters/dist/devices.js", "../../adapters/dist/audio-unit/AudioUnitTracks.js", "../../adapters/dist/audio-unit/AudioBusBoxAdapter.js", "../../adapters/dist/audio-unit/AudioUnitInput.js", "../../adapters/dist/ParameterAdapterSet.js", "../../adapters/dist/audio-unit/AuxSendBoxAdapter.js", "../../adapters/dist/audio-unit/AudioUnitOutput.js", "../../adapters/dist/audio-unit/AudioUnitBoxAdapter.js", "../../adapters/dist/UpdateClockRate.js", "../../adapters/dist/timeline/TrackBoxAdapter.js", "../../adapters/dist/AutomatableParameterFieldAdapter.js", "../../adapters/dist/BoxAdapterCollection.js", "../../adapters/dist/devices/audio-effects/DelayDeviceBoxAdapter.js", "../../adapters/dist/devices/audio-effects/ReverbDeviceBoxAdapter.js", "../../adapters/dist/devices/audio-effects/RevampDeviceBoxAdapter.js", "../../adapters/dist/timeline/MarkerBoxAdapter.js", "../../adapters/dist/timeline/MarkerTrackAdapter.js", "../../adapters/dist/timeline/TimelineBoxAdapter.js", "../../adapters/dist/modular/connection.js", "../../adapters/dist/modular/abstract.js", "../../adapters/dist/modular/connector.js", "../../adapters/dist/modular/modules/delay.js", "../../adapters/dist/modular/modules/audio-output.js", "../../adapters/dist/modular/modules/gain.js", "../../adapters/dist/modular/modules/multiplier.js", "../../adapters/dist/modular/modules/audio-input.js", "../../adapters/dist/modular/module.js", "../../adapters/dist/modular/user-interface.js", "../../adapters/dist/devices/audio-effects/ModularDeviceBoxAdapter.js", "../../adapters/dist/modular/modular.js", "../../adapters/dist/grooves/GrooveShuffleBoxAdapter.js", "../../adapters/dist/FieldAdapter.js", "../../adapters/dist/PianoModeAdapter.js", "../../adapters/dist/RootBoxAdapter.js", "../../adapters/dist/devices/instruments/TapeDeviceBoxAdapter.js", "../../adapters/dist/devices/instruments/VaporisateurDeviceBoxAdapter.js", "../../adapters/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.js", "../../adapters/dist/devices/midi-effects/PitchDeviceBoxAdapter.js", "../../adapters/dist/devices/instruments/NanoDeviceBoxAdapter.js", "../../adapters/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.js", "../../adapters/dist/devices/instruments/PlayfieldDeviceBoxAdapter.js", "../../adapters/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.js", "../../adapters/dist/grooves/GrooveBoxAdapter.js", "../../adapters/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.js", "../../adapters/dist/BoxAdapters.js", "../../adapters/dist/EngineProcessorOptions.js", "../../adapters/dist/EngineStateSchema.js", "../../adapters/dist/NoteBroadcaster.js", "../../adapters/dist/NoteSender.js", "../../adapters/dist/ParameterFieldAdapters.js", "../../adapters/dist/ProjectDecoder.js", "../../adapters/dist/RingBuffer.js", "../../adapters/dist/unions.js", "../../adapters/dist/UnionAdapterTypes.js", "../../adapters/dist/devices/instruments/Playfield/Gate.js", "../../adapters/dist/timeline/RegionEditing.js", "../../core-processors/src/processing.ts", "../../core-processors/src/AudioBuffer.ts", "../../core-processors/src/PeakBroadcaster.ts", "../../core-processors/src/AutomatableParameter.ts", "../../core-processors/src/EventBuffer.ts", "../../core-processors/src/AbstractProcessor.ts", "../../core-processors/src/UpdateClock.ts", "../../core-processors/src/AudioProcessor.ts", "../../core-processors/src/devices/audio-effects/DelayDeviceDsp.ts", "../../core-processors/src/devices/audio-effects/DelayDeviceProcessor.ts", "../../core-processors/src/devices/audio-effects/NopDeviceProcessor.ts", "../../core-processors/src/AudioBusProcessor.ts", "../../core-processors/src/NoteEventSource.ts", "../../core-processors/src/NoteEventInstrument.ts", "../../core-processors/src/devices/instruments/VaporisateurDeviceProcessor.ts", "../../core-processors/src/devices/instruments/TapeDeviceProcessor.ts", "../../core-processors/src/EventProcessor.ts", "../../core-processors/src/devices/midi-effects/ArpeggioDevice/ArpeggioModes.ts", "../../core-processors/src/devices/midi-effects/ArpeggioDeviceProcessor.ts", "../../core-processors/src/devices/midi-effects/PitchDeviceProcessor.ts", "../../core-processors/src/SpectrumAnalyser.ts", "../../core-processors/src/devices/audio-effects/RevampDeviceProcessor.ts", "../../core-processors/src/FreeVerb.ts", "../../core-processors/src/devices/audio-effects/ReverbDeviceProcessor.ts", "../../core-processors/src/devices/instruments/NanoDeviceProcessor.ts", "../../core-processors/src/devices/instruments/Playfield/PlayfieldSequencer.ts", "../../core-processors/src/devices/instruments/Playfield/MixProcessor.ts", "../../core-processors/src/InsertReturnAudioChain.ts", "../../core-processors/src/devices/instruments/Playfield/SampleVoice.ts", "../../core-processors/src/devices/instruments/Playfield/SampleProcessor.ts", "../../core-processors/src/devices/instruments/PlayfieldDeviceProcessor.ts", "../../core-processors/src/devices/audio-effects/StereoToolDeviceProcessor.ts", "../../core-processors/src/devices/midi-effects/ZeitgeistDeviceProcessor.ts", "../../core-processors/src/DeviceProcessorFactory.ts", "../../core-processors/src/AuxSendProcessor.ts", "../../core-processors/src/ChannelStripProcessor.ts", "../../core-processors/src/AudioDeviceChain.ts", "../../core-processors/src/NoteSequencer.ts", "../../core-processors/src/MidiDeviceChain.ts", "../../core-processors/src/AudioUnit.ts", "../../core-processors/src/Mixer.ts", "../../../lib/dom/dist/browser.js", "../../../lib/dom/dist/compression.js", "../../../lib/dom/dist/console-commands.js", "../../../lib/dom/dist/context-2d.js", "../../../lib/dom/dist/css-utils.js", "../../../lib/dom/dist/frames.js", "../../../lib/dom/dist/events.js", "../../../lib/dom/dist/keyboard.js", "../../../lib/dom/dist/dragging.js", "../../../lib/dom/dist/errors.js", "../../../lib/dom/dist/files.js", "../../../lib/dom/dist/html.js", "../../../lib/dom/dist/modfier-keys.js", "../../../lib/dom/dist/stream.js", "../../../lib/dom/dist/svg.js", "../../../lib/dom/dist/terminable.js", "../../../lib/dom/dist/index.js", "../../../lib/fusion/dist/live-stream/PackageType.js", "../../../lib/fusion/dist/live-stream/Lock.js", "../../../lib/fusion/dist/live-stream/Flags.js", "../../../lib/fusion/dist/live-stream/LiveStreamBroadcaster.js", "../../../lib/fusion/dist/peaks/Peaks.js", "../../../lib/fusion/dist/peaks/PeakWorker.js", "../../../lib/fusion/dist/peaks/PeaksPainter.js", "../../../lib/fusion/dist/opfs/OpfsWorker.js", "../../../lib/fusion/dist/index.js", "../../core-processors/src/Metronome.ts", "../../core-processors/src/BlockRenderer.ts", "../../core-processors/src/AudioManagerWorklet.ts", "../../core-processors/src/ClipSequencingAudioContext.ts", "../../core-processors/src/AudioUnitOptions.ts", "../../core-processors/src/EngineProcessor.ts"],
|
4
|
-
"sourcesContent": ["export const identity = (value) => value;\nexport const isDefined = (value) => value !== undefined && value !== null;\nexport const ifDefined = (value, procedure) => { if (value !== undefined && value !== null) {\n procedure(value);\n} };\nexport const asDefined = (value, fail = \"asDefined failed\") => value === null || value === undefined ? panic(fail) : value;\nexport const isInstanceOf = (obj, clazz) => obj instanceof clazz;\nexport const asInstanceOf = (obj, clazz) => obj instanceof clazz ? obj : panic(`${obj} is not instance of ${clazz}`);\nexport const assertInstanceOf = (obj, clazz) => { if (!(obj instanceof clazz)) {\n panic(`${obj} is not instance of ${clazz}`);\n} };\nexport const tryProvide = (provider) => { try {\n return provider();\n}\ncatch (reason) {\n return panic(String(reason));\n} };\nexport const getOrProvide = (value) => value instanceof Function ? value() : value;\nexport const safeWrite = (object, property, value) => property in object ? object[property] = value : undefined;\nexport const safeExecute = (func, ...args) => func?.apply(null, args);\nexport const Unhandled = (empty) => { throw new Error(`Unhandled ${empty}`); };\nexport const panic = (issue) => { throw issue instanceof Error ? issue : new Error(issue); };\nexport const assert = (condition, fail) => condition ? undefined : panic(getOrProvide(fail));\nexport const checkIndex = (index, array) => index >= 0 && index < array.length ? index : panic(`Index ${index} is out of bounds`);\nexport const InaccessibleProperty = (failMessage) => new Proxy({}, { get() { return panic(failMessage); } });\nexport const canWrite = (obj, key) => {\n while (isDefined(obj)) {\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (isDefined(descriptor)) {\n return typeof descriptor.set === \"function\";\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n};\nexport const requireProperty = (object, key) => {\n const { status, value } = tryCatch(() => object instanceof Function ? object.name : object.constructor.name);\n const feature = status === \"failure\" ? `${object}.${String(key)}` : `${value}.${String(key)}`;\n console.debug(`%c${feature}%c available`, \"color: hsl(200, 83%, 60%)\", \"color: inherit\");\n if (!(key in object)) {\n throw feature;\n }\n};\nexport const tryCatch = (statement) => {\n try {\n return { error: null, value: statement(), status: \"success\" };\n }\n catch (error) {\n return { error, value: null, status: \"failure\" };\n }\n};\nexport const isValidIdentifier = (identifier) => /^[A-Za-z_$][A-Za-z0-9_]*$/.test(identifier);\nexport const asValidIdentifier = (identifier) => isValidIdentifier(identifier) ? identifier : panic(`'${identifier}' is not a valid identifier`);\nexport const EmptyExec = () => { };\nexport const EmptyProvider = () => { };\nexport const EmptyProcedure = (_) => { };\nexport const flipComparator = (comparator) => (a, b) => -comparator(a, b);\n", "import { asDefined, panic } from \"./lang\";\nexport var Sorting;\n(function (Sorting) {\n Sorting[Sorting[\"Ascending\"] = 1] = \"Ascending\";\n Sorting[Sorting[\"Descending\"] = -1] = \"Descending\";\n})(Sorting || (Sorting = {}));\nexport class Arrays {\n static #empty = Object.freeze(new Array(0));\n static empty = () => (() => this.#empty)();\n static clear = (array) => { array.length = 0; };\n static replace = (array, newValues) => {\n array.length = 0;\n array.push(...newValues);\n };\n static consume = (array, procedure) => {\n for (let index = 0; index < array.length;) {\n if (procedure(array[index])) {\n array.splice(index, 1);\n }\n else {\n index++;\n }\n }\n };\n static peekFirst = (array) => array.at(0) ?? null;\n static peekLast = (array) => array.at(-1) ?? null;\n static getFirst = (array, fail) => asDefined(array.at(0), fail);\n static getLast = (array, fail) => asDefined(array.at(-1), fail);\n static removeLast = (array, fail) => asDefined(array.pop(), fail);\n static create = (factory, n) => {\n const array = new Array(n);\n for (let i = 0; i < n; i++) {\n array[i] = factory(i);\n }\n return array;\n };\n static equals = (a, b) => {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n };\n /**\n * The satisfy method checks if all elements in a given array satisfy a provided predicate function\n * when compared with the first element of the array. That essentially means that all tested properties\n * in the predicate function are equal throughout the array.\n * [1, 1, 1, 1, 1] > (a, b) => a === b returns true\n * [1, 1, 1, 1, 2] > (a, b) => a === b returns false\n * [1, 1, 3, 2, 1] > (a, b) => a === b returns false\n */\n static satisfy = (array, predicate) => {\n if (array.length < 2) {\n return true;\n }\n const first = array[0];\n for (let i = 1; i < array.length; i++) {\n if (!predicate(first, array[i])) {\n return false;\n }\n }\n return true;\n };\n static remove = (array, element) => {\n const index = array.indexOf(element);\n if (index === -1) {\n return panic(`${element} not found in ${array}`);\n }\n array.splice(index, 1);\n };\n static removeOpt = (array, element) => {\n const index = array.indexOf(element);\n if (index === -1) {\n return false;\n }\n array.splice(index, 1);\n return true;\n };\n static hasDuplicates = (array) => new Set(array).size < array.length;\n static removeDuplicates = (array) => {\n let index = 0 | 0;\n const result = new Set();\n for (const element of array) {\n if (!result.has(element)) {\n result.add(element);\n array[index++] = element;\n }\n }\n array.length = index;\n return array;\n };\n static removeDuplicateKeys = (array, key) => {\n let index = 0 | 0;\n const seen = new Set();\n for (const element of array) {\n const value = element[key];\n if (!seen.has(value)) {\n seen.add(value);\n array[index++] = element;\n }\n }\n array.length = index;\n return array;\n };\n static *iterate(array) {\n for (let i = 0; i < array.length; i++) {\n yield array[i];\n }\n }\n static *iterateReverse(array) {\n for (let i = array.length - 1; i >= 0; i--) {\n yield array[i];\n }\n }\n static *iterateStateFull(array) {\n const maxIndex = array.length - 1;\n for (let i = 0; i <= maxIndex; i++) {\n yield { value: array[i], isFirst: i === 0, isLast: i === maxIndex };\n }\n }\n static isSorted(array, sorting = Sorting.Ascending) {\n if (array.length < 2) {\n return true;\n }\n let prev = array[0];\n for (let i = 1; i < array.length; i++) {\n const next = array[i];\n if (Math.sign(prev - next) === sorting) {\n return false;\n }\n prev = next;\n }\n return true;\n }\n}\n", "import { asDefined, getOrProvide, isDefined, panic } from \"./lang\";\nexport var Option;\n(function (Option) {\n Option.wrap = (value) => isDefined(value) ? new Some(value) : Option.None;\n Option.from = (provider) => Option.wrap(provider());\n Option.tryFrom = (provider) => {\n try {\n return Option.wrap(provider());\n }\n catch (_error) {\n return Option.None;\n }\n };\n Option.execute = (func, ...args) => Option.wrap(func?.apply(null, args));\n Option.async = (promise) => promise.then(value => Option.wrap(value), () => Option.None);\n class Some {\n #value;\n constructor(value) { this.#value = asDefined(value); }\n unwrap() { return this.#value; }\n unwrapOrElse(_) { return this.#value; }\n unwrapOrNull() { return this.#value; }\n unwrapOrUndefined() { return this.#value; }\n contains(value) { return value === this.#value; }\n match(matchable) { return matchable.some(this.#value); }\n ifSome(run) { return run(this.#value); }\n isEmpty() { return false; }\n nonEmpty() { return true; }\n map(callback) { return Option.wrap(callback(this.#value)); }\n mapOr(func, _or) { return func(this.#value); }\n flatMap(callback) { return callback(this.#value); }\n equals(other) { return this.unwrapOrNull() === other.unwrapOrNull(); }\n assert(_fail) { return this; }\n toString() { return `{Option.Some(${this.#value})}`; }\n get [Symbol.toStringTag]() { return this.toString(); }\n }\n Option.Some = Some;\n Option.None = new class {\n unwrap = (fail) => panic(isDefined(fail) ? getOrProvide(fail) : \"unwrap failed\");\n unwrapOrElse = (value) => getOrProvide(value);\n unwrapOrNull = () => null;\n unwrapOrUndefined = () => undefined;\n contains = (_) => false;\n match = (matchable) => matchable.none();\n ifSome = (_) => { };\n isEmpty = () => true;\n nonEmpty = () => false;\n map = (_) => Option.None;\n mapOr = (_, or) => getOrProvide(or);\n flatMap = (_) => Option.None;\n equals = (other) => other.isEmpty();\n assert = (fail) => panic(getOrProvide(fail) ?? \"assert failed\");\n toString = () => \"{Option.None}\";\n get [Symbol.toStringTag]() { return this.toString(); }\n };\n})(Option || (Option = {}));\n", "import { Option } from \"./option\";\nexport var Attempts;\n(function (Attempts) {\n Attempts.async = (promise) => promise.then(value => Attempts.ok(value), reason => Attempts.err(reason));\n Attempts.tryGet = (provider) => {\n try {\n return Attempts.ok(provider());\n }\n catch (reason) {\n return Attempts.err(reason);\n }\n };\n Attempts.ok = (result) => new class {\n value;\n constructor(value) {\n this.value = value;\n }\n asOption = () => Option.wrap(this.value);\n failureReason = () => { throw new Error(\"Attempt was successful.\"); };\n isFailure = () => false;\n isSuccess = () => true;\n result = () => this.value;\n map = (map) => {\n try {\n return Attempts.ok(map(this.value));\n }\n catch (reason) {\n return Attempts.err(reason);\n }\n };\n flatMap = (map) => map(this.value);\n match = (matchable) => matchable.ok(this.value);\n toVoid = () => Attempts.ok(undefined);\n failure = () => { throw new Error(\"Attempt was successful.\"); };\n toString = () => `{Success: ${this.value}`;\n get [Symbol.toStringTag]() { return \"Success\"; }\n }(result);\n Attempts.Ok = new class {\n constructor() { }\n asOption = () => Option.None;\n failureReason = () => { throw new Error(\"Attempt was successful.\"); };\n isFailure = () => false;\n isSuccess = () => true;\n result = () => undefined;\n map = (map) => Attempts.ok(map());\n flatMap = (map) => map();\n match = (matchable) => matchable.ok();\n toVoid = () => Attempts.ok(undefined);\n failure = () => { throw new Error(\"Attempt was successful.\"); };\n toString = () => `{Success: Ok`;\n get [Symbol.toStringTag]() { return \"Success\"; }\n }();\n Attempts.err = (reason) => new class {\n reason;\n constructor(reason) {\n this.reason = reason;\n }\n asOption = () => Option.None;\n failureReason = () => this.reason;\n isFailure = () => true;\n isSuccess = () => false;\n result = () => { throw new Error(`No result because '${this.reason}'`); };\n map = () => this;\n flatMap = () => this;\n match = (matchable) => matchable.err(this.reason);\n toVoid = () => Attempts.err(this.reason);\n failure = () => this;\n toString = () => `{Failure: ${this.reason}`;\n get [Symbol.toStringTag]() { return \"Failure\"; }\n }(reason);\n})(Attempts || (Attempts = {}));\n", "// https://en.wikipedia.org/wiki/Binary_search_algorithm\n//\nexport var BinarySearch;\n(function (BinarySearch) {\n BinarySearch.exact = (sorted, key, comparator) => {\n let l = 0 | 0;\n let r = sorted.length - 1;\n while (l <= r) {\n const m = (l + r) >>> 1;\n const cmp = comparator(sorted[m], key);\n if (cmp === 0) {\n return m;\n }\n if (cmp < 0) {\n l = m + 1;\n }\n else {\n r = m - 1;\n }\n }\n return -1;\n };\n BinarySearch.exactMapped = (sorted, key, comparator, map) => {\n let l = 0 | 0;\n let r = sorted.length - 1;\n while (l <= r) {\n const m = (l + r) >>> 1;\n const cmp = comparator(map(sorted[m]), key);\n if (cmp === 0) {\n return m;\n }\n if (cmp < 0) {\n l = m + 1;\n }\n else {\n r = m - 1;\n }\n }\n return -1;\n };\n BinarySearch.leftMost = (sorted, key, comparator) => {\n let l = 0 | 0;\n let r = sorted.length;\n while (l < r) {\n const m = (l + r) >>> 1;\n if (comparator(sorted[m], key) < 0) {\n l = m + 1;\n }\n else {\n r = m;\n }\n }\n return l;\n };\n BinarySearch.rightMost = (sorted, key, comparator) => {\n let l = 0 | 0;\n let r = sorted.length;\n while (l < r) {\n const m = (l + r) >>> 1;\n if (comparator(sorted[m], key) <= 0) {\n l = m + 1;\n }\n else {\n r = m;\n }\n }\n return r - 1;\n };\n BinarySearch.leftMostMapped = (sorted, key, comparator, map) => {\n let l = 0 | 0;\n let r = sorted.length;\n while (l < r) {\n const m = (l + r) >>> 1;\n if (comparator(map(sorted[m]), key) < 0) {\n l = m + 1;\n }\n else {\n r = m;\n }\n }\n return l;\n };\n BinarySearch.rightMostMapped = (sorted, key, comparator, map) => {\n let l = 0 | 0;\n let r = sorted.length;\n while (l < r) {\n const m = (l + r) >>> 1;\n if (comparator(map(sorted[m]), key) <= 0) {\n l = m + 1;\n }\n else {\n r = m;\n }\n }\n return r - 1;\n };\n BinarySearch.rangeMapped = (sorted, key, comparator, map) => [BinarySearch.leftMostMapped(sorted, key, comparator, map), BinarySearch.rightMostMapped(sorted, key, comparator, map)];\n})(BinarySearch || (BinarySearch = {}));\n", "import { Arrays } from \"./arrays\";\nexport class Bits {\n static every = (set, flag) => (set & flag) === flag;\n static some = (set, flag) => (set & flag) > 0;\n #numBits;\n #array;\n constructor(numBits = 32) {\n this.#numBits = numBits;\n this.#array = new Uint32Array(((numBits - 1) >>> 5) + 1);\n }\n getBit(index) {\n const arrayIndex = index >>> 5;\n const byte = 1 << (index - (arrayIndex << 5));\n return (this.#array[arrayIndex] & byte) !== 0;\n }\n setBit(index, value) {\n const arrayIndex = index >>> 5;\n const byte = 1 << (index - (arrayIndex << 5));\n const was = this.#array[arrayIndex];\n const val = value ? was | byte : was & ~byte;\n if (val === was) {\n return false;\n }\n this.#array[arrayIndex] = val;\n return true;\n }\n isEmpty() { return this.#array.every(value => value === 0); }\n nonEmpty() { return this.#array.some(value => value > 0); }\n set buffer(value) { this.#array.set(new Uint32Array(value)); }\n get buffer() { return this.#array.buffer; }\n replace(buffer) {\n const source = new Uint32Array(buffer);\n if (source.every((value, index) => this.#array[index] === value)) {\n return false;\n }\n this.#array.set(source);\n return true;\n }\n toString() {\n let result = \"\";\n for (const value of Arrays.iterateReverse(this.#array)) {\n result += value.toString(2).padStart(32, \"0\");\n }\n return result.substring(result.length - this.#numBits);\n }\n clear() { this.#array.fill(0); }\n}\n", "export class Cache {\n #provider;\n #value = null;\n constructor(provider) { this.#provider = provider; }\n invalidate = () => this.#value = null;\n get() {\n if (this.#value === null) {\n this.#value = this.#provider();\n }\n return this.#value;\n }\n terminate() { this.invalidate(); }\n}\n", "import { isDefined } from \"./lang\";\nexport var Color;\n(function (Color) {\n Color.parseCssRgbOrRgba = (color) => {\n const colorValues = color.match(/\\(([^)]+)\\)/)?.at(1)?.split(\",\")?.map(Number);\n if (isDefined(colorValues) && colorValues.every(value => !isNaN(value))) {\n if (colorValues.length === 3) {\n return [\n colorValues[0] / 255.0,\n colorValues[1] / 255.0,\n colorValues[2] / 255.0,\n 1.0\n ];\n }\n else if (colorValues.length === 4) {\n return [\n colorValues[0] / 255.0,\n colorValues[1] / 255.0,\n colorValues[2] / 255.0,\n colorValues[3]\n ];\n }\n }\n throw new Error(`${color} is not proper formatted. Example: 'rgb(255, 255, 255)' or 'rgba(255, 255, 255, 1)'`);\n };\n})(Color || (Color = {}));\n", "export const StringComparator = (a, b) => a > b ? 1 : b > a ? -1 : 0;\nexport const NumberComparator = (a, b) => a - b;\nexport const NumberArrayComparator = (a, b) => {\n const n = Math.min(a.length, b.length);\n for (let i = 0; i < n; i++) {\n const comparison = a[i] - b[i];\n if (comparison !== 0.0) {\n return comparison;\n }\n }\n return a.length - b.length;\n};\n", "// noinspection JSUnusedGlobalSymbols\nexport const TAU = Math.PI * 2.0;\nexport const PI_HALF = Math.PI / 2.0;\nexport const PI_QUART = Math.PI / 4.0;\nexport const INVERSE_SQRT_2 = 1.0 / Math.sqrt(2.0);\nexport const clamp = (value, min, max) => Math.max(min, Math.min(value, max));\nexport const clampUnit = (value) => Math.max(0.0, Math.min(value, 1.0));\nexport const squashUnit = (value, margin) => margin + (1.0 - 2.0 * margin) * Math.max(0.0, Math.min(value, 1.0));\nexport const quantizeFloor = (value, interval) => Math.floor(value / interval) * interval;\nexport const quantizeCeil = (value, interval) => Math.ceil(value / interval) * interval;\nexport const quantizeRound = (value, interval) => Math.round(value / interval) * interval;\nexport const linear = (y1, y2, mu) => y1 + (y2 - y1) * mu;\nexport const cosine = (y1, y2, mu) => {\n const mu2 = (1.0 - Math.cos(mu * Math.PI)) * 0.5;\n return y1 * (1.0 - mu2) + y2 * mu2;\n};\nexport const mod = (value, range) => fract(value / range) * range;\nexport const fract = (value) => value - Math.floor(value);\nexport const nextPowOf2 = (n) => Math.pow(2, Math.ceil(Math.log(n) / Math.log(2)));\nexport const radToDeg = (rad) => rad * 180.0 / Math.PI;\nexport const degToRad = (deg) => deg / 180.0 * Math.PI;\n// M\u00F6bius-Ease Curve\n// Only produces valid values between 0 and 1 (unitValues)\n// https://www.desmos.com/calculator/ht8cytaxsz\n// The inverse is h`=1-h\nexport const moebiusEase = (x, h) => (x * h) / ((2.0 * h - 1.0) * (x - 1.0) + h);\n", "import { clamp } from \"./math\";\n/**\n * original: http://werner.yellowcouch.org/Papers/fastenv12/index.html\n */\nexport var Curve;\n(function (Curve) {\n const EPLISON = 1.0e-15;\n Curve.valueAt = ({ slope, steps, y0, y1 }, x) => Curve.normalizedAt(x / steps, slope) * (y1 - y0) + y0;\n // https://www.desmos.com/calculator/9lwjajcfkw\n Curve.normalizedAt = (x, slope) => {\n if (slope > 0.499999 && slope < 0.500001) {\n return x;\n }\n else {\n const p = clamp(slope, EPLISON, 1.0 - EPLISON);\n return (p * p) / (1.0 - p * 2.0) * (Math.pow((1.0 - p) / p, 2.0 * x) - 1.0);\n }\n };\n Curve.inverseAt = (y, slope) => {\n const p = clamp(slope, EPLISON, 1.0 - EPLISON);\n return Math.log((y * (1.0 - 2.0 * p) / (p * p)) + 1.0) / (2.0 * Math.log((1.0 - p) / p));\n };\n Curve.coefficients = (definition) => {\n const f1 = Curve.valueAt(definition, 1.0);\n const f2 = Curve.valueAt(definition, 2.0);\n const m = (f2 - f1) / (f1 - definition.y0);\n const q = f1 - m * definition.y0;\n return { m, q };\n };\n function* walk(slope, steps, y0, y1) {\n const { m, q } = Curve.coefficients({ slope, steps, y0, y1 });\n for (let i = 0, v = y0; i < steps; i++) {\n yield v = m * v + q;\n }\n }\n Curve.walk = walk;\n function* walkNormalized(slope, steps) {\n const d = 1.0 / steps;\n const f1 = Curve.normalizedAt(d, slope);\n const f2 = Curve.normalizedAt(2.0 * d, slope);\n const m = (f2 - f1) / f1;\n for (let i = 0, v = 0.0; i < steps; i++) {\n yield v = m * v + f1;\n }\n }\n Curve.walkNormalized = walkNormalized;\n Curve.byHalf = (steps, y0, ym, y1) => ({\n slope: Curve.slopeByHalf(y0, ym, y1), steps, y0, y1\n });\n Curve.slopeByHalf = (y0, ym, y1) => Math.abs(y1 - y0) < 0.000001 ? 0.5 : (ym - y0) / (y1 - y0);\n})(Curve || (Curve = {}));\n", "const dataView = new DataView(new ArrayBuffer(8));\nexport var Integer;\n(function (Integer) {\n Integer.MIN_VALUE = -0x80000000;\n Integer.MAX_VALUE = 0x7fffffff;\n Integer.toByte = (value) => {\n dataView.setInt8(0, value);\n return dataView.getInt8(0);\n };\n Integer.toShort = (value) => {\n dataView.setInt16(0, value);\n return dataView.getInt16(0);\n };\n Integer.toInt = (value) => {\n dataView.setInt32(0, value);\n return dataView.getInt32(0);\n };\n})(Integer || (Integer = {}));\nexport var Float;\n(function (Float) {\n const EXP_BIT_MASK = 2139095040;\n const SIGNIFICANT_BIT_MASK = 8388607;\n const ARRAY_BUFFER = new ArrayBuffer(Float32Array.BYTES_PER_ELEMENT);\n const FLOAT_VIEW = new Float32Array(ARRAY_BUFFER);\n const INT_VIEW = new Int32Array(ARRAY_BUFFER);\n /**\n * Returns a representation of the specified floating-point value\n * according to the IEEE 754 floating-point \"single format\" bit layout.\n * @param value a floating-point number.\n * @returns the bits that represent the floating-point number.\n */\n Float.floatToIntBits = (value) => {\n const result = Float.floatToRawIntBits(value);\n if ((result & EXP_BIT_MASK) === EXP_BIT_MASK && (result & SIGNIFICANT_BIT_MASK) !== 0) {\n return 0x7fc00000;\n }\n return result;\n };\n Float.intBitsToFloat = (value) => {\n INT_VIEW[0] = value;\n return FLOAT_VIEW[0];\n };\n Float.floatToRawIntBits = (value) => {\n FLOAT_VIEW[0] = value;\n return INT_VIEW[0];\n };\n Float.toFloat32 = (value) => {\n dataView.setFloat32(0, value);\n return dataView.getFloat32(0);\n };\n})(Float || (Float = {}));\nexport var Float16;\n(function (Float16) {\n Float16.floatToIntBits = (value) => {\n const bits = Float.floatToIntBits(value);\n const sign = bits >>> 16 & 0x8000;\n let val = (bits & 0x7fffffff) + 0x1000;\n if (val >= 0x47800000) {\n if ((bits & 0x7fffffff) >= 0x47800000) {\n if (val < 0x7f800000) {\n return sign | 0x7c00;\n }\n return sign | 0x7c00 | (bits & 0x007fffff) >>> 13;\n }\n return sign | 0x7bff;\n }\n if (val >= 0x38800000) {\n return sign | val - 0x38000000 >>> 13;\n }\n if (val < 0x33000000) {\n return sign;\n }\n val = (bits & 0x7fffffff) >>> 23;\n return sign | ((bits & 0x7fffff | 0x800000) + (0x800000 >>> val - 102) >>> 126 - val);\n };\n Float16.intBitsToFloat = (bits) => {\n let mantissa = bits & 0x03ff;\n let exp = bits & 0x7c00;\n if (exp === 0x7c00) {\n exp = 0x3fc00;\n }\n else if (exp !== 0) {\n exp += 0x1c000;\n if (mantissa === 0 && exp > 0x1c400) {\n return Float.intBitsToFloat((bits & 0x8000) << 16 | exp << 13 | 0x3ff);\n }\n }\n else if (mantissa !== 0) {\n exp = 0x1c400;\n do {\n mantissa <<= 1;\n exp -= 0x400;\n } while ((mantissa & 0x400) === 0);\n mantissa &= 0x3ff;\n }\n return Float.intBitsToFloat((bits & 0x8000) << 16 | (exp | mantissa) << 13);\n };\n})(Float16 || (Float16 = {}));\nexport var Float64;\n(function (Float64) {\n const EXP_BIT_MASK = 9218868437227405312n;\n const SIGNIFICANT_BIT_MASK = 4503599627370495n;\n const ARRAY_BUFFER = new ArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT);\n const FLOAT64_VIEW = new Float64Array(ARRAY_BUFFER);\n const LONG_VIEW = new BigInt64Array(ARRAY_BUFFER);\n Float64.float64ToLongBits = (value) => {\n const result = Float64.float64ToRawLongBits(value);\n if ((result & EXP_BIT_MASK) === EXP_BIT_MASK && (result & SIGNIFICANT_BIT_MASK) !== 0n) {\n return 0x7ff8000000000000n;\n }\n return result;\n };\n Float64.longBitsToFloat64 = (value) => {\n LONG_VIEW[0] = value;\n return FLOAT64_VIEW[0];\n };\n Float64.float64ToRawLongBits = (value) => {\n FLOAT64_VIEW[0] = value;\n return LONG_VIEW[0];\n };\n Float64.clamp = (value) => {\n dataView.setFloat64(0, value);\n return dataView.getFloat64(0);\n };\n})(Float64 || (Float64 = {}));\n", "import { isDefined } from \"./lang\";\nexport class Iterables {\n static *empty() { }\n static one(value) { return [value]; }\n static count(iterable) {\n let count = 0 | 0;\n for (const _ of iterable) {\n count++;\n }\n return count;\n }\n static some(iterable, predicate) {\n for (const value of iterable) {\n if (predicate(value)) {\n return true;\n }\n }\n return false;\n }\n static every(iterable, predicate) {\n for (const value of iterable) {\n if (!predicate(value)) {\n return false;\n }\n }\n return true;\n }\n static reduce(iterable, callback, initialValue) {\n let accumulator = initialValue;\n let index = 0;\n for (const value of iterable) {\n accumulator = callback(accumulator, value, index++);\n }\n return accumulator;\n }\n static includes(iterable, include) {\n for (const value of iterable) {\n if (value === include) {\n return true;\n }\n }\n return false;\n }\n static forEach(iterable, procedure) {\n for (const value of iterable) {\n procedure(value);\n }\n }\n static *map(iterable, map) {\n let count = 0 | 0;\n for (const value of iterable) {\n yield map(value, count++);\n }\n }\n static *take(iterator, count) {\n let i = 0;\n for (const value of iterator) {\n if (i++ >= count) {\n return;\n }\n yield value;\n }\n }\n static filter(iterable, fn) {\n const result = [];\n for (const value of iterable) {\n if (fn(value)) {\n result.push(value);\n }\n }\n return result;\n }\n static filterMap(iterable, fn) {\n const result = [];\n for (const value of iterable) {\n const mapped = fn(value);\n if (isDefined(mapped)) {\n result.push(mapped);\n }\n }\n return result;\n }\n static reverse(iterable) {\n const result = [];\n for (const value of iterable) {\n result.push(value);\n }\n return result.reverse();\n }\n static *pairWise(iterable) {\n const iterator = iterable[Symbol.iterator]();\n const { done, value } = iterator.next();\n let prev = value;\n if (done === true) {\n return;\n }\n while (true) {\n const { done, value } = iterator.next();\n if (done === true) {\n yield [prev, null];\n return;\n }\n yield [prev, value];\n prev = value;\n }\n }\n}\n", "import { panic } from \"./lang\";\nimport { nextPowOf2 } from \"./math\";\nimport { Float, Float64 } from \"./numeric\";\nimport { Iterables } from \"./iterables\";\nexport class ByteArrayOutput {\n static create(initialCapacity = 1024) {\n return this.use(new ArrayBuffer(initialCapacity));\n }\n static use(buffer, byteOffset = 0 | 0) {\n return new ByteArrayOutput(new DataView(buffer, byteOffset));\n }\n littleEndian = false;\n #view;\n #position = 0;\n constructor(view) { this.#view = view; }\n get remaining() { return this.#view.byteLength - this.#position; }\n get position() { return this.#position; }\n set position(value) {\n if (value < 0) {\n panic(`position(${value}) cannot be negative.`);\n }\n else if (value > this.#view.byteLength) {\n panic(`position(${value}) is outside range (${this.#view.byteLength}).`);\n }\n else {\n this.#position = value;\n }\n }\n writeBoolean(value) { this.writeByte(value ? 1 : 0); }\n writeByte(value) {\n this.#ensureSpace(1);\n this.#view.setInt8(this.#position++, value);\n }\n writeShort(value) {\n this.#ensureSpace(Int16Array.BYTES_PER_ELEMENT);\n this.#view.setInt16(this.#position, value, this.littleEndian);\n this.#position += Int16Array.BYTES_PER_ELEMENT;\n }\n writeInt(value) {\n this.#ensureSpace(Int32Array.BYTES_PER_ELEMENT);\n this.#view.setInt32(this.#position, value, this.littleEndian);\n this.#position += Int32Array.BYTES_PER_ELEMENT;\n }\n writeLong(value) {\n this.#ensureSpace(BigInt64Array.BYTES_PER_ELEMENT);\n this.#view.setBigInt64(this.#position, value, this.littleEndian);\n this.#position += BigInt64Array.BYTES_PER_ELEMENT;\n }\n writeFloat(value) {\n this.#ensureSpace(Float32Array.BYTES_PER_ELEMENT);\n this.#view.setFloat32(this.#position, value, this.littleEndian);\n this.#position += Float32Array.BYTES_PER_ELEMENT;\n }\n writeDouble(value) {\n this.#ensureSpace(Float64Array.BYTES_PER_ELEMENT);\n this.#view.setFloat64(this.#position, value, this.littleEndian);\n this.#position += Float64Array.BYTES_PER_ELEMENT;\n }\n writeBytes(bytes) {\n this.#ensureSpace(bytes.length);\n for (let i = 0; i < bytes.length; ++i) {\n this.#view.setInt8(this.#position++, bytes[i]);\n }\n }\n writeString(value) {\n const length = value.length;\n this.#ensureSpace(Int32Array.BYTES_PER_ELEMENT + length * Int16Array.BYTES_PER_ELEMENT);\n this.writeInt(length);\n for (let i = 0; i < length; i++) {\n this.writeShort(value.charCodeAt(i));\n }\n }\n toArrayBuffer() { return this.#view.buffer.slice(0, this.#position); }\n #ensureSpace(count) {\n const capacity = this.#view.byteLength;\n if (this.#position + count > capacity) {\n const o = this.#view;\n this.#view = new DataView(new ArrayBuffer(nextPowOf2(capacity + count)));\n for (let i = 0; i < this.#position; i++) {\n this.#view.setInt8(i, o.getInt8(i));\n }\n }\n }\n}\nexport class ByteCounter {\n #count = 0 | 0;\n writeByte(_) { this.#count++; }\n writeShort(_) { this.#count += 2; }\n writeInt(_) { this.#count += 4; }\n writeLong(_) { this.#count += 8; }\n writeFloat(_) { this.#count += 4; }\n writeDouble(_) { this.#count += 8; }\n writeBoolean(_) { this.#count++; }\n writeBytes(bytes) { this.#count += bytes.length; }\n writeString(value) { this.#count += value.length + 4; }\n get count() { return this.#count; }\n}\nexport class Checksum {\n #result;\n #cursor = 0;\n constructor(length = 32) {\n this.#result = new Int8Array(length);\n }\n result() { return this.#result; }\n equals(other) {\n if (other === this) {\n return true;\n }\n return this.#result.every((value, index) => other.#result[index] === value);\n }\n writeBoolean(value) {\n this.writeByte(value ? 31 : 11);\n }\n writeShort(value) {\n this.writeByte(value & 0xff);\n this.writeByte((value >>> 8) & 0xff);\n }\n writeByte(value) {\n if (this.#cursor >= this.#result.length) {\n this.#cursor = 0;\n }\n this.#result[this.#cursor++] ^= value;\n }\n writeInt(value) {\n this.writeByte(value & 0xff);\n this.writeByte((value >>> 8) & 0xff);\n this.writeByte((value >>> 16) & 0xff);\n this.writeByte((value >>> 24) & 0xff);\n }\n writeBytes(bytes) {\n bytes.forEach(value => this.writeByte(value));\n }\n writeFloat(value) {\n this.writeInt(Float.floatToIntBits(value));\n }\n writeDouble(value) {\n this.writeLong(Float64.float64ToLongBits(value));\n }\n writeLong(value) {\n this.writeByte(Number(value) & 0xff);\n this.writeByte(Number(value >> 8n) & 0xff);\n this.writeByte(Number(value >> 16n) & 0xff);\n this.writeByte(Number(value >> 24n) & 0xff);\n this.writeByte(Number(value >> 32n) & 0xff);\n this.writeByte(Number(value >> 40n) & 0xff);\n this.writeByte(Number(value >> 48n) & 0xff);\n this.writeByte(Number(value >> 56n) & 0xff);\n }\n writeString(value) {\n for (let i = 0; i < value.length; i++) {\n this.writeShort(value.charCodeAt(i));\n }\n }\n toHexString() {\n return Array.from(Iterables.map(this.#result.values(), value => (value & 0xff).toString(16).padStart(2, \"0\"))).join(\"\");\n }\n}\nexport class ByteArrayInput {\n littleEndian = false;\n #view;\n #position = 0;\n constructor(buffer, byteOffset = 0) { this.#view = new DataView(buffer, byteOffset); }\n get position() { return this.#position; }\n set position(value) {\n if (value < 0) {\n panic(`position(${value}) cannot be negative.`);\n }\n else if (value > this.#view.byteLength) {\n panic(`position(${value}) is outside range (${this.#view.byteLength}).`);\n }\n else {\n this.#position = value;\n }\n }\n readByte() { return this.#view.getInt8(this.#position++); }\n readShort() {\n const read = this.#view.getInt16(this.#position, this.littleEndian);\n this.#position += Int16Array.BYTES_PER_ELEMENT;\n return read;\n }\n readInt() {\n const read = this.#view.getInt32(this.#position, this.littleEndian);\n this.#position += Int32Array.BYTES_PER_ELEMENT;\n return read;\n }\n readLong() {\n const read = this.#view.getBigInt64(this.#position, this.littleEndian);\n this.#position += BigInt64Array.BYTES_PER_ELEMENT;\n return read;\n }\n readFloat() {\n const read = this.#view.getFloat32(this.#position, this.littleEndian);\n this.#position += Float32Array.BYTES_PER_ELEMENT;\n return read;\n }\n readDouble() {\n const read = this.#view.getFloat64(this.#position, this.littleEndian);\n this.#position += Float64Array.BYTES_PER_ELEMENT;\n return read;\n }\n readBoolean() { return this.readByte() === 1; }\n readBytes(array) {\n for (let i = 0; i < array.length; i++) {\n array[i] = this.readByte();\n }\n }\n readString() {\n const length = this.readInt();\n let result = \"\";\n for (let i = 0; i < length; i++) {\n result += String.fromCharCode(this.readShort());\n }\n return result;\n }\n available(count) { return this.#position + count <= this.#view.byteLength; }\n remaining() { return this.#view.byteLength - this.#position; }\n skip(count) { this.position += count; }\n}\n", "import { asDefined, isDefined, panic } from \"./lang\";\nconst findMethodType = (descriptor) => {\n if (!isDefined(descriptor)) {\n return panic(\"Cannot resolve method key of undefined descriptor\");\n }\n if (descriptor.value !== undefined) {\n return \"value\";\n }\n if (descriptor.get !== undefined) {\n return \"get\";\n }\n return panic(`Cannot resolve method key of ${descriptor}`);\n};\nexport const Lazy = (_, property, descriptor) => {\n // For stage 3 decorators, we need to handle the case where the descriptor might be undefined\n // and return a proper descriptor or function\n if (!isDefined(descriptor)) {\n // This is likely a stage 3 decorator call - return a function that returns the descriptor\n return function (_, context) {\n if (context && context.kind === \"getter\") {\n return function () {\n const originalDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this), property);\n if (!isDefined(originalDescriptor?.get)) {\n return panic(`Cannot find getter for property '${property}'`);\n }\n const value = originalDescriptor.get.apply(this);\n Object.defineProperty(this, property, {\n value: value,\n configurable: false,\n writable: false,\n enumerable: false\n });\n return value;\n };\n }\n // Fallback for other cases\n return undefined;\n };\n }\n const methodType = findMethodType(descriptor);\n const element = asDefined(descriptor[methodType]);\n return {\n [methodType]: function (...args) {\n if (args.length > 0) {\n return panic(\"lazy accessory must not have any construction parameters\");\n }\n const value = element.apply(this);\n Object.defineProperty(this, property, {\n value: methodType === \"get\" ? value : () => value,\n configurable: false,\n writable: false,\n enumerable: false\n });\n return value;\n }\n };\n};\n", "export var Generators;\n(function (Generators) {\n function* empty() { return; }\n Generators.empty = empty;\n Generators.next = (generator) => {\n const { value, done } = generator.next();\n return done ? null : value;\n };\n function* flatten(...generators) {\n for (const generator of generators) {\n for (const value of generator) {\n yield value;\n }\n }\n }\n Generators.flatten = flatten;\n})(Generators || (Generators = {}));\n", "import { Unhandled } from \"./lang\";\nimport { clamp } from \"./math\";\nexport var Axis;\n(function (Axis) {\n Axis[Axis[\"T\"] = 0] = \"T\";\n Axis[Axis[\"R\"] = 1] = \"R\";\n Axis[Axis[\"B\"] = 2] = \"B\";\n Axis[Axis[\"L\"] = 3] = \"L\";\n})(Axis || (Axis = {}));\nexport var Corner;\n(function (Corner) {\n Corner[Corner[\"TL\"] = 0] = \"TL\";\n Corner[Corner[\"TR\"] = 1] = \"TR\";\n Corner[Corner[\"BR\"] = 2] = \"BR\";\n Corner[Corner[\"BL\"] = 3] = \"BL\";\n})(Corner || (Corner = {}));\nexport var Geom;\n(function (Geom) {\n Geom.outerTangentPoints = (a, b) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const angle = Math.atan2(dy, dx) + Math.acos((a.r - b.r) / Math.sqrt(dx * dx + dy * dy));\n const cs = Math.cos(angle);\n const sn = Math.sin(angle);\n return [\n { x: a.x + a.r * cs, y: a.y + a.r * sn },\n { x: b.x + b.r * cs, y: b.y + b.r * sn }\n ];\n };\n})(Geom || (Geom = {}));\nexport var Point;\n(function (Point) {\n Point.zero = () => ({ x: 0, y: 0 });\n Point.create = (x, y) => ({ x, y });\n Point.clone = (point) => ({ ...point });\n Point.floor = (point) => ({ x: Math.floor(point.x), y: Math.floor(point.y) });\n Point.length = (point) => Math.sqrt(point.x * point.x + point.y * point.y);\n Point.distance = (a, b) => Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2);\n Point.add = (a, b) => ({ x: a.x + b.x, y: a.y + b.y });\n Point.subtract = (a, b) => ({ x: a.x - b.x, y: a.y - b.y });\n Point.scaleBy = (point, scale) => ({ x: point.x * scale, y: point.y * scale });\n Point.scaleTo = (point, scale) => {\n const multiplier = scale / Point.length(point);\n return { x: point.x * multiplier, y: point.y * multiplier };\n };\n Point.fromClient = (object) => ({\n x: object.clientX,\n y: object.clientY\n });\n})(Point || (Point = {}));\nexport var Rect;\n(function (Rect) {\n Rect.Empty = Object.freeze({ x: 0, y: 0, width: 0, height: 0 });\n Rect.corners = (rectangle) => {\n const x0 = rectangle.x;\n const y0 = rectangle.y;\n const x1 = x0 + rectangle.width;\n const y1 = y0 + rectangle.height;\n return [{ x: x0, y: y0 }, { x: x1, y: y0 }, { x: x1, y: y1 }, { x: x0, y: y1 }];\n };\n Rect.inflate = (rect, amount) => {\n return {\n x: rect.x - amount,\n y: rect.y - amount,\n width: rect.width + amount * 2.0,\n height: rect.height + amount * 2.0\n };\n };\n Rect.contains = (outer, inner) => {\n const topLeftInside = inner.x >= outer.x && inner.y >= outer.y;\n const bottomRightInside = (inner.x + inner.width) <= (outer.x + outer.width)\n && (inner.y + inner.height) <= (outer.y + outer.height);\n return topLeftInside && bottomRightInside;\n };\n Rect.isPointInside = (point, rect) => point.x >= rect.x && point.x <= rect.x + rect.width && point.y >= rect.y && point.y <= rect.y + rect.height;\n Rect.intersect = (a, b) => {\n const xMin = Math.max(a.x, b.x);\n const xMax = Math.min(a.x + a.width, b.x + b.width);\n const yMax = Math.min(a.y + a.height, b.y + b.height);\n const yMin = Math.max(a.y, b.y);\n return xMax > xMin && yMax > yMin;\n };\n Rect.axis = (rectangle, axis) => {\n switch (axis) {\n case Axis.T:\n return rectangle.y;\n case Axis.R:\n return rectangle.x + rectangle.width;\n case Axis.B:\n return rectangle.y + rectangle.height;\n case Axis.L:\n return rectangle.x;\n default:\n return Unhandled(axis);\n }\n };\n Rect.corner = (rectangle, corner) => {\n switch (corner) {\n case Corner.TL:\n return { x: rectangle.x, y: rectangle.y };\n case Corner.TR:\n return { x: rectangle.x + rectangle.width, y: rectangle.y };\n case Corner.BR:\n return { x: rectangle.x + rectangle.width, y: rectangle.y + rectangle.height };\n case Corner.BL:\n return { x: rectangle.x, y: rectangle.y + rectangle.height };\n default:\n return Unhandled(corner);\n }\n };\n Rect.center = (rectangle) => ({\n x: rectangle.x + rectangle.width * 0.5,\n y: rectangle.y + rectangle.height * 0.5\n });\n Rect.isEmpty = (rectangle) => rectangle.width === 0 || rectangle.height === 0;\n Rect.union = (a, b) => {\n if (Rect.isEmpty(a)) {\n if (!Rect.isEmpty(b)) {\n a.x = b.x;\n a.y = b.y;\n a.width = b.width;\n a.height = b.height;\n }\n }\n else if (!Rect.isEmpty(b)) {\n const bx = b.x;\n const by = b.y;\n const ux = Math.min(a.x, bx);\n const uy = Math.min(a.y, by);\n a.width = Math.max(a.x + a.width, bx + b.width) - ux;\n a.height = Math.max(a.y + a.height, by + b.height) - uy;\n a.x = ux;\n a.y = uy;\n }\n };\n})(Rect || (Rect = {}));\nexport var AABB;\n(function (AABB) {\n AABB.width = (aabb) => aabb.xMax - aabb.xMin;\n AABB.height = (aabb) => aabb.yMax - aabb.yMin;\n AABB.from = (aabb, that) => {\n aabb.xMin = that.xMin;\n aabb.xMax = that.xMax;\n aabb.yMin = that.yMin;\n aabb.yMax = that.yMax;\n };\n AABB.extend = (aabb, offset) => {\n aabb.xMin -= offset;\n aabb.yMin -= offset;\n aabb.xMax += offset;\n aabb.yMax += offset;\n };\n AABB.padding = (aabb, [top, right, bottom, left]) => {\n aabb.xMin += left;\n aabb.yMin += top;\n aabb.xMax -= right;\n aabb.yMax -= bottom;\n return aabb;\n };\n AABB.intersectPoint = (aabb, point) => aabb.xMin <= point.x && point.x < aabb.xMax && aabb.yMin <= point.y && point.y < aabb.yMax;\n AABB.intersectThat = (aabb, that) => that.xMin < aabb.xMax && that.xMax > aabb.xMin && that.yMin < aabb.yMax && that.yMax > aabb.yMin;\n AABB.center = (aabb) => ({ x: (aabb.xMin + aabb.xMax) * 0.5, y: (aabb.yMin + aabb.yMax) * 0.5 });\n})(AABB || (AABB = {}));\nexport var Padding;\n(function (Padding) {\n Padding.Identity = Object.freeze([0.0, 0.0, 0.0, 0.0]);\n})(Padding || (Padding = {}));\nexport var CohenSutherland;\n(function (CohenSutherland) {\n CohenSutherland.intersects = (xMin, xMax, yMin, yMax, x0, y0, x1, y1) => {\n const c0 = code(xMin, xMax, yMin, yMax, x0, y0);\n const c1 = code(xMin, xMax, yMin, yMax, x1, y1);\n if ((c0 | c1) === 0) {\n return false;\n }\n if ((c0 & c1) !== 0) {\n return false;\n }\n const s = sign(x0, y0, x1, y1, xMin, yMin);\n return (s !== sign(x0, y0, x1, y1, xMax, yMin) ||\n s !== sign(x0, y0, x1, y1, xMax, yMax) ||\n s !== sign(x0, y0, x1, y1, xMin, yMax));\n };\n const code = (xMin, xMax, yMin, yMax, x, y) => {\n let code = 0;\n if (x <= xMin) {\n code |= 1;\n }\n else if (x >= xMax) {\n code |= 2;\n }\n if (y <= yMin) {\n code |= 8;\n }\n else if (y >= yMax) {\n code |= 4;\n }\n return code;\n };\n const sign = (x0, y0, x1, y1, x2, y2) => (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0) >= 0;\n})(CohenSutherland || (CohenSutherland = {}));\nexport var ValueAxis;\n(function (ValueAxis) {\n ValueAxis.Identity = {\n valueToAxis: (value) => value,\n axisToValue: (axis) => axis\n };\n ValueAxis.toClamped = (valueAxis, min, max) => ({\n valueToAxis: (value) => valueAxis.valueToAxis(clamp(value, min, max)),\n axisToValue: (axis) => clamp(valueAxis.axisToValue(axis), min, max)\n });\n ValueAxis.createClamped = (min, max) => ({\n valueToAxis: (value) => clamp(value, min, max),\n axisToValue: (axis) => clamp(axis, min, max)\n });\n})(ValueAxis || (ValueAxis = {}));\n", "import { assert } from \"./lang\";\n//\n// SHA-256\n//\nexport var Hash;\n(function (Hash) {\n Hash.fromBuffers = async (...buffers) => {\n const totalLength = buffers.reduce((sum, buf) => sum + buf.byteLength, 0);\n const mergedArray = new Uint8Array(totalLength);\n let offset = 0;\n for (const buffer of buffers) {\n mergedArray.set(new Uint8Array(buffer), offset);\n offset += buffer.byteLength;\n }\n return await crypto.subtle.digest(\"SHA-256\", mergedArray);\n };\n Hash.equals = (a, b) => {\n assert(a.byteLength === 32, \"First hash has invalid length\");\n assert(b.byteLength === 32, \"Second hash has invalid length\");\n const viewA = new Uint8Array(a);\n const viewB = new Uint8Array(b);\n for (let i = 0; i < 32; i++) {\n if (viewA[i] !== viewB[i]) {\n return false;\n }\n }\n return true;\n };\n Hash.toString = (buffer) => Array.from(new Uint8Array(buffer)).map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n})(Hash || (Hash = {}));\n", "export var Intervals;\n(function (Intervals) {\n Intervals.intersect1D = (min0, max0, min1, max1) => Math.max(min0, min1) <= Math.min(max0, max1);\n})(Intervals || (Intervals = {}));\n", "import { safeExecute } from \"./lang\";\nexport class Listeners {\n #set = new Set();\n #proxy;\n constructor() {\n this.#proxy = new Proxy({}, {\n get: (_, func) => (...args) => this.#set.forEach((listener) => {\n if (Object.getPrototypeOf(listener) === Object.getPrototypeOf({})) {\n return safeExecute(listener[func], ...args);\n }\n return listener[func]?.apply(listener, args);\n })\n });\n }\n get proxy() { return this.#proxy; }\n get size() { return this.#set.size; }\n subscribe(listener) {\n this.#set.add(listener);\n return { terminate: () => this.#set.delete(listener) };\n }\n forEach(procedure) { this.#set.forEach(procedure); }\n terminate() { this.#set.clear(); }\n}\n", "export class Maps {\n static createIfAbsent(map, key, factory) {\n let value = map.get(key);\n if (value === undefined) {\n value = factory(key);\n map.set(key, value);\n }\n return value;\n }\n}\nexport class WeakMaps {\n static createIfAbsent(map, key, factory) {\n let value = map.get(key);\n if (value === undefined) {\n value = factory(key);\n map.set(key, value);\n }\n return value;\n }\n}\n", "export class Sets {\n static #EMPTY = Object.freeze(new Set());\n static empty = () => Sets.#EMPTY;\n}\n", "import { Arrays } from \"./arrays\";\nimport { Sets } from \"./sets\";\nimport { Iterables } from \"./iterables\";\nimport { Maps } from \"./maps\";\nimport { Option } from \"./option\";\nimport { BinarySearch } from \"./binary-search\";\nexport class ArrayMultimap {\n #map;\n #comparator;\n constructor(entries, comparator) {\n this.#map = new Map(entries);\n this.#comparator = Option.wrap(comparator);\n this.#comparator.ifSome(comparator => Array.from(this.#map.values()).forEach(array => array.sort(comparator)));\n }\n [Symbol.iterator]() { return this.#map.entries(); }\n clear() { this.#map.clear(); }\n containsEntry(key, value) {\n return Iterables.some(this.#map.entries(), (entry) => key === entry[0] && entry[1].includes(value));\n }\n containsKey(key) {\n return Iterables.includes(this.#map.keys(), key);\n }\n containsValue(value) {\n return Iterables.some(this.#map.values(), (values) => values.includes(value));\n }\n get(key) { return this.#map.get(key) ?? Arrays.empty(); }\n isEmpty() { return this.keyCount() === 0; }\n add(key, value) {\n const array = Maps.createIfAbsent(this.#map, key, () => []);\n if (this.#comparator.isEmpty()) {\n array.push(value);\n }\n else {\n const insertIndex = BinarySearch.leftMost(array, value, this.#comparator.unwrap());\n array.splice(insertIndex, 0, value);\n }\n }\n addAll(key, values) {\n const array = Maps.createIfAbsent(this.#map, key, () => []);\n array.push(...values);\n if (this.#comparator.nonEmpty()) {\n array.sort(this.#comparator.unwrap());\n }\n }\n remove(key, value) {\n const values = this.#map.get(key);\n if (values === undefined) {\n return false;\n }\n else {\n const index = values.indexOf(value);\n if (index === -1) {\n return false;\n }\n else {\n values.splice(index, 1);\n if (values.length === 0) {\n this.#map.delete(key);\n }\n return true;\n }\n }\n }\n removeFromKeyIf(key, predicate) {\n const values = this.#map.get(key);\n if (values === undefined) {\n return null;\n }\n else {\n const index = values.findIndex(predicate);\n if (index === -1) {\n return null;\n }\n else {\n const removed = values.splice(index, 1)[0];\n if (values.length === 0) {\n this.#map.delete(key);\n }\n return removed;\n }\n }\n }\n removeValueIf(predicate) {\n const removeList = [];\n for (const [key, values] of this.#map.entries()) {\n for (const value of values.filter(value => predicate(value))) {\n removeList.push([key, value]);\n }\n }\n for (const [key, value] of removeList) {\n this.remove(key, value);\n }\n return new Set(removeList.map(([, value]) => value));\n }\n removeKey(key) {\n const values = this.#map.get(key);\n this.#map.delete(key);\n return values ?? Arrays.empty();\n }\n forEach(callback) {\n Iterables.forEach(this.#map.entries(), (entry) => callback(entry[0], entry[1]));\n }\n keyCount() { return this.#map.size; }\n keys() { return this.#map.keys(); }\n sortKeys(comparator) {\n const clone = this.clone();\n const keys = Array.from(this.keys()).sort(comparator);\n this.#map.clear();\n for (const key of keys) {\n this.addAll(key, clone.get(key));\n }\n }\n clone() {\n const copy = new ArrayMultimap();\n this.#map.forEach((values, key) => {\n copy.#map.set(key, values.map((value) => value));\n });\n return copy;\n }\n}\nexport class SetMultimap {\n map;\n constructor(entries) {\n this.map = new Map(entries?.map((entry) => {\n const key = entry[0];\n const values = entry[1];\n return [key, new Set(values)];\n }));\n }\n clear() {\n this.map.clear();\n }\n containsEntry(key, value) {\n return Iterables.some(this.map.entries(), (entry) => key === entry[0] && entry[1].has(value));\n }\n containsKey(key) {\n return Iterables.includes(this.map.keys(), key);\n }\n containsValue(value) {\n return Iterables.some(this.map.values(), (values) => values.has(value));\n }\n get(key) {\n return this.map.get(key) ?? Sets.empty();\n }\n isEmpty() {\n return this.keyCount() === 0;\n }\n add(key, value) {\n Maps.createIfAbsent(this.map, key, () => new Set).add(value);\n }\n addAll(key, values) {\n const set = Maps.createIfAbsent(this.map, key, () => new Set);\n for (const value of values) {\n set.add(value);\n }\n }\n remove(key, value) {\n const values = this.map.get(key);\n if (values === undefined) {\n return false;\n }\n else {\n if (!values.delete(value)) {\n return false;\n }\n if (values.size === 0) {\n this.map.delete(key);\n }\n return true;\n }\n }\n removeValueIf(predicate) {\n const removeSet = new Set();\n for (const [key, values] of this.map.entries()) {\n for (const value of values) {\n if (predicate(value)) {\n values.delete(value);\n removeSet.add(value);\n }\n }\n if (values.size === 0) {\n this.map.delete(key);\n }\n }\n return removeSet;\n }\n removeFromKeyIf(key, predicate) {\n const values = this.map.get(key);\n if (values === undefined) {\n return null;\n }\n else {\n for (const value of values) {\n if (predicate(value)) {\n values.delete(value);\n if (values.size === 0) {\n this.map.delete(key);\n }\n return value;\n }\n }\n return null;\n }\n }\n removeKey(key) {\n const values = this.map.get(key);\n this.map.delete(key);\n return values ?? Sets.empty();\n }\n forEach(callback) {\n Iterables.forEach(this.map.entries(), (entry) => callback(entry[0], entry[1]));\n }\n keyCount() { return this.map.size; }\n keys() { return this.map.keys(); }\n sortKeys(comparator) {\n const clone = this.clone();\n const keys = Array.from(this.keys()).sort(comparator);\n this.map.clear();\n for (const key of keys) {\n this.addAll(key, clone.get(key));\n }\n }\n clone() {\n const copy = new SetMultimap();\n this.map.forEach((values, key) => {\n copy.map.set(key, new Set(Array.from(values)));\n });\n return copy;\n }\n}\n", "import { panic } from \"./lang\";\nexport var Objects;\n(function (Objects) {\n Objects.mergeNoOverlap = (u, v) => {\n const keys = new Set(Object.keys(u));\n for (const key of Object.keys(v)) {\n if (keys.has(key)) {\n return panic(`'${key}' is an overlapping key`);\n }\n }\n return ({ ...u, ...v });\n };\n Objects.include = (obj, ...keys) => keys.reduce((result, key) => {\n result[key] = obj[key];\n return result;\n }, {});\n Objects.exclude = (obj, ...keys) => {\n const exclude = new Set(keys);\n return Object.entries(obj).reduce((result, [key, value]) => {\n if (!exclude.has(key)) {\n result[key] = value;\n }\n return result;\n }, {});\n };\n Objects.overwrite = (target, patch) => Object.assign(target, patch);\n})(Objects || (Objects = {}));\n", "import { Arrays } from \"./arrays\";\nimport { EmptyExec } from \"./lang\";\nexport const Terminable = Object.freeze({\n Empty: { terminate: EmptyExec },\n create: (exec) => ({ terminate: exec }),\n many: (...terminables) => ({ terminate: () => { while (terminables.length > 0) {\n terminables.pop().terminate();\n } } })\n});\nexport class Terminator {\n #terminables = [];\n own(terminable) {\n this.#terminables.push(terminable);\n return terminable;\n }\n ownAll(...terminables) {\n for (const terminable of terminables) {\n this.#terminables.push(terminable);\n }\n }\n spawn() {\n const terminator = new Terminator();\n terminator.own({ terminate: () => Arrays.removeOpt(this.#terminables, terminator) });\n return this.own(terminator);\n }\n terminate() { while (this.#terminables.length > 0) {\n this.#terminables.pop().terminate();\n } }\n}\nexport class VitalSigns {\n #terminated = false;\n get isTerminated() { return this.#terminated; }\n terminate() { this.#terminated = true; }\n}\nexport class CascadingSubscriptions {\n #current;\n constructor() { this.#current = new Terminator(); }\n next() {\n const current = this.#current;\n const nested = current.own(new Terminator());\n this.#current = nested;\n return {\n own: (subscription) => {\n current.own(subscription);\n return current;\n },\n toObserver: (fn) => (value) => {\n nested.terminate();\n nested.own(fn(value));\n }\n };\n }\n append(subscribe, observer) {\n const current = this.#current;\n const nested = current.own(new Terminator());\n current.own(subscribe((value) => {\n nested.terminate();\n nested.own(observer(value));\n }));\n this.#current = nested;\n return current;\n }\n}\n", "import { Terminable } from \"./terminable\";\nimport { Option } from \"./option\";\nexport class Notifier {\n static subscribeMany(observer, ...observables) {\n return Terminable.many(...observables\n .map(observable => observable.subscribe(() => observer(observable))));\n }\n #observers = new Set(); // A set allows us to remove while iterating\n subscribe(observer) {\n this.#observers.add(observer);\n return { terminate: () => this.#observers.delete(observer) };\n }\n isEmpty() { return this.#observers.size === 0; }\n notify(value) { this.#observers.forEach((observer) => observer(value)); }\n observers() { return this.#observers; }\n terminate() { this.#observers.clear(); }\n}\nexport var ObservableValue;\n(function (ObservableValue) {\n ObservableValue.make = (value) => new class {\n getValue() { return value; }\n subscribe(_observer) { return Terminable.Empty; }\n catchupAndSubscribe(observer) {\n observer(this);\n return Terminable.Empty;\n }\n };\n})(ObservableValue || (ObservableValue = {}));\nexport var MutableObservableValue;\n(function (MutableObservableValue) {\n MutableObservableValue.False = new class {\n getValue() { return false; }\n setValue(_) { }\n subscribe(_) { return Terminable.Empty; }\n catchupAndSubscribe(observer) {\n observer(this);\n return Terminable.Empty;\n }\n };\n MutableObservableValue.inverseBoolean = (observableValue) => new class {\n getValue() { return !observableValue.getValue(); }\n setValue(value) { observableValue.setValue(!value); }\n subscribe(observer) { return observableValue.subscribe(observer); }\n catchupAndSubscribe(observer) {\n observer(this);\n return this.subscribe(observer);\n }\n };\n})(MutableObservableValue || (MutableObservableValue = {}));\nexport class DefaultObservableValue {\n #notifier;\n #guard = Option.None;\n #value;\n constructor(value, guard) {\n this.#notifier = new Notifier();\n this.#value = guard?.guard(value) ?? value;\n this.#guard = Option.wrap(guard);\n }\n setValue(value) {\n if (this.#guard.nonEmpty()) {\n value = this.#guard.unwrap().guard(value);\n }\n if (this.#value === value) {\n return;\n }\n this.#value = value;\n this.#notifier.notify(this);\n }\n getValue() { return this.#value; }\n subscribe(observer) { return this.#notifier.subscribe(observer); }\n catchupAndSubscribe(observer) {\n observer(this);\n return this.#notifier.subscribe(observer);\n }\n terminate() { this.#notifier.terminate(); }\n toString() { return `{DefaultObservableValue value: ${this.#value}`; }\n}\n", "import { asDefined, panic } from \"./lang\";\nimport { clamp } from \"./math\";\nimport { Integer } from \"./numeric\";\nclass Linear {\n #min;\n #max;\n #range;\n constructor(min, max) {\n this.#min = min;\n this.#max = max;\n this.#range = max - min;\n }\n x(y) { return (this.clamp(y) - this.#min) / this.#range; }\n y(x) { return this.#min + clamp(x, 0.0, 1.0) * this.#range; }\n clamp(y) { return clamp(y, this.#min, this.#max); }\n floating() { return true; }\n}\nclass LinearInteger {\n #min;\n #max;\n #range;\n constructor(min, max) {\n this.#min = clamp(Math.round(min), Integer.MIN_VALUE, Integer.MAX_VALUE);\n this.#max = clamp(Math.round(max), Integer.MIN_VALUE, Integer.MAX_VALUE);\n this.#range = this.#max - this.#min;\n }\n x(y) { return (this.clamp(y) - this.#min) / this.#range; }\n y(x) { return this.#min + Math.round(clamp(x, 0.0, 1.0) * this.#range); }\n clamp(y) { return clamp(Math.round(y), this.#min, this.#max); }\n floating() { return false; }\n}\nclass Exponential {\n #min;\n #max;\n #range;\n constructor(min, max) {\n this.#min = min;\n this.#max = max;\n this.#range = Math.log(max / min);\n }\n x(y) { return Math.log(clamp(y, this.#min, this.#max) / this.#min) / this.#range; }\n y(x) { return this.#min * Math.exp(clamp(x, 0.0, 1.0) * this.#range); }\n clamp(y) { return Math.min(this.#max, Math.max(this.#min, y)); }\n floating() { return true; }\n}\nclass Values {\n #values;\n constructor(values) {\n this.#values = values;\n }\n x(y) {\n const index = this.#values.findIndex(value => value === y);\n return index === -1\n ? panic(`Could not find index for ${y}`)\n : index / (this.#values.length - 1);\n }\n y(x) {\n const index = Math.round(clamp(x, 0.0, 1.0) * (this.#values.length - 1));\n return index > -1\n ? asDefined(this.#values.at(index), `Could not find value for ${x}`)\n : panic(`Index ${index} is out of box.`);\n }\n clamp(y) { return y; }\n floating() { return false; }\n}\nclass Decibel {\n #min;\n #max;\n #a;\n #b;\n #c;\n /**\n * @param min The lowest decibel value\n * @param mid The decibel value in the center\n * @param max The highest decibel value\n */\n constructor(min, mid, max) {\n this.#min = min;\n this.#max = max;\n const min2 = min * min;\n const max2 = max * max;\n const mid2 = mid * mid;\n const tmp0 = min + max - 2.0 * mid;\n const tmp1 = max - mid;\n this.#a = ((2.0 * max - mid) * min - mid * max) / tmp0;\n this.#b = (tmp1 * min2 + (mid2 - max2) * min + mid * max2 - mid2 * max)\n / (min2 + (2.0 * max - 4.0 * mid) * min + max2 - 4.0 * mid * max + 4.0 * mid2);\n this.#c = -tmp1 / tmp0;\n }\n y(x) {\n if (x <= 0.0) {\n return Number.NEGATIVE_INFINITY;\n }\n if (x >= 1.0) {\n return this.#max;\n }\n return this.#a - this.#b / (x + this.#c);\n }\n x(y) {\n if (this.#min >= y) {\n return 0.0;\n }\n if (this.#max <= y) {\n return 1.0;\n }\n return -this.#b / (y - this.#a) - this.#c;\n }\n clamp(y) { return Math.min(this.#max, y); }\n floating() { return true; }\n}\nexport var ValueMapping;\n(function (ValueMapping) {\n ValueMapping.linear = (min, max) => new Linear(min, max);\n ValueMapping.linearInteger = (min, max) => new LinearInteger(min, max);\n ValueMapping.exponential = (min, max) => new Exponential(min, max);\n ValueMapping.values = (values) => new Values(values);\n ValueMapping.decibel = (min, mid, max) => new Decibel(min, mid, max);\n const Bool = new class {\n x(y) { return y ? 1.0 : 0.0; }\n y(x) { return x >= 0.5; }\n clamp(y) { return y; }\n floating() { return false; }\n };\n const Unipolar = ValueMapping.linear(0.0, 1.0);\n const Bipolar = ValueMapping.linear(-1.0, 1.0);\n ValueMapping.bool = Bool;\n const DefaultDecibelInstance = ValueMapping.decibel(-72.0, -12.0, 0.0);\n ValueMapping.unipolar = () => Unipolar;\n ValueMapping.bipolar = () => Bipolar;\n ValueMapping.DefaultDecibel = DefaultDecibelInstance;\n})(ValueMapping || (ValueMapping = {}));\n", "import { isDefined } from \"./lang\";\nimport { clamp } from \"./math\";\nexport var StringMapping;\n(function (StringMapping) {\n StringMapping.percent = ({ bipolar, fractionDigits } = {}) => new Numeric(\"%\", fractionDigits, false, bipolar);\n StringMapping.numeric = ({ unit, fractionDigits, unitPrefix, bipolar } = {}) => new Numeric(unit, fractionDigits, unitPrefix, bipolar);\n StringMapping.indices = (unit, values) => new class {\n x(y) {\n return { unit, value: values[y] };\n }\n y(x) {\n const index = values.indexOf(x);\n return index === -1 ? { type: \"unknown\", value: \"\uD83D\uDCA3\" } : { type: \"explicit\", value: index };\n }\n };\n StringMapping.values = (unit, values, strings) => new class {\n x(y) {\n return { unit, value: strings.at(values.indexOf(y)) ?? \"N/A\" };\n }\n y(x) {\n const index = strings.indexOf(x);\n return index === -1 ? { type: \"unknown\", value: \"\uD83D\uDCA3\" } : { type: \"explicit\", value: values[index] };\n }\n };\n StringMapping.bool = new class {\n y(x) {\n switch (x.trim()) {\n case \"on\":\n case \"yes\":\n case \"true\":\n return { type: \"explicit\", value: true };\n default:\n return { type: \"explicit\", value: false };\n }\n }\n x(y) {\n return { value: String(y), unit: \"\" };\n }\n };\n class Numeric {\n #unit;\n #fractionDigits;\n #unitPrefix;\n #bipolar;\n constructor(unit, fractionDigits, unitPrefix, bipolar) {\n this.#unit = unit ?? \"\";\n this.#fractionDigits = fractionDigits ?? 0;\n this.#unitPrefix = unitPrefix ?? false;\n this.#bipolar = bipolar ?? false;\n }\n y(x) {\n let value = x.trim();\n const float = parseFloat(value);\n if (isNaN(float)) {\n return { type: \"unknown\", value: value };\n }\n else if (this.#unit === \"%\") {\n return {\n type: \"explicit\",\n value: float / 100.0\n };\n }\n else if (value.endsWith(\"%\")) {\n return {\n type: \"unitValue\",\n value: this.#bipolar\n ? clamp(float / 200.0 + 0.5, 0.0, 1.0)\n : clamp(float / 100.0, 0.0, 1.0)\n };\n }\n else {\n if (value.endsWith(this.#unit) && this.#unit.length > 0) {\n // remove unit\n value = value.slice(0, -this.#unit.length);\n }\n const regex = /(\\d+)(\\D+)/;\n const match = regex.exec(value);\n const last = match?.at(2)?.at(0);\n if (isDefined(last)) {\n const index = prefixes.indexOf(last);\n if (index > -1) {\n return { type: \"explicit\", value: float * Math.pow(10.0, (index - 4) * 3.0) };\n }\n }\n return { type: \"explicit\", value: float };\n }\n }\n x(y) {\n if (Number.isNaN(y)) {\n return { value: \"\uD83D\uDCA3\", unit: this.#unit };\n }\n else if (Number.isFinite(y)) {\n if (this.#unit === \"%\") {\n return this.#bipolar\n ? { value: (y * 200 - 100).toFixed(this.#fractionDigits), unit: this.#unit }\n : { value: (y * 100).toFixed(this.#fractionDigits), unit: this.#unit };\n }\n if (this.#unitPrefix) {\n const { value, prefix } = computePrefix(y);\n return { value: value.toFixed(this.#fractionDigits), unit: `${prefix}${this.#unit}` };\n }\n else {\n return { value: y.toFixed(this.#fractionDigits), unit: this.#unit };\n }\n }\n else {\n return { value: y === Number.POSITIVE_INFINITY ? \"\u221E\" : \"-\u221E\", unit: this.#unit };\n }\n }\n }\n const prefixes = Object.freeze([\"p\", \"n\", \"\u03BC\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\"]);\n // this magic number rounds the result perfectly to integers, while the mathematically correct 10 doesn't:\n // computeBase10(1000) = 3\n // computeBase10(0.001) = -3\n const computeBase10 = (value) => Math.log(value) / Math.log(9.999999999999999);\n const computePrefix = (value) => {\n const location = Math.floor(computeBase10(value) / 3.0);\n const prefix = prefixes[location + 4];\n return isDefined(prefix) ? { value: value * Math.pow(10.0, location * -3.0), prefix } : { value, prefix: \"\" };\n };\n StringMapping.decible = StringMapping.numeric({ unit: \"db\", fractionDigits: 1 });\n StringMapping.panning = StringMapping.percent({ unit: \"%\", fractionDigits: 0 });\n})(StringMapping || (StringMapping = {}));\n", "export var Predicates;\n(function (Predicates) {\n Predicates.alwaysTrue = () => true;\n Predicates.alwaysFalse = () => false;\n Predicates.definedPredicate = (value) => value !== null && value !== undefined;\n})(Predicates || (Predicates = {}));\n", "import { Arrays } from \"./arrays\";\nexport const SilentProgressHandler = _ => { };\nexport var Progress;\n(function (Progress) {\n Progress.split = (progress, count) => {\n const collect = new Float32Array(count);\n return Arrays.create(index => (value) => {\n collect[index] = value;\n progress(collect.reduce((total, value) => total + value, 0.0) / count);\n }, count);\n };\n})(Progress || (Progress = {}));\n", "import { panic } from \"./lang\";\nexport var Random;\n(function (Random) {\n Random.create = (seed = 0xF123F42) => new Mulberry32(seed);\n /**\n * Generates a monotone ascending sequence of random unitValue numbers.\n * @param target The target array to fill with random values.\n * @param noise Tell the method how noisy the sequence should be. 0 leads to a linear sequence.\n * @param random The random number generator to use.\n * @returns The target array.\n */\n Random.monotoneAscending = (target, noise = 128, random = Random.create()) => {\n const length = target.length;\n if (length < 2) {\n return panic(\"Array must have at least 2 elements\");\n }\n let sum = 0.0;\n for (let i = 1; i < length; i++) {\n const value = Math.floor(random.uniform() * (1.0 + noise)) + 1.0;\n target[i] = value;\n sum += value;\n }\n let acc = 0.0;\n target[0] = 0.0;\n for (let i = 1; i < length; i++) {\n acc += target[i];\n target[i] = acc / sum;\n }\n return target;\n };\n})(Random || (Random = {}));\nexport class Mulberry32 {\n #seed = 0;\n constructor(seed) { this.setSeed(seed); }\n setSeed(value) { this.#seed = value & 0xFFFFFFFF; }\n nextDouble(min, max) { return min + this.uniform() * (max - min); }\n nextInt(min, max) { return min + Math.floor(this.uniform() * (max - min)); }\n nextElement(array) { return array[Math.floor(this.uniform() * array.length)]; }\n nextBoolean() { return this.uniform() < 0.5; }\n uniform() {\n let t = this.#seed += 0x6D2B79F5;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n return ((t ^ t >>> 14) >>> 0) / 4294967296.0;\n }\n}\n", "import { ByteCounter } from \"./data\";\n/**\n * Schema defines a fixed structure for numbers and boolean\n */\nexport var Schema;\n(function (Schema) {\n class Serializer {\n }\n Schema.createBuilder = (schema) => {\n const replace = (schema) => {\n const clone = schema instanceof Array ? [] : {};\n Object.entries(schema).forEach(([key, value]) => {\n if (value instanceof Serializer) {\n clone[key] = value.initialValue();\n }\n else if (typeof value === \"object\") {\n clone[key] = replace(value);\n }\n });\n return clone;\n };\n return () => new IOImpl(schema, Object.seal(replace(schema)));\n };\n Schema.bool = new class extends Serializer {\n read(input) { return input.readByte() === 1; }\n write(output, value) { output.writeByte(value ? 1 : 0); }\n initialValue() { return false; }\n };\n Schema.int8 = new class extends Serializer {\n read(input) { return input.readByte(); }\n write(output, value) { output.writeByte(value); }\n initialValue() { return 0; }\n };\n Schema.int16 = new class extends Serializer {\n read(input) { return input.readShort(); }\n write(output, value) { output.writeShort(value); }\n initialValue() { return 0; }\n };\n Schema.int32 = new class extends Serializer {\n read(input) { return input.readInt(); }\n write(output, value) { output.writeInt(value); }\n initialValue() { return 0; }\n };\n Schema.float = new class extends Serializer {\n read(input) { return input.readFloat(); }\n write(output, value) { output.writeFloat(value); }\n initialValue() { return 0.0; }\n };\n Schema.double = new class extends Serializer {\n read(input) { return input.readDouble(); }\n write(output, value) { output.writeDouble(value); }\n initialValue() { return 0.0; }\n };\n Schema.int64 = new class extends Serializer {\n read(input) { return input.readLong(); }\n write(output, value) { output.writeLong(value); }\n initialValue() { return 0n; }\n };\n Schema.floats = (length) => new class extends Serializer {\n read(input, values) {\n for (let i = 0; i < values.length; i++) {\n values[i] = input.readFloat();\n }\n return values;\n }\n write(output, values) {\n for (let i = 0; i < values.length; i++) {\n output.writeFloat(values[i]);\n }\n }\n initialValue() { return new Float32Array(length); }\n };\n Schema.doubles = (length) => new class extends Serializer {\n read(input, values) {\n for (let i = 0; i < values.length; i++) {\n values[i] = input.readDouble();\n }\n return values;\n }\n write(output, values) {\n for (let i = 0; i < values.length; i++) {\n output.writeDouble(values[i]);\n }\n }\n initialValue() { return new Float64Array(length); }\n };\n class IOImpl {\n #schema;\n #object;\n #bytesTotal;\n constructor(schema, object) {\n this.#schema = schema;\n this.#object = object;\n this.#bytesTotal = this.#count();\n }\n get object() { return this.#object; }\n get bytesTotal() { return this.#bytesTotal; }\n read(input) {\n const collector = (schema, object) => {\n Object.entries(schema).forEach(([key, value]) => {\n const data = object;\n if (value instanceof Serializer) {\n data[key] = value.read(input, data[key]);\n }\n else if (typeof value === \"object\") {\n collector(value, data[key]);\n }\n });\n };\n collector(this.#schema, this.#object);\n }\n write(output) {\n const collector = (schema, object) => {\n Object.entries(schema).forEach(([key, value]) => {\n const data = object;\n if (value instanceof Serializer) {\n value.write(output, data[key]);\n }\n else if (typeof value === \"object\") {\n collector(value, data[key]);\n }\n });\n };\n collector(this.#schema, this.#object);\n }\n #count() {\n const counter = new ByteCounter();\n this.write(counter);\n return counter.count;\n }\n }\n})(Schema || (Schema = {}));\n", "import { isDefined, panic } from \"./lang\";\nimport { Arrays } from \"./arrays\";\nimport { Option } from \"./option\";\nimport { BinarySearch } from \"./binary-search\";\n/**\n * SortedSet\n * ---------------------------\n * Advantages Over Native Set\n * ---------------------------\n * Custom Key Extraction: Allows using complex keys (like UUID) with custom comparison logic\n * Ordered Iteration: Elements are always iterated in sorted order (not necessarily favored)\n * Efficient Lookups: O(log n) lookups using binary search\n * Flexible Duplicate Handling: Control whether to replace or duplicates or throw an error\n * -----------------------------\n * Disadvantages Over Native Set\n * -----------------------------\n * No Range Operations: No efficient range-based operations\n * Losing insert order: Elements get sorted by key and not insert order\n */\nexport class SortedSet {\n #extractor;\n #comparator;\n #array;\n constructor(extractor, comparator) {\n this.#extractor = extractor;\n this.#comparator = comparator;\n this.#array = [];\n }\n add(value, replace = false) {\n const key = this.#extractor(value);\n const insertIndex = BinarySearch.leftMostMapped(this.#array, key, this.#comparator, this.#extractor);\n const current = this.#array[insertIndex];\n if (isDefined(current) && this.#comparator(this.#extractor(current), key) === 0) {\n if (replace) {\n this.#array.splice(insertIndex, 1, value);\n return true;\n }\n return false;\n }\n this.#array.splice(insertIndex, 0, value);\n return true;\n }\n getOrCreate(key, factory) {\n const insertIndex = BinarySearch.leftMostMapped(this.#array, key, this.#comparator, this.#extractor);\n const current = this.#array[insertIndex];\n if (isDefined(current) && this.#comparator(this.#extractor(current), key) === 0) {\n return current;\n }\n const value = factory(key);\n this.#array.splice(insertIndex, 0, value);\n return value;\n }\n addMany(values) {\n for (const value of values) {\n this.#array.push(value);\n }\n try {\n this.#array.sort((a, b) => {\n const delta = this.#comparator(this.#extractor(a), this.#extractor(b));\n if (delta === 0) {\n throw \"cancel\";\n }\n return delta;\n });\n return true;\n }\n catch (reason) {\n if (reason === \"cancel\") {\n const uniqueKeys = new Map(this.entries());\n this.#array.splice(0, this.#array.length, ...uniqueKeys.values());\n this.#array.sort((a, b) => this.#comparator(this.#extractor(a), this.#extractor(b)));\n return false;\n }\n return panic(reason);\n }\n }\n removeByValue(value) { return this.removeByKey(this.#extractor(value)); }\n removeByKey(key) {\n const deleteIndex = BinarySearch.leftMostMapped(this.#array, key, this.#comparator, this.#extractor);\n const candidate = this.#array[deleteIndex];\n if (isDefined(candidate) && this.#comparator(this.#extractor(candidate), key) === 0) {\n this.#array.splice(deleteIndex, 1);\n return candidate;\n }\n return panic(`Could not remove ${key}`);\n }\n removeRange(startIndex, endIndex) {\n this.#array.splice(startIndex, (endIndex ?? this.#array.length) - startIndex);\n }\n removeByPredicate(predicate) {\n let count = 0 | 0;\n let index = this.#array.length;\n while (--index >= 0) {\n if (predicate(this.#array[index])) {\n this.#array.splice(index, 1);\n count++;\n }\n }\n return count;\n }\n get(key) {\n const candidate = this.#lookup(key);\n if (isDefined(candidate)) {\n return candidate;\n }\n else {\n return panic(`Unknown key: ${key}`);\n }\n }\n getOrThrow(key, provider) {\n const candidate = this.#lookup(key);\n if (isDefined(candidate)) {\n return candidate;\n }\n else {\n throw provider();\n }\n }\n opt(key) { return Option.wrap(this.#lookup(key)); }\n getOrNull(key) { return this.#lookup(key) ?? null; }\n getByIndex(index) { return this.#array[index]; }\n hasKey(key) { return isDefined(this.#lookup(key)); }\n hasValue(value) { return isDefined(this.#lookup(this.#extractor(value))); }\n size() { return this.#array.length; }\n isEmpty() { return this.#array.length === 0; }\n forEach(procedure) { this.values().forEach(procedure); }\n values() { return this.#array; }\n entries() { return this.#array.map((entry) => [this.#extractor(entry), entry]); }\n clear() { Arrays.clear(this.#array); }\n [Symbol.iterator]() { return this.#array.values(); }\n #lookup(key) {\n const index = BinarySearch.leftMostMapped(this.#array, key, this.#comparator, this.#extractor);\n const candidate = this.#array[index];\n return isDefined(candidate) && this.#comparator(this.#extractor(candidate), key) === 0 ? candidate : undefined;\n }\n}\n", "import { isDefined } from \"./lang\";\nexport var Strings;\n(function (Strings) {\n Strings.hyphenToCamelCase = (value) => value\n .replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n Strings.fallback = (value, fallback) => isDefined(value) && value.length > 0 ? value : fallback;\n Strings.endsWithDigit = (str) => /\\d$/.test(str);\n Strings.nonEmpty = (str, fallback) => isDefined(str) && str.trim().length > 0 ? str : fallback;\n // UTF-8\n Strings.toArrayBuffer = (str) => {\n const buffer = new ArrayBuffer(str.length);\n const view = new Uint8Array(buffer);\n for (let i = 0; i < str.length; i++) {\n view[i] = str.charCodeAt(i);\n }\n return buffer;\n };\n})(Strings || (Strings = {}));\n", "import { Unhandled } from \"./lang\";\nexport class TimeSpan {\n static POSITIVE_INFINITY = new TimeSpan(Number.POSITIVE_INFINITY);\n static millis = (value) => new TimeSpan(value);\n static seconds = (value) => new TimeSpan(value * TimeSpan.#MILLI_SECONDS_PER_SECOND);\n static minutes = (value) => new TimeSpan(value * TimeSpan.#MILLI_SECONDS_PER_MINUTE);\n static hours = (value) => new TimeSpan(value * TimeSpan.#MILLI_SECONDS_PER_HOUR);\n static days = (value) => new TimeSpan(value * TimeSpan.#MILLI_SECONDS_PER_DAY);\n static #MILLI_SECONDS_PER_SECOND = 1_000;\n static #MILLI_SECONDS_PER_MINUTE = 60_000;\n static #MILLI_SECONDS_PER_HOUR = 3_600_000;\n static #MILLI_SECONDS_PER_DAY = 86_400_000;\n #ms;\n constructor(ms) { this.#ms = ms; }\n millis() { return this.#ms; }\n absSeconds() { return Math.abs(this.#ms) / TimeSpan.#MILLI_SECONDS_PER_SECOND; }\n absMinutes() { return Math.abs(this.#ms) / TimeSpan.#MILLI_SECONDS_PER_MINUTE; }\n absHours() { return Math.abs(this.#ms) / TimeSpan.#MILLI_SECONDS_PER_HOUR; }\n absDays() { return Math.abs(this.#ms) / TimeSpan.#MILLI_SECONDS_PER_DAY; }\n split() {\n return {\n d: Math.floor(this.absDays()),\n h: Math.floor(this.absHours()) % 24,\n m: Math.floor(this.absMinutes()) % 60,\n s: Math.floor(this.absSeconds()) % 60\n };\n }\n isNow() { return this.#ms === 0.0; }\n isPast() { return this.#ms < 0.0; }\n isFuture() { return this.#ms > 0.0; }\n toUnitString() {\n let value, unit;\n const seconds = Math.floor(Math.abs(this.#ms) / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n if (seconds < 60) {\n value = seconds;\n unit = \"second\";\n }\n else if (minutes < 60) {\n value = minutes;\n unit = \"minute\";\n }\n else if (hours < 24) {\n value = hours;\n unit = \"hour\";\n }\n else {\n value = days;\n unit = \"day\";\n }\n return new Intl.RelativeTimeFormat(\"en\", { numeric: \"auto\", style: \"long\" })\n .format(value * Math.sign(this.#ms), unit);\n }\n toString() {\n if (isNaN(this.#ms)) {\n return \"NaN\";\n }\n if (!isFinite(this.#ms)) {\n return \"\u221E\";\n }\n const { d, h, m, s } = this.split();\n if (d > 0) {\n return [\n TimeSpan.#quantity(\"d\", d), TimeSpan.#quantity(\"h\", h),\n TimeSpan.#quantity(\"m\", m), TimeSpan.#quantity(\"s\", s)\n ]\n .join(\", \");\n }\n else if (h > 0) {\n return [\n TimeSpan.#quantity(\"h\", h), TimeSpan.#quantity(\"m\", m),\n TimeSpan.#quantity(\"s\", s)\n ]\n .join(\", \");\n }\n else if (m > 0) {\n return [TimeSpan.#quantity(\"m\", m), TimeSpan.#quantity(\"s\", s)]\n .join(\", \");\n }\n else if (s > 0) {\n return TimeSpan.#quantity(\"s\", s);\n }\n else {\n return \"now\";\n }\n }\n static #quantity = (name, count) => {\n switch (name) {\n case \"d\":\n return `${count} ${count < 2 ? \"day\" : \"days\"}`;\n case \"h\":\n return `${count} ${count < 2 ? \"hour\" : \"hours\"}`;\n case \"m\":\n return `${count} ${count < 2 ? \"minute\" : \"minutes\"}`;\n case \"s\":\n return `${count} ${count < 2 ? \"second\" : \"seconds\"}`;\n default:\n return Unhandled(name);\n }\n };\n}\n", "import { ByteArrayInput, ByteArrayOutput } from \"./data\";\nimport { panic } from \"./lang\";\nexport var SyncStream;\n(function (SyncStream) {\n let State;\n (function (State) {\n State[State[\"READING\"] = 0] = \"READING\";\n State[State[\"READ\"] = 1] = \"READ\";\n State[State[\"WRITING\"] = 2] = \"WRITING\";\n State[State[\"WRITTEN\"] = 3] = \"WRITTEN\";\n })(State || (State = {}));\n SyncStream.writer = (io, buffer, populate) => {\n if (io.bytesTotal + 1 > buffer.byteLength) {\n return panic(\"Insufficient memory allocated.\");\n }\n const array = new Uint8Array(buffer);\n const output = ByteArrayOutput.use(buffer, 1);\n Atomics.store(array, 0, State.READ);\n return {\n tryWrite: () => {\n if (Atomics.compareExchange(array, 0, State.READ, State.WRITING) === State.WRITING) {\n populate(io.object);\n output.position = 0;\n io.write(output);\n Atomics.store(array, 0, State.WRITTEN);\n return true;\n }\n return false;\n }\n };\n };\n SyncStream.reader = (io, procedure) => {\n const buffer = new SharedArrayBuffer(io.bytesTotal + 1);\n const array = new Uint8Array(buffer);\n const input = new ByteArrayInput(buffer, 1);\n return {\n buffer,\n tryRead: () => {\n if (Atomics.compareExchange(array, 0, State.WRITTEN, State.READING) === State.READING) {\n input.position = 0;\n io.read(input);\n procedure(io.object);\n Atomics.store(array, 0, State.READ);\n return true;\n }\n return false;\n }\n };\n };\n})(SyncStream || (SyncStream = {}));\n", "import { Arrays } from \"./arrays\";\nimport { assert, panic } from \"./lang\";\nimport { SortedSet } from \"./sorted-set\";\nexport var UUID;\n(function (UUID) {\n UUID.length = 16;\n UUID.generate = () => {\n return fromUint8Array(crypto.getRandomValues(new Uint8Array(UUID.length)));\n };\n UUID.sha256 = async (buffer) => {\n return crypto.subtle.digest(\"SHA-256\", buffer)\n .then(buffer => fromUint8Array(new Uint8Array(buffer.slice(0, UUID.length))));\n };\n UUID.validate = (uuid) => UUID.parse(UUID.toString(uuid));\n UUID.fromDataInput = (input) => {\n const arr = new Uint8Array(UUID.length);\n input.readBytes(new Int8Array(arr.buffer));\n return arr;\n };\n UUID.toDataOutput = (output, uuid) => output.writeBytes(new Int8Array(uuid.buffer));\n UUID.toString = (format) => {\n const hex = Arrays.create(index => (index + 0x100).toString(16).substring(1), 256);\n return hex[format[0]] + hex[format[1]] +\n hex[format[2]] + hex[format[3]] + \"-\" +\n hex[format[4]] + hex[format[5]] + \"-\" +\n hex[format[6]] + hex[format[7]] + \"-\" +\n hex[format[8]] + hex[format[9]] + \"-\" +\n hex[format[10]] + hex[format[11]] +\n hex[format[12]] + hex[format[13]] +\n hex[format[14]] + hex[format[15]];\n };\n UUID.parse = (string) => {\n const cleanUuid = string.replace(/-/g, \"\").toLowerCase();\n if (cleanUuid.length !== 32) {\n return panic(\"Invalid UUID format\");\n }\n const bytes = new Uint8Array(UUID.length);\n for (let i = 0, j = 0; i < 32; i += 2, j++) {\n bytes[j] = parseInt(cleanUuid.slice(i, i + 2), 16);\n }\n return bytes;\n };\n UUID.Comparator = (a, b) => {\n if (a.length !== UUID.length || b.length !== UUID.length) {\n return panic(\"Unexpected array length for uuid(v4)\");\n }\n for (let i = 0; i < UUID.length; i++) {\n const delta = a[i] - b[i];\n if (delta !== 0) {\n return delta;\n }\n }\n return 0;\n };\n UUID.equals = (a, b) => UUID.Comparator(a, b) === 0;\n UUID.newSet = (key) => new SortedSet(key, UUID.Comparator);\n UUID.Lowest = UUID.parse(\"00000000-0000-4000-8000-000000000000\");\n UUID.Highest = UUID.parse(\"FFFFFFFF-FFFF-4FFF-BFFF-FFFFFFFFFFFF\");\n UUID.fromInt = (value) => {\n const result = new Uint8Array(UUID.Lowest);\n const array = new Uint8Array(new Uint32Array([value]).buffer);\n for (let i = 0; i < 4; i++) {\n result[i] = array[i];\n }\n return result;\n };\n const fromUint8Array = (arr) => {\n assert(arr.length === UUID.length, \"UUID must be 16 bytes long\");\n arr[6] = (arr[6] & 0x0f) | 0x40; // Version 4 (random)\n arr[8] = (arr[8] & 0x3f) | 0x80; // Variant 10xx for UUID\n return arr;\n };\n})(UUID || (UUID = {}));\n", "import { Arrays } from \"./arrays\";\nimport { NumberComparator } from \"./comparators\";\nimport { assert, isDefined } from \"./lang\";\nimport { clamp } from \"./math\";\nimport { BinarySearch } from \"./binary-search\";\nexport var ValueGuide;\n(function (ValueGuide) {\n ValueGuide.create = (option) => {\n if (isDefined(option)) {\n if (isDefined(option?.snap)) {\n return ValueGuide.snap(option?.trackLength, option?.snap?.snapLength, Array.isArray(option?.snap?.threshold)\n ? option?.snap.threshold\n : [option?.snap?.threshold]);\n }\n else {\n return ValueGuide.identity(option?.trackLength);\n }\n }\n else {\n return ValueGuide.identity();\n }\n };\n ValueGuide.snap = (trackLength = DEFAULT_TRACK_LENGTH, snapLength = DEFAULT_SNAP_LENGTH, thresholds) => new Snap(trackLength, snapLength / trackLength, thresholds);\n ValueGuide.identity = (trackLength = DEFAULT_TRACK_LENGTH) => new Identity(trackLength);\n const DEFAULT_TRACK_LENGTH = 128;\n const DEFAULT_SNAP_LENGTH = 24;\n class Identity {\n length;\n #x = NaN;\n #value = NaN;\n #ratio = 1.0;\n constructor(length) {\n this.length = length;\n }\n begin(value) { this.#value = this.#x = value; }\n moveBy(delta) {\n assert(!isNaN(this.#value), () => \"value has never been set\");\n this.#x += delta / this.length * this.#ratio;\n this.#value = clamp(this.#x, 0.0, 1.0);\n }\n ratio(value) { this.#ratio = value; }\n value() {\n assert(!isNaN(this.#value), () => \"value has never been set\");\n return this.#value;\n }\n disable() { }\n enable() { }\n }\n class Snap {\n #length;\n #margin;\n #thresholds;\n #ranges;\n #x = NaN; // unhinged floating value including the snapping margin\n #value = NaN; // clamped normalised, exposable value\n #ratio = 1.0;\n #enabled = true;\n constructor(length, margin, thresholds) {\n assert(margin > 0.0, () => `margin(${margin}) must be greater then 0`);\n assert(Arrays.isSorted(thresholds), () => \"thresholds are not sorted\");\n assert(margin < length, () => `margin(${margin}) must be lower then length(${length})`);\n this.#length = length;\n this.#margin = margin;\n this.#thresholds = thresholds;\n this.#ranges = thresholds.map((x, index) => x + index * this.#margin);\n }\n begin(value) {\n if (this.#enabled) {\n this.#x = this.valueToX(value);\n }\n this.#value = value;\n }\n moveBy(delta) {\n assert(!isNaN(this.#value), () => \"value has never been set\");\n this.#x += delta / this.#length * this.#ratio;\n this.#value = this.#enabled ? this.xToValue(this.#x) : clamp(this.#x, 0.0, 1.0);\n }\n ratio(value) { this.#ratio = value; }\n value() {\n assert(!isNaN(this.#value), () => \"value has never been set\");\n return this.#value;\n }\n disable() {\n if (!this.#enabled) {\n return;\n }\n this.#enabled = false;\n this.#x = this.xToValue(this.#x);\n }\n enable() {\n if (this.#enabled) {\n return;\n }\n this.#enabled = true;\n this.#x = this.valueToX(this.#x);\n }\n valueToX(value) {\n const index = BinarySearch.rightMost(this.#thresholds, value, NumberComparator);\n if (index < 0) {\n return value;\n }\n else {\n const range = this.#ranges[index];\n const threshold = this.#thresholds[index];\n return value === threshold ? range + this.#margin / 2.0 : range + this.#margin + (value - threshold);\n }\n }\n xToValue(x) {\n const clamped = clamp(x, 0.0, 1.0 + this.#margin * this.#thresholds.length);\n const index = BinarySearch.rightMost(this.#ranges, clamped, NumberComparator);\n if (index < 0) {\n return clamped;\n }\n else {\n const range = this.#ranges[index];\n const threshold = this.#thresholds[index];\n if (clamped > range + this.#margin) {\n return clamped - (range + this.#margin) + threshold;\n }\n else {\n return threshold;\n }\n }\n }\n get margin() { return this.#margin; }\n }\n})(ValueGuide || (ValueGuide = {}));\n", "const key = Symbol.for(\"@openDAW/lib-std\");\nif (globalThis[key]) {\n console.debug(`%c${key.description}%c is already available in ${globalThis.constructor.name}.`, \"color: hsl(10, 83%, 60%)\", \"color: inherit\");\n}\nelse {\n globalThis[key] = true;\n console.debug(`%c${key.description}%c is now available in ${globalThis.constructor.name}.`, \"color: hsl(200, 83%, 60%)\", \"color: inherit\");\n}\nexport * from \"./arrays\";\nexport * from \"./attempts\";\nexport * from \"./bijective\";\nexport * from \"./binary-search\";\nexport * from \"./bits\";\nexport * from \"./cache\";\nexport * from \"./color\";\nexport * from \"./comparators\";\nexport * from \"./curve\";\nexport * from \"./data\";\nexport * from \"./decorators\";\nexport * from \"./generators\";\nexport * from \"./geom\";\nexport * from \"./hash\";\nexport * from \"./intervals\";\nexport * from \"./iterables\";\nexport * from \"./lang\";\nexport * from \"./listeners\";\nexport * from \"./math\";\nexport * from \"./maps\";\nexport * from \"./multimap\";\nexport * from \"./numeric\";\nexport * from \"./objects\";\nexport * from \"./observers\";\nexport * from \"./option\";\nexport * from \"./parameters\";\nexport * from \"./predicates\";\nexport * from \"./progress\";\nexport * from \"./random\";\nexport * from \"./range\";\nexport * from \"./schema\";\nexport * from \"./selection\";\nexport * from \"./sets\";\nexport * from \"./sorted-set\";\nexport * from \"./string-mapping\";\nexport * from \"./strings\";\nexport * from \"./terminable\";\nexport * from \"./time-span\";\nexport * from \"./sync-stream\";\nexport * from \"./uuid\";\nexport * from \"./value-guides\";\nexport * from \"./value-mapping\";\n", "import { Arrays, assert, BinarySearch, SortedSet, UUID } from \"@opendaw/lib-std\";\nexport class Address {\n static newSet(keyExtractor) {\n return new SortedSet(keyExtractor, Address.Comparator);\n }\n static compose = (uuid, ...fieldKeys) => {\n const keys = fieldKeys.length === 0 ? this.#EMPTY_FIELD_KEYS : new Int16Array(fieldKeys);\n assert(keys.every((value, index) => value === fieldKeys[index]), `fieldKeys (${keys.join(\",\")}) only allows i16`);\n return new Address(uuid, keys);\n };\n static decode(str) {\n const parts = str.split(\"/\");\n assert(parts.length > 0, \"Unable to parse Address\");\n return Address.compose(UUID.parse(parts[0]), ...parts.slice(1).map(x => parseInt(x)));\n }\n static reconstruct(layout) { return this.compose(layout[0], ...layout[1]); }\n static boxRange(set, id, map) {\n const sorted = set.values();\n const startIndex = BinarySearch.leftMostMapped(sorted, id, UUID.Comparator, map);\n const length = sorted.length;\n if (startIndex < 0 || startIndex >= length) {\n return null;\n }\n for (let endIndex = startIndex; endIndex < length; endIndex++) {\n if (UUID.Comparator(map(sorted[endIndex]), id) !== 0) {\n if (startIndex < endIndex) {\n return [startIndex, endIndex];\n }\n else {\n return null;\n }\n }\n }\n return [startIndex, length];\n }\n static Comparator = (a, b) => {\n const compareId = UUID.Comparator(a.#uuid, b.#uuid);\n if (compareId !== 0) {\n return compareId;\n }\n const n = Math.min(a.#fieldKeys.length, b.#fieldKeys.length);\n for (let i = 0; i < n; i++) {\n const comparison = (a.#fieldKeys)[i] - (b.#fieldKeys)[i];\n if (comparison !== 0) {\n return comparison;\n }\n }\n return a.#fieldKeys.length - b.#fieldKeys.length;\n };\n static MinimalComparator = (a, b) => {\n const compareId = UUID.Comparator(a.#uuid, b.#uuid);\n if (compareId !== 0) {\n return compareId;\n }\n const n = Math.min(a.#fieldKeys.length, b.#fieldKeys.length);\n for (let i = 0; i < n; i++) {\n const comparison = (a.#fieldKeys)[i] - (b.#fieldKeys)[i];\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n };\n static LengthComparator = (a, b) => {\n const compareId = UUID.Comparator(a.#uuid, b.#uuid);\n if (compareId !== 0) {\n return compareId;\n }\n return b.#fieldKeys.length - a.#fieldKeys.length;\n };\n static #EMPTY_FIELD_KEYS = new Int16Array(0);\n #uuid;\n #fieldKeys;\n constructor(uuid, fieldKeys) {\n this.#uuid = uuid;\n this.#fieldKeys = fieldKeys;\n }\n get uuid() { return this.#uuid; }\n get fieldKeys() { return this.#fieldKeys; }\n isBox() { return this.#fieldKeys.length === 0; }\n isContent() { return !this.isBox(); }\n equals(other) { return Address.Comparator(this, other) === 0; }\n compareTo(other) { return Address.Comparator(this, other); }\n append(key) {\n return new Address(this.#uuid, new Int16Array([...this.#fieldKeys, key]));\n }\n startsWith(other) {\n return UUID.Comparator(other.#uuid, this.#uuid) === 0\n && other.#fieldKeys.length <= this.#fieldKeys.length\n && other.#fieldKeys.every((value, index) => this.#fieldKeys[index] === value);\n }\n write(output) {\n output.writeBytes(new Int8Array(this.#uuid.buffer));\n output.writeByte(this.#fieldKeys.length);\n this.#fieldKeys.forEach(key => output.writeShort(key));\n }\n decompose() { return [this.#uuid, this.#fieldKeys]; }\n toJSON() { return { uuid: Array.from(this.#uuid.values()), fields: Array.from(this.#fieldKeys.values()) }; }\n toArrayBuffer() {\n const array = new Uint8Array(UUID.length + this.#fieldKeys.length);\n array.set(this.#uuid, 0);\n array.set(this.#fieldKeys, UUID.length);\n return array.buffer;\n }\n toString() { return [UUID.toString(this.#uuid), ...this.#fieldKeys].join(\"/\"); }\n static read(input) {\n const uuidBytes = UUID.fromDataInput(input);\n const numFields = input.readByte();\n return Address.compose(uuidBytes, ...Arrays.create(() => input.readShort(), numFields));\n }\n}\nexport var Addressable;\n(function (Addressable) {\n Addressable.AddressReader = (addressable) => addressable.address;\n Addressable.Comparator = ({ address: a }, { address: b }) => Address.Comparator(a, b);\n Addressable.equals = (address, sorted) => {\n const [l, r] = BinarySearch.rangeMapped(sorted, address, Address.Comparator, Addressable.AddressReader);\n return sorted.slice(l, r + 1);\n };\n Addressable.startsWith = (address, sorted) => {\n const [l, r] = BinarySearch.rangeMapped(sorted, address, Address.MinimalComparator, Addressable.AddressReader);\n return sorted\n .slice(l, r + 1)\n .filter((addressable) => addressable.address.startsWith(address));\n };\n Addressable.endsWith = (address, sorted) => {\n const l = BinarySearch.leftMostMapped(sorted, address, Address.LengthComparator, Addressable.AddressReader);\n const r = BinarySearch.rightMostMapped(sorted, address, Address.MinimalComparator, Addressable.AddressReader);\n return sorted\n .slice(l, r + 1)\n .filter((addressable) => address.startsWith(addressable.address));\n };\n})(Addressable || (Addressable = {}));\n", "import { Iterables, Listeners, Option, panic } from \"@opendaw/lib-std\";\nimport { Address } from \"./address\";\nexport class PointerHub {\n static validate(pointer, target) {\n if (pointer.address.equals(target.address)) {\n return Option.wrap(`PointerField cannot point to itself: ${pointer}`);\n }\n if (!target.pointerRules.accepts.some((type) => type === pointer.pointerType)) {\n console.warn(target.pointerRules);\n return Option.wrap(`${pointer.toString()} does not satisfy any of the allowed types (${(target.pointerRules)}).`);\n }\n return Option.None;\n }\n #vertex;\n #immediateListeners;\n #transactualListeners;\n #inTransaction = Option.None;\n constructor(vertex) {\n this.#vertex = vertex;\n this.#immediateListeners = new Listeners();\n this.#transactualListeners = new Listeners();\n }\n subscribeImmediate(listener, ...filter) {\n return this.#addFilteredListener(this.#immediateListeners, listener, filter);\n }\n subscribeTransactual(listener, ...filter) {\n return this.#addFilteredListener(this.#transactualListeners, listener, filter);\n }\n catchupAndSubscribeTransactual(listener, ...filter) {\n const added = Address.newSet(pointer => pointer.address);\n added.addMany(this.filter(...filter));\n added.forEach(pointer => listener.onAdd(pointer));\n // This takes track of the listeners notification state.\n // It is possible that the pointer has been added, but it has not been notified yet.\n // That would cause the listener.onAdd method to be involked twice.\n return this.subscribeTransactual({\n onAdd: (pointer) => {\n if (added.add(pointer)) {\n listener.onAdd(pointer);\n }\n },\n onRemove: (pointer) => {\n added.removeByKey(pointer.address);\n listener.onRemove(pointer);\n }\n }, ...filter);\n }\n filter(...types) {\n return (types.length === 0 ? this.incoming() : Iterables.filter(this, (pointerField) => types.some((type) => type === pointerField.pointerType)));\n }\n size() { return this.incoming().length; }\n isEmpty() { return this.size() === 0; }\n nonEmpty() { return this.size() > 0; }\n contains(pointer) { return this.incoming().some(incoming => pointer.address.equals(incoming.address)); }\n incoming() { return this.#vertex.graph.edges().incomingEdgesOf(this.#vertex); }\n onAdded(pointerField) {\n const issue = PointerHub.validate(pointerField, this.#vertex);\n if (issue.nonEmpty()) {\n return panic(issue.unwrap());\n }\n if (this.#inTransaction.isEmpty()) {\n this.#vertex.graph.subscribeEndTransaction(this.#onEndTransaction);\n this.#inTransaction = Option.wrap(new Set(this));\n }\n this.#immediateListeners.proxy.onAdd(pointerField);\n }\n onRemoved(pointerField) {\n if (this.#inTransaction.isEmpty()) {\n this.#vertex.graph.subscribeEndTransaction(this.#onEndTransaction);\n this.#inTransaction = Option.wrap(new Set(this));\n }\n this.#immediateListeners.proxy.onRemove(pointerField);\n }\n [Symbol.iterator]() { return this.incoming().values(); }\n toString() {\n return `{Pointers ${this.#vertex.address}, pointers: ${Array.from(this)\n .map((pointerField) => pointerField.toString())}}`;\n }\n #addFilteredListener(listeners, listener, filter) {\n return listeners.subscribe({\n onAdd: (pointer) => {\n if (filter.length === 0 || filter.some((type) => type === pointer.pointerType)) {\n listener.onAdd(pointer);\n }\n },\n onRemove: (pointer) => {\n if (filter.length === 0 || filter.some((type) => type === pointer.pointerType)) {\n listener.onRemove(pointer);\n }\n }\n });\n }\n #onEndTransaction = () => {\n if (this.#vertex.isAttached()) {\n const beforeState = this.#inTransaction.unwrap(\"Callback without transaction\");\n const afterState = new Set(this);\n beforeState.forEach(pointer => {\n if (!afterState.has(pointer)) {\n this.#transactualListeners.proxy.onRemove(pointer);\n }\n });\n afterState.forEach(pointer => {\n if (!beforeState.has(pointer)) {\n this.#transactualListeners.proxy.onAdd(pointer);\n }\n });\n }\n this.#inTransaction = Option.None;\n };\n}\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nimport { Iterables, Lazy, Option, panic, safeExecute } from \"@opendaw/lib-std\";\nimport { Address } from \"./address\";\nimport { PointerHub } from \"./pointer-hub\";\nexport class Field {\n static hook(construct) {\n return new Field(construct);\n }\n #parent;\n #fieldKey;\n #fieldName;\n #pointerRules;\n constructor({ parent, fieldKey, fieldName, pointerRules }) {\n this.#parent = parent;\n this.#fieldKey = fieldKey;\n this.#fieldName = fieldName;\n this.#pointerRules = pointerRules;\n if (pointerRules.mandatory) {\n this.graph.edges().watchVertex(this);\n }\n }\n accept(visitor) {\n return safeExecute(visitor.visitField, this);\n }\n get box() { return this.#parent.box; }\n get graph() { return this.#parent.graph; }\n get parent() { return this.#parent; }\n get fieldKey() { return this.#fieldKey; }\n get fieldName() { return this.#fieldName; }\n get pointerRules() { return this.#pointerRules; }\n get pointerHub() { return new PointerHub(this); }\n get address() { return this.#parent.address.append(this.#fieldKey); }\n get debugPath() {\n return `${this.box.name}:${this.box.mapFields(field => field.fieldName, ...this.address.fieldKeys).join(\"/\")}`;\n }\n isBox() { return false; }\n isField() { return true; }\n isAttached() { return this.graph.findBox(this.address.uuid).nonEmpty(); }\n fields() { return Iterables.empty(); }\n getField(_key) { return panic(); }\n optField(_key) { return Option.None; }\n read(_input) { }\n write(_output) { }\n disconnect() {\n if (this.pointerHub.isEmpty()) {\n return;\n }\n const incoming = this.pointerHub.incoming();\n incoming.forEach(pointer => {\n pointer.defer();\n if (pointer.mandatory || (this.pointerRules.mandatory && incoming.length === 1)) {\n pointer.box.delete();\n }\n });\n }\n toString() { return `{${this.box.constructor.name}:${this.constructor.name} (${this.fieldName}) ${this.address.toString()}`; }\n}\n__decorate([\n Lazy,\n __metadata(\"design:type\", PointerHub),\n __metadata(\"design:paramtypes\", [])\n], Field.prototype, \"pointerHub\", null);\n__decorate([\n Lazy,\n __metadata(\"design:type\", Address),\n __metadata(\"design:paramtypes\", [])\n], Field.prototype, \"address\", null);\n__decorate([\n Lazy,\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], Field.prototype, \"debugPath\", null);\n", "export const NoPointers = Object.freeze({ mandatory: false, accepts: [] });\n", "import { Field } from \"./field\";\nimport { Arrays, asDefined, Option, safeExecute } from \"@opendaw/lib-std\";\nimport { NoPointers } from \"./vertex\";\nexport class ArrayField extends Field {\n static create(construct, factory, length) {\n return new ArrayField(construct, factory, length);\n }\n #fields;\n constructor(construct, factory, length) {\n super(construct);\n this.#fields = Arrays.create((index) => factory({\n parent: this,\n fieldKey: index,\n fieldName: String(index),\n pointerRules: NoPointers\n }), length);\n }\n accept(visitor) {\n return safeExecute(visitor.visitArrayField, this);\n }\n fields() { return this.#fields; }\n getField(key) {\n return asDefined(this.#fields[key]);\n }\n optField(key) {\n return Option.wrap(this.#fields[key]);\n }\n read(input) { this.#fields.forEach(field => field.read(input)); }\n write(output) { this.#fields.forEach(field => field.write(output)); }\n size() { return this.#fields.length; }\n toJSON() { return this.#fields; }\n}\n", "import { assert, ByteArrayInput, ByteArrayOutput } from \"@opendaw/lib-std\";\nexport var Serializer;\n(function (Serializer) {\n const MAGIC_HEADER = 0x464c4453;\n Serializer.writeFields = (output, fields) => {\n const entries = Object.entries(fields);\n output.writeInt(MAGIC_HEADER);\n output.writeShort(entries.length);\n entries.forEach(([key, field]) => {\n const bytes = ByteArrayOutput.create();\n field.write(bytes);\n const buffer = new Int8Array(bytes.toArrayBuffer());\n output.writeShort(Number(key));\n output.writeInt(buffer.length);\n output.writeBytes(buffer);\n });\n };\n Serializer.readFields = (input, fields) => {\n assert(input.readInt() === MAGIC_HEADER, \"Serializer header is corrupt\");\n const numFields = input.readShort();\n for (let fieldIndex = 0; fieldIndex < numFields; fieldIndex++) {\n const key = input.readShort();\n const byteLength = input.readInt();\n const bytes = new Int8Array(byteLength);\n input.readBytes(bytes);\n fields[key]?.read(new ByteArrayInput(bytes.buffer));\n }\n };\n})(Serializer || (Serializer = {}));\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nimport { Address } from \"./address\";\nimport { Arrays, asDefined, ByteArrayOutput, ByteCounter, Lazy, Option } from \"@opendaw/lib-std\";\nimport { PointerHub } from \"./pointer-hub\";\nimport { Serializer } from \"./serializer\";\nexport class Box {\n static DEBUG_DELETION = false;\n static Index = 0 | 0;\n #address;\n #graph;\n #name;\n #pointerRules;\n #fields;\n #creationIndex = Box.Index++;\n constructor({ uuid, graph, name, pointerRules }) {\n this.#address = Address.compose(uuid);\n this.#graph = graph;\n this.#name = name;\n this.#pointerRules = pointerRules;\n this.#fields = this.initializeFields();\n if (pointerRules.mandatory) {\n this.graph.edges().watchVertex(this);\n }\n }\n fields() { return Object.values(this.#fields); }\n getField(key) { return asDefined(this.#fields[key]); }\n optField(key) { return Option.wrap(this.#fields[key]); }\n subscribe(propagation, procedure) {\n return this.graph.subscribeVertexUpdates(propagation, this.address, procedure);\n }\n get box() { return this; }\n get name() { return this.#name; }\n get graph() { return this.#graph; }\n get parent() { return this; }\n get address() { return this.#address; }\n get pointerRules() { return this.#pointerRules; }\n get creationIndex() { return this.#creationIndex; }\n get pointerHub() { return new PointerHub(this); }\n estimateMemory() {\n const byteCounter = new ByteCounter();\n this.write(byteCounter);\n return byteCounter.count;\n }\n isBox() { return true; }\n isField() { return false; }\n isAttached() { return this.#graph.findBox(this.address.uuid).nonEmpty(); }\n read(input) { Serializer.readFields(input, this.#fields); }\n write(output) { Serializer.writeFields(output, this.#fields); }\n serialize() {\n const output = ByteArrayOutput.create();\n output.writeInt(this.#creationIndex); // allows to re-load the boxes in same order as created\n output.writeString(this.name);\n output.writeBytes(new Int8Array(this.address.uuid.buffer));\n this.write(output);\n return output.toArrayBuffer();\n }\n toArrayBuffer() {\n const output = ByteArrayOutput.create();\n this.write(output);\n return output.toArrayBuffer();\n }\n incomingEdges() { return this.graph.edges().incomingEdgesOf(this); }\n outgoingEdges() { return this.graph.edges().outgoingEdgesOf(this); }\n mapFields(map, ...keys) {\n if (keys.length === 0) {\n return Arrays.empty();\n }\n let parent = this.getField(keys[0]);\n const result = [map(parent)];\n for (let index = 1; index < keys.length; index++) {\n parent = parent.getField(keys[index]);\n result.push(map(parent));\n }\n return result;\n }\n searchVertex(keys) {\n if (keys.length === 0) {\n return Option.wrap(this);\n }\n let parent = this.optField(keys[0]);\n if (parent.isEmpty()) {\n return Option.None;\n }\n for (let index = 1; index < keys.length; index++) {\n parent = parent.unwrap().optField(keys[index]);\n if (parent.isEmpty()) {\n return Option.None;\n }\n }\n return parent;\n }\n delete() {\n const { boxes, pointers } = this.graph.dependenciesOf(this);\n if (Box.DEBUG_DELETION) {\n console.debug(`Delete ${this.toString()}`);\n console.debug(\"\\tunplugs\", [...pointers].map(x => x.toString()).join(\"\\n\"));\n console.debug(\"\\tunstages\", [...boxes].map(x => x.toString()).join(\"\\n\"), this);\n }\n for (const pointer of pointers) {\n pointer.defer();\n }\n for (const box of boxes) {\n box.unstage();\n }\n this.unstage();\n }\n unstage() { this.graph.unstageBox(this); }\n toString() { return `${this.constructor.name} ${this.address.toString()}`; }\n}\n__decorate([\n Lazy,\n __metadata(\"design:type\", PointerHub),\n __metadata(\"design:paramtypes\", [])\n], Box.prototype, \"pointerHub\", null);\n", "import { Terminator, Unhandled } from \"@opendaw/lib-std\";\nimport { Addressable } from \"./address\";\nexport var Propagation;\n(function (Propagation) {\n Propagation[Propagation[\"This\"] = 0] = \"This\";\n Propagation[Propagation[\"Parent\"] = 1] = \"Parent\";\n Propagation[Propagation[\"Children\"] = 2] = \"Children\";\n})(Propagation || (Propagation = {}));\nexport var Dispatchers;\n(function (Dispatchers) {\n Dispatchers.create = () => new DispatchersImpl();\n})(Dispatchers || (Dispatchers = {}));\nclass DispatchersImpl {\n #thisDispatcher = new Dispatcher(Addressable.equals);\n #parentDispatcher = new Dispatcher(Addressable.startsWith);\n #childrenDispatcher = new Dispatcher(Addressable.endsWith);\n #deferredStations = [];\n #order = 0 | 0;\n #dispatching = false;\n subscribe(propagation, address, procedure) {\n const monitor = new Monitor(address, propagation, this.#order++, procedure);\n if (this.#dispatching) {\n const deferred = new DeferredMonitor(monitor, propagation);\n this.#deferredStations.push(deferred);\n return deferred;\n }\n else {\n return this.subscribeMonitor(monitor, propagation);\n }\n }\n dispatch(target) {\n this.#dispatching = true;\n const invoked = [\n ...this.#thisDispatcher.filter(target),\n ...this.#parentDispatcher.filter(target),\n ...this.#childrenDispatcher.filter(target)\n ];\n invoked\n .sort(({ order: a }, { order: b }) => a - b)\n .forEach((station) => station.procedure(target));\n this.#dispatching = false;\n this.#deferredStations.forEach((station) => station.subscribe(this));\n this.#deferredStations.length = 0;\n }\n subscribeMonitor(monitor, propagation) {\n switch (propagation) {\n case Propagation.This:\n return this.#thisDispatcher.subscribe(monitor);\n case Propagation.Parent:\n return this.#parentDispatcher.subscribe(monitor);\n case Propagation.Children:\n return this.#childrenDispatcher.subscribe(monitor);\n default:\n return Unhandled(propagation);\n }\n }\n countStations() {\n return this.#thisDispatcher.count() + this.#parentDispatcher.count() + this.#childrenDispatcher.count();\n }\n}\nclass Monitor {\n address;\n propagation;\n order;\n procedure;\n constructor(address, propagation, order, procedure) {\n this.address = address;\n this.propagation = propagation;\n this.order = order;\n this.procedure = procedure;\n }\n toString() {\n return `{ Monitor address: ${this.address}, propagation: ${Propagation[this.propagation]}, order: ${this.order} }`;\n }\n}\nclass Dispatcher {\n filterStrategy;\n #monitors = [];\n #sorted = true;\n constructor(filterStrategy) {\n this.filterStrategy = filterStrategy;\n }\n subscribe(monitor) {\n this.#monitors.push(monitor);\n this.#sorted = this.#monitors.length < 2;\n return {\n terminate: () => {\n let index = this.#monitors.length;\n while (--index >= 0) {\n if (this.#monitors[index] === monitor) {\n this.#monitors.splice(index, 1);\n }\n }\n }\n };\n }\n stations() {\n if (!this.#sorted) {\n this.#monitors.sort(Addressable.Comparator);\n this.#sorted = true;\n }\n return this.#monitors;\n }\n filter(target) { return this.filterStrategy(target.address, this.stations()); }\n count() { return this.#monitors.length; }\n}\nclass DeferredMonitor {\n monitor;\n propagation;\n #terminator = new Terminator();\n #terminated = false;\n constructor(monitor, propagation) {\n this.monitor = monitor;\n this.propagation = propagation;\n }\n subscribe(dispatchers) {\n if (this.#terminated) {\n return;\n }\n this.#terminator.terminate();\n this.#terminator.own(dispatchers.subscribeMonitor(this.monitor, this.propagation));\n }\n terminate() {\n this.#terminated = true;\n this.#terminator.terminate();\n }\n}\n", "import { Field } from \"./field\";\nimport { assert, Float, Integer, safeExecute } from \"@opendaw/lib-std\";\nimport { Propagation } from \"./dispatchers\";\nexport var PrimitiveType;\n(function (PrimitiveType) {\n PrimitiveType[\"Boolean\"] = \"boolean\";\n PrimitiveType[\"Float32\"] = \"float32\";\n PrimitiveType[\"Int32\"] = \"int32\";\n PrimitiveType[\"String\"] = \"string\";\n PrimitiveType[\"Bytes\"] = \"bytes\";\n})(PrimitiveType || (PrimitiveType = {}));\nexport const ValueSerialization = {\n [PrimitiveType.Boolean]: {\n type: PrimitiveType.Boolean,\n encode: (output, value) => output.writeBoolean(value),\n decode: (input) => input.readBoolean()\n },\n [PrimitiveType.Float32]: {\n type: PrimitiveType.Float32,\n encode: (output, value) => output.writeFloat(value),\n decode: (input) => input.readFloat()\n },\n [PrimitiveType.Int32]: {\n type: PrimitiveType.Int32,\n encode: (output, value) => output.writeInt(value),\n decode: (input) => input.readInt()\n },\n [PrimitiveType.String]: {\n type: PrimitiveType.String,\n encode: (output, value) => output.writeString(value),\n decode: (input) => input.readString()\n },\n [PrimitiveType.Bytes]: {\n type: PrimitiveType.Bytes,\n encode: (output, value) => {\n output.writeInt(value.length);\n output.writeBytes(value);\n },\n decode: (input) => {\n const array = new Int8Array(input.readInt());\n input.readBytes(array);\n return array;\n }\n }\n};\nexport class PrimitiveField extends Field {\n #type;\n #initValue;\n #value;\n constructor(field, type, value) {\n super(field);\n this.#type = type;\n this.#initValue = this.clamp(value);\n this.#value = this.#initValue;\n }\n accept(visitor) {\n return safeExecute(visitor.visitPrimitiveField, this);\n }\n subscribe(observer) {\n return this.graph.subscribeVertexUpdates(Propagation.This, this.address, () => observer(this));\n }\n catchupAndSubscribe(observer) {\n observer(this);\n return this.subscribe(observer);\n }\n get type() { return this.#type; }\n get initValue() { return this.#initValue; }\n setInitValue(value) {\n assert(this.graph.constructingBox(), \"Cannot change initial value at runtime\");\n this.setValue(this.#initValue = value);\n }\n getValue() { return this.#value; }\n setValue(value) {\n const oldValue = this.#value;\n const newValue = this.clamp(value);\n if (this.equals(newValue)) {\n return;\n }\n this.#value = value;\n this.graph.onPrimitiveValueUpdate(this, oldValue, newValue);\n }\n writeValue(output, value) { this.serialization().encode(output, value); }\n readValue(input) { return this.serialization().decode(input); }\n reset() { this.setValue(this.#initValue); }\n}\nexport class BooleanField extends PrimitiveField {\n static create(construct, value = false) {\n return new BooleanField(construct, value);\n }\n constructor(construct, value) { super(construct, PrimitiveType.Boolean, value); }\n toggle() { this.setValue(!this.getValue()); }\n serialization() { return ValueSerialization[PrimitiveType.Boolean]; }\n equals(value) { return this.getValue() === value; }\n clamp(value) { return value; }\n read(input) { this.setValue(input.readBoolean()); }\n write(output) { output.writeBoolean(this.getValue()); }\n}\nexport class Float32Field extends PrimitiveField {\n static create(construct, value = 0.0) {\n return new Float32Field(construct, value);\n }\n constructor(construct, value) { super(construct, PrimitiveType.Float32, value); }\n serialization() { return ValueSerialization[PrimitiveType.Float32]; }\n equals(value) { return this.getValue() === value; }\n clamp(value) { return Float.toFloat32(value); }\n read(input) { this.setValue(input.readFloat()); }\n write(output) { output.writeFloat(this.getValue()); }\n}\nexport class Int32Field extends PrimitiveField {\n static create(construct, value = 0) {\n return new Int32Field(construct, value);\n }\n constructor(construct, value) { super(construct, PrimitiveType.Int32, value); }\n serialization() { return ValueSerialization[PrimitiveType.Int32]; }\n equals(value) { return this.getValue() === value; }\n clamp(value) { return Integer.toInt(value); }\n read(input) { this.setValue(input.readInt()); }\n write(output) { output.writeInt(this.getValue()); }\n}\nexport class StringField extends PrimitiveField {\n static create(construct, value = \"\") {\n return new StringField(construct, value);\n }\n constructor(construct, value) { super(construct, PrimitiveType.String, value); }\n serialization() { return ValueSerialization[PrimitiveType.String]; }\n equals(value) { return this.getValue() === value; }\n clamp(value) { return value; }\n read(input) { this.setValue(input.readString()); }\n write(output) { output.writeString(this.getValue()); }\n}\nexport class ByteArrayField extends PrimitiveField {\n static create(construct, value = this.#empty) {\n return new ByteArrayField(construct, value);\n }\n static #empty = Object.freeze(new Int8Array(0));\n constructor(construct, value) { super(construct, PrimitiveType.Bytes, value); }\n serialization() { return ValueSerialization[PrimitiveType.Bytes]; }\n equals(value) {\n return this.getValue().length === value.length && this.getValue().every((x, index) => value[index] === x);\n }\n clamp(value) { return value; }\n read(input) {\n const bytes = new Int8Array(input.readInt());\n input.readBytes(bytes);\n this.setValue(bytes);\n }\n write(output) {\n const bytes = this.getValue();\n output.writeInt(bytes.length);\n output.writeBytes(bytes);\n }\n}\n", "import { ValueSerialization } from \"./primitive\";\nimport { Address } from \"./address\";\nimport { Arrays, ByteArrayInput, Option, UUID } from \"@opendaw/lib-std\";\nexport var Updates;\n(function (Updates) {\n Updates.decode = (input) => {\n const numBlocks = input.readInt();\n return Arrays.create(() => {\n const type = input.readString();\n switch (type) {\n case \"new\": {\n const uuid = UUID.fromDataInput(input);\n const name = input.readString();\n const settings = new Int8Array(input.readInt());\n input.readBytes(settings);\n return new NewUpdate(uuid, name, settings.buffer);\n }\n case \"pointer\": {\n const address = Address.read(input);\n const oldAddress = input.readBoolean() ? Option.wrap(Address.read(input)) : Option.None;\n const newAddress = input.readBoolean() ? Option.wrap(Address.read(input)) : Option.None;\n return new PointerUpdate(address, oldAddress, newAddress);\n }\n case \"primitive\": {\n const address = Address.read(input);\n const type = input.readString();\n const serializer = ValueSerialization[type];\n const oldValue = serializer.decode(input);\n const newValue = serializer.decode(input);\n return new PrimitiveUpdate(address, serializer, oldValue, newValue);\n }\n case \"delete\": {\n const uuid = UUID.fromDataInput(input);\n const name = input.readString();\n const settings = new Int8Array(input.readInt());\n input.readBytes(settings);\n return new DeleteUpdate(uuid, name, settings.buffer);\n }\n }\n }, numBlocks);\n };\n})(Updates || (Updates = {}));\nexport class NewUpdate {\n type = \"new\";\n #uuid;\n #name;\n #settings;\n constructor(uuid, name, settings) {\n this.#uuid = uuid;\n this.#name = name;\n this.#settings = settings;\n }\n get uuid() { return this.#uuid; }\n get name() { return this.#name; }\n get settings() { return this.#settings; }\n forward(graph) {\n graph.createBox(this.#name, this.#uuid, box => box.read(new ByteArrayInput(this.#settings)));\n }\n inverse(graph) {\n graph.findBox(this.#uuid).unwrap(() => `Could not find ${this.#name}`).unstage();\n }\n write(output) {\n output.writeString(this.type);\n UUID.toDataOutput(output, this.#uuid);\n output.writeString(this.#name);\n output.writeInt(this.#settings.byteLength);\n output.writeBytes(new Int8Array(this.#settings));\n }\n toString() {\n return `{NewUpdate uuid: ${UUID.toString(this.#uuid)}, attachment: ${this.settings.byteLength}b`;\n }\n toDebugString(_graph) { return this.toString(); }\n}\nexport class PrimitiveUpdate {\n type = \"primitive\";\n #address;\n #serialization;\n #oldValue;\n #newValue;\n constructor(address, serialization, oldValue, newValue) {\n this.#address = address;\n this.#serialization = serialization;\n this.#oldValue = oldValue;\n this.#newValue = newValue;\n }\n get address() { return this.#address; }\n get oldValue() { return this.#oldValue; }\n get newValue() { return this.#newValue; }\n matches(field) { return field.address.equals(this.address); }\n inverse(graph) { this.field(graph).setValue(this.#oldValue); }\n forward(graph) { this.field(graph).setValue(this.#newValue); }\n field(graph) {\n return graph.findVertex(this.#address)\n .unwrap(() => `Could not find PrimitiveField at ${this.#address}`);\n }\n write(output) {\n output.writeString(this.type);\n this.#address.write(output);\n output.writeString(this.#serialization.type);\n this.#serialization.encode(output, this.#oldValue);\n this.#serialization.encode(output, this.#newValue);\n }\n toString() {\n return `{PrimitiveUpdate oldValue: ${this.#oldValue}, newValue: ${this.#newValue}`;\n }\n}\nexport class PointerUpdate {\n type = \"pointer\";\n #address;\n #oldValue;\n #newValue;\n constructor(address, oldValue, newValue) {\n this.#address = address;\n this.#oldValue = oldValue;\n this.#newValue = newValue;\n }\n get address() { return this.#address; }\n get oldValue() { return this.#oldValue; }\n get newValue() { return this.#newValue; }\n matches(field) { return field.address.equals(this.address); }\n inverse(graph) { this.field(graph).targetAddress = this.#oldValue; }\n forward(graph) { this.field(graph).targetAddress = this.#newValue; }\n field(graph) {\n return graph.findVertex(this.#address)\n .unwrap(() => `Could not find PointerField at ${this.#address}`);\n }\n write(output) {\n output.writeString(this.type);\n this.#address.write(output);\n this.#oldValue.match({\n none: () => output.writeBoolean(false),\n some: address => {\n output.writeBoolean(true);\n address.write(output);\n }\n });\n this.#newValue.match({\n none: () => output.writeBoolean(false),\n some: address => {\n output.writeBoolean(true);\n address.write(output);\n }\n });\n }\n toString() {\n return `{PointerUpdate oldValue: ${this.#oldValue.unwrapOrNull()}, newValue: ${this.#newValue.unwrapOrNull()}`;\n }\n}\nexport class DeleteUpdate {\n type = \"delete\";\n #uuid;\n #name;\n #settings;\n constructor(uuid, name, settings) {\n this.#uuid = uuid;\n this.#name = name;\n this.#settings = settings;\n }\n get uuid() { return this.#uuid; }\n get name() { return this.#name; }\n get settings() { return this.#settings; }\n forward(graph) {\n graph.findBox(this.#uuid).unwrap(() => `Could not find ${this.#name}`).unstage();\n }\n inverse(graph) {\n graph.createBox(this.#name, this.#uuid, box => box.read(new ByteArrayInput(this.#settings)));\n }\n write(output) {\n output.writeString(this.type);\n UUID.toDataOutput(output, this.#uuid);\n output.writeString(this.#name);\n output.writeInt(this.#settings.byteLength);\n output.writeBytes(new Int8Array(this.#settings));\n }\n toString() {\n return `{DeleteUpdate uuid: ${UUID.toString(this.#uuid)}, attachment: ${this.settings.byteLength}b`;\n }\n}\n", "import { Option, panic, safeExecute } from \"@opendaw/lib-std\";\nimport { Address } from \"./address\";\nimport { PointerHub } from \"./pointer-hub\";\nimport { Field } from \"./field\";\nimport { Propagation } from \"./dispatchers\";\nconst _Unreferenceable = Symbol(\"Unreferenceable\");\nexport class PointerField extends Field {\n static create(construct, pointerType, mandatory) {\n return new PointerField(construct, pointerType, mandatory);\n }\n #pointerType;\n #mandatory;\n #targetVertex = Option.None;\n #targetAddress = Option.None;\n constructor(field, pointerType, mandatory) {\n super(field);\n this.#pointerType = pointerType;\n this.#mandatory = mandatory;\n if (mandatory) {\n this.graph.edges().watchVertex(this);\n }\n }\n get pointerHub() { return panic(`${this} cannot be pointed to`); }\n get pointerType() { return this.#pointerType; }\n get mandatory() { return this.#mandatory; }\n accept(visitor) {\n return safeExecute(visitor.visitPointerField, this);\n }\n subscribe(observer) {\n return this.graph.subscribeVertexUpdates(Propagation.This, this.address, () => observer(this));\n }\n catchupAndSubscribe(observer) {\n observer(this);\n return this.graph.subscribeVertexUpdates(Propagation.This, this.address, () => this.graph.subscribeEndTransaction(() => observer(this)));\n }\n refer(vertex) {\n this.targetVertex = Option.wrap(vertex);\n }\n defer() { this.targetVertex = Option.None; }\n get targetVertex() { return this.#targetVertex; }\n set targetVertex(option) {\n if (option.nonEmpty()) {\n const issue = PointerHub.validate(this, option.unwrap());\n if (issue.nonEmpty()) {\n panic(issue.unwrap());\n }\n }\n this.targetAddress = option.map(vertex => vertex.address);\n }\n get targetAddress() { return this.#targetAddress; }\n set targetAddress(newValue) {\n const oldValue = this.#targetAddress;\n if ((oldValue.isEmpty() && newValue.isEmpty())\n || (newValue.nonEmpty() && oldValue.unwrapOrNull()?.equals(newValue.unwrap())) === true) {\n return;\n }\n this.#targetAddress = newValue;\n this.graph.onPointerAddressUpdated(this, oldValue, newValue);\n }\n isEmpty() { return this.targetAddress.isEmpty(); }\n nonEmpty() { return this.targetAddress.nonEmpty(); }\n resolve() {\n const targetAddress = this.targetAddress;\n const target = targetAddress.flatMap((address) => this.graph.findVertex(address));\n if (targetAddress.nonEmpty() && target.isEmpty()) {\n return panic(`${targetAddress.unwrapOrNull()?.toString()} could not be resolved`);\n }\n this.#targetVertex = target;\n }\n read(input) {\n this.targetAddress = input.readBoolean() ? Option.wrap(Address.read(input)) : Option.None;\n }\n write(output) {\n this.#targetAddress.match({\n none: () => output.writeBoolean(false),\n some: address => {\n output.writeBoolean(true);\n address.write(output);\n }\n });\n }\n}\n", "import { Arrays, assert, isDefined, isInstanceOf, panic } from \"@opendaw/lib-std\";\nimport { Address } from \"./address\";\nimport { PointerField } from \"./pointer\";\nexport class GraphEdges {\n #requiresTarget;\n #requiresPointer;\n #incoming;\n #outgoing;\n constructor() {\n this.#requiresTarget = Address.newSet(source => source.address);\n this.#requiresPointer = Address.newSet(vertex => vertex.address);\n this.#incoming = Address.newSet(([vertex]) => vertex.address);\n this.#outgoing = Address.newSet(([source]) => source.address);\n }\n watchVertex(vertex) {\n if (isInstanceOf(vertex, PointerField)) {\n if (!vertex.mandatory) {\n return panic(\"watchVertex called but has no edge requirement\");\n }\n this.#requiresTarget.add(vertex);\n }\n else {\n if (!vertex.pointerRules.mandatory) {\n return panic(\"watchVertex called but has no edge requirement\");\n }\n this.#requiresPointer.add(vertex);\n }\n }\n unwatchVerticesOf(...boxes) {\n const map = ({ box: { address: { uuid } } }) => uuid;\n for (const { address: { uuid } } of boxes) {\n this.#removeSameBox(this.#requiresTarget, uuid, map);\n this.#removeSameBox(this.#requiresPointer, uuid, map);\n }\n for (const box of boxes) {\n const outgoingLinks = this.outgoingEdgesOf(box);\n if (outgoingLinks.length > 0) {\n return panic(`${box} has outgoing edges: ${outgoingLinks.map(([source, target]) => `[${source.toString()}, ${target.toString()}]`)}`);\n }\n const incomingPointers = this.incomingEdgesOf(box);\n if (incomingPointers.length > 0) {\n return panic(`${box} has incoming edges from: ${incomingPointers.map((source) => source.toString())}`);\n }\n }\n }\n connect(source, target) {\n this.#outgoing.add([source, target]);\n this.#incoming.opt(target.address).match({\n none: () => this.#incoming.add([target, [source]]),\n some: ([, sources]) => sources.push(source)\n });\n }\n disconnect(source) {\n const [, target] = this.#outgoing.removeByKey(source.address);\n const [, sources] = this.#incoming.get(target.address);\n Arrays.remove(sources, source);\n if (sources.length === 0) {\n this.#incoming.removeByKey(target.address);\n }\n }\n outgoingEdgesOf(box) {\n return this.#collectSameBox(this.#outgoing, box.address.uuid, ([{ box: { address: { uuid } } }]) => uuid);\n }\n incomingEdgesOf(vertex) {\n if (vertex.isBox()) {\n return this.#collectSameBox(this.#incoming, vertex.address.uuid, ([{ address: { uuid } }]) => uuid)\n .flatMap(([_, pointers]) => pointers);\n }\n else {\n return this.#incoming.opt(vertex.address).mapOr(([_, pointers]) => pointers, Arrays.empty());\n }\n }\n validateRequirements() {\n this.#requiresTarget.forEach(pointer => {\n if (pointer.isEmpty()) {\n if (pointer.mandatory) {\n return panic(`Pointer ${pointer.toString()} requires an edge.`);\n }\n else {\n return panic(`Illegal state: ${pointer} has no edge requirements.`);\n }\n }\n });\n this.#requiresPointer.forEach(target => {\n if (target.pointerHub.isEmpty()) {\n if (target.pointerRules.mandatory) {\n return panic(`Target ${target.toString()} requires an edge.`);\n }\n else {\n return panic(`Illegal state: ${target} has no edge requirements.`);\n }\n }\n });\n }\n verifyPointers() {\n this.#requiresTarget.forEach(pointer => assert(pointer.isAttached(), `${pointer.address.toString()} is not attached`));\n this.#requiresPointer.forEach(pointer => assert(pointer.isAttached(), `${pointer.address.toString()} is not attached`));\n }\n #collectSameBox(set, id, map) {\n const range = Address.boxRange(set, id, map);\n return isDefined(range) ? set.values().slice(range[0], range[1]) : Arrays.empty();\n }\n #removeSameBox(set, id, map) {\n const range = Address.boxRange(set, id, map);\n if (isDefined(range)) {\n set.removeRange(range[0], range[1]);\n }\n }\n}\n", "import { assert, ByteArrayInput, ByteArrayOutput, Checksum, isDefined, Listeners, Option, panic, UUID } from \"@opendaw/lib-std\";\nimport { Dispatchers } from \"./dispatchers\";\nimport { DeleteUpdate, NewUpdate, PointerUpdate, PrimitiveUpdate } from \"./updates\";\nimport { GraphEdges } from \"./graph-edges\";\nexport class BoxGraph {\n #boxFactory;\n #boxes;\n #deferredPointerUpdates;\n #updateListeners;\n #immediateUpdateListeners;\n #transactionListeners;\n #dispatchers;\n #edges;\n #finalizeTransactionObservers;\n #inTransaction = false;\n #constructingBox = false;\n constructor(boxFactory = Option.None) {\n this.#boxFactory = boxFactory;\n this.#boxes = UUID.newSet(box => box.address.uuid);\n this.#deferredPointerUpdates = [];\n this.#dispatchers = Dispatchers.create();\n this.#updateListeners = new Listeners();\n this.#immediateUpdateListeners = new Listeners();\n this.#transactionListeners = new Listeners();\n this.#edges = new GraphEdges();\n this.#finalizeTransactionObservers = [];\n }\n beginTransaction() {\n assert(!this.#inTransaction, \"Transaction already in progress\");\n this.#inTransaction = true;\n this.#transactionListeners.proxy.onBeginTransaction();\n }\n endTransaction() {\n assert(this.#inTransaction, \"No transaction in progress\");\n this.#inTransaction = false;\n this.resolvePointers();\n // it is possible that new observers will be added while executing\n while (this.#finalizeTransactionObservers.length > 0) {\n this.#finalizeTransactionObservers.splice(0).forEach(observer => observer());\n if (this.#finalizeTransactionObservers.length > 0) {\n console.debug(`${this.#finalizeTransactionObservers.length} new observers while notifying`);\n }\n }\n this.#transactionListeners.proxy.onEndTransaction();\n }\n inTransaction() { return this.#inTransaction; }\n constructingBox() { return this.#constructingBox; }\n resolvePointers() {\n if (this.#deferredPointerUpdates.length === 0) {\n return;\n }\n this.#deferredPointerUpdates.forEach(({ pointerField, update }) => this.#processPointerValueUpdate(pointerField, update));\n this.#deferredPointerUpdates.length = 0;\n }\n createBox(name, uuid, constructor) {\n this.#boxFactory.unwrap(\"No box-factory installed\")(name, this, uuid, constructor);\n }\n stageBox(box, constructor) {\n this.#assertTransaction();\n assert(!this.#constructingBox, \"Cannot construct box while other box is constructing\");\n if (isDefined(constructor)) {\n this.#constructingBox = true;\n constructor(box);\n this.#constructingBox = false;\n }\n const added = this.#boxes.add(box);\n assert(added, `${box} already staged`);\n const update = new NewUpdate(box.address.uuid, box.name, box.toArrayBuffer());\n this.#updateListeners.proxy.onUpdate(update);\n this.#immediateUpdateListeners.proxy.onUpdate(update);\n return box;\n }\n subscribeTransaction(listener) {\n return this.#transactionListeners.subscribe(listener);\n }\n subscribeToAllUpdates(listener) {\n return this.#updateListeners.subscribe(listener);\n }\n subscribeToAllUpdatesImmediate(listener) {\n return this.#immediateUpdateListeners.subscribe(listener);\n }\n subscribeVertexUpdates(propagation, address, procedure) {\n return this.#dispatchers.subscribe(propagation, address, procedure);\n }\n subscribeEndTransaction(observer) { this.#finalizeTransactionObservers.push(observer); }\n unstageBox(box) {\n this.#assertTransaction();\n const deleted = this.#boxes.removeByKey(box.address.uuid);\n assert(deleted === box, `${box} could not be found to unstage`);\n this.#edges.unwatchVerticesOf(box);\n const update = new DeleteUpdate(box.address.uuid, box.name, box.toArrayBuffer());\n this.#updateListeners.proxy.onUpdate(update);\n this.#immediateUpdateListeners.proxy.onUpdate(update);\n }\n findBox(uuid) {\n return this.#boxes.opt(uuid);\n }\n findVertex(address) {\n return this.#boxes.opt(address.uuid).flatMap(box => box.searchVertex(address.fieldKeys));\n }\n boxes() { return this.#boxes.values(); }\n edges() { return this.#edges; }\n checksum() {\n const checksum = new Checksum();\n this.boxes().forEach(box => box.write(checksum));\n return checksum.result();\n }\n onPrimitiveValueUpdate(field, oldValue, newValue) {\n this.#assertTransaction();\n if (field.isAttached() && !this.#constructingBox) {\n const update = new PrimitiveUpdate(field.address, field.serialization(), oldValue, newValue);\n this.#dispatchers.dispatch(update);\n this.#updateListeners.proxy.onUpdate(update);\n this.#immediateUpdateListeners.proxy.onUpdate(update);\n }\n }\n onPointerAddressUpdated(pointerField, oldValue, newValue) {\n this.#assertTransaction();\n const update = new PointerUpdate(pointerField.address, oldValue, newValue);\n if (this.#constructingBox) {\n this.#deferredPointerUpdates.push({ pointerField, update });\n }\n else {\n this.#processPointerValueUpdate(pointerField, update);\n this.#immediateUpdateListeners.proxy.onUpdate(update);\n }\n }\n #processPointerValueUpdate(pointerField, update) {\n const oldVertex = pointerField.targetVertex.unwrapOrNull();\n pointerField.resolve();\n const newVertex = pointerField.targetVertex.unwrapOrNull();\n if (oldVertex !== newVertex) {\n oldVertex?.pointerHub.onRemoved(pointerField);\n newVertex?.pointerHub.onAdded(pointerField);\n if (oldVertex !== null) {\n this.#edges.disconnect(pointerField);\n }\n if (newVertex !== null) {\n this.#edges.connect(pointerField, newVertex);\n }\n }\n this.#dispatchers.dispatch(update);\n this.#updateListeners.proxy.onUpdate(update);\n }\n dependenciesOf(box) {\n const boxes = new Set();\n const pointers = new Set();\n const trace = (box) => {\n if (boxes.has(box)) {\n return;\n }\n boxes.add(box);\n box.outgoingEdges()\n .filter(([pointer]) => !pointers.has(pointer))\n .forEach(([source, target]) => {\n pointers.add(source);\n if (target.pointerRules.mandatory &&\n target.pointerHub.incoming().every(pointer => pointers.has(pointer))) {\n return trace(target.box);\n }\n });\n box.incomingEdges()\n .forEach(pointer => {\n pointers.add(pointer);\n if (pointer.mandatory) {\n trace(pointer.box);\n }\n });\n };\n trace(box);\n boxes.delete(box);\n return { boxes: boxes, pointers: Array.from(pointers).reverse() };\n }\n verifyPointers() {\n console.debug(\"validate requirements\");\n this.#edges.validateRequirements();\n this.#edges.verifyPointers();\n console.debug(\"verify pointers\");\n let count = 0 | 0;\n const verify = (vertex) => {\n for (const field of vertex.fields()) {\n field.accept({\n visitPointerField: (pointer) => {\n if (pointer.targetAddress.nonEmpty()) {\n const isResolved = pointer.targetVertex.nonEmpty();\n const inGraph = this.findVertex(pointer.targetAddress.unwrap()).nonEmpty();\n assert(isResolved, `pointer ${pointer.address} is broken`);\n assert(inGraph, `Cannot find target for pointer ${pointer.address}`);\n count++;\n }\n },\n visitObjectField: (object) => verify(object)\n });\n }\n };\n this.#boxes.forEach((box) => verify(box));\n console.debug(\"verification complete.\");\n return { count };\n }\n debugBoxes() {\n console.table(this.#boxes.values().reduce((dict, box) => {\n dict[UUID.toString(box.address.uuid)] = {\n class: box.name,\n \"incoming links\": box.incomingEdges().length,\n \"outgoing links\": box.outgoingEdges().length,\n \"est. memory (bytes)\": box.estimateMemory()\n };\n return dict;\n }, {}));\n }\n debugDependencies() {\n console.debug(\"Dependencies:\");\n this.boxes().forEach(box => {\n console.debug(`\\t${box}`);\n for (const dependency of this.dependenciesOf(box).boxes) {\n console.debug(`\\t\\t${dependency}`);\n }\n });\n }\n addressToDebugPath(address) {\n return address.flatMap(address => address.isBox()\n ? this.findBox(address.uuid).map(box => box.name)\n : this.findBox(address.uuid)\n .flatMap(box => box.searchVertex(address.fieldKeys)\n .map(vertex => vertex.isField() ? vertex.debugPath : panic(\"Unknown address\"))));\n }\n toArrayBuffer() {\n const output = ByteArrayOutput.create();\n const boxes = this.#boxes.values();\n output.writeInt(boxes.length);\n boxes.forEach(box => {\n const buffer = box.serialize();\n output.writeInt(buffer.byteLength);\n output.writeBytes(new Int8Array(buffer));\n });\n return output.toArrayBuffer();\n }\n fromArrayBuffer(arrayBuffer) {\n assert(this.#boxes.isEmpty(), \"Cannot call fromArrayBuffer if boxes is not empty\");\n const input = new ByteArrayInput(arrayBuffer);\n const numBoxes = input.readInt();\n this.beginTransaction();\n const boxes = [];\n for (let i = 0; i < numBoxes; i++) {\n const length = input.readInt();\n const int8Array = new Int8Array(length);\n input.readBytes(int8Array);\n const boxStream = new ByteArrayInput(int8Array.buffer);\n const creationIndex = boxStream.readInt();\n const name = boxStream.readString();\n const uuid = UUID.fromDataInput(boxStream);\n boxes.push({ creationIndex, name, uuid, boxStream });\n }\n boxes\n .sort((a, b) => a.creationIndex - b.creationIndex)\n .forEach(({ name, uuid, boxStream }) => this.createBox(name, uuid, box => box.read(boxStream)));\n this.endTransaction();\n }\n #assertTransaction() {\n assert(this.#inTransaction, () => \"Modification only prohibited in transaction mode.\");\n }\n}\n", "import { Field } from \"./field\";\nimport { asDefined, Option, safeExecute } from \"@opendaw/lib-std\";\nimport { Serializer } from \"./serializer\";\nexport class ObjectField extends Field {\n #fields;\n constructor(construct) {\n super(construct);\n this.#fields = this.initializeFields();\n }\n accept(visitor) {\n return safeExecute(visitor.visitObjectField, this);\n }\n fields() { return Object.values(this.#fields); }\n getField(key) { return asDefined(this.#fields[key]); }\n optField(key) { return Option.wrap(this.#fields[key]); }\n read(input) { Serializer.readFields(input, this.#fields); }\n write(output) { Serializer.writeFields(output, this.#fields); }\n toJSON() { return this.#fields; }\n}\n", "import { asDefined, assert, isDefined, Iterables, panic } from \"@opendaw/lib-std\";\n/**\n * Communicator provides type-safe communication between Window, Worker, MessagePort, BroadcastChannel.\n * Passed objects are structured cloned: https://developer.mozilla.org/en-US/docs/Web/API/structuredClone\n * It is highly advised not to pass classes with methods and or real private properties (starting with #).\n * They will lose their prototype and private property inheritance, and it is cumbersome to patch that up later.\n * Also read: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain\n */\nexport var Communicator;\n(function (Communicator) {\n Communicator.sender = (messenger, bind) => bind(new Sender(messenger));\n Communicator.executor = (messenger, protocol) => new Executor(messenger, protocol);\n class Sender {\n #messenger;\n #expected = new Map();\n #subscription;\n #returnId = 0;\n constructor(messenger) {\n this.#messenger = messenger;\n this.#subscription = messenger.subscribe(this.#messageHandler);\n }\n terminate() { this.#subscription.terminate(); }\n dispatchAndForget = (func, ...args) => this.#messenger.send({\n type: \"send\",\n returnId: false,\n func: func.name,\n args: Array.from(Iterables.map(args, arg => ({ value: arg })))\n });\n dispatchAndReturn = (func, ...args) => new Promise((resolve, reject) => {\n const entries = Iterables.reduce(args, (callbacks, arg, index) => {\n if (typeof arg === \"function\") {\n callbacks.push([index, arg]);\n }\n return callbacks;\n }, []);\n this.#expected.set(this.#returnId, {\n executorTuple: { resolve, reject },\n callbacks: new Map(entries)\n });\n this.#messenger.send({\n type: \"send\",\n returnId: this.#returnId,\n func: func.name,\n args: Array.from(Iterables.map(args, (arg, index) => typeof arg === \"function\" ? ({ callback: index }) : ({ value: arg })))\n });\n this.#returnId++;\n });\n #messageHandler = (message) => {\n const returns = this.#expected.get(message.returnId);\n if (isDefined(returns)) {\n if (message.type === \"resolve\") {\n returns.executorTuple.resolve(message.resolve);\n this.#expected.delete(message.returnId);\n }\n else if (message.type === \"reject\") {\n returns.executorTuple.reject(message.reject);\n this.#expected.delete(message.returnId);\n }\n else if (message.type === \"callback\") {\n returns.callbacks?.get(message.funcAt).apply(this, message.args);\n }\n }\n else {\n panic(`Promise has already been resolved. ${JSON.stringify(message)}`);\n }\n };\n }\n class Executor {\n #messenger;\n #protocol;\n #subscription;\n constructor(messenger, protocol) {\n this.#messenger = messenger;\n this.#protocol = protocol;\n this.#subscription = messenger.subscribe(this.#messageHandler);\n }\n terminate() { this.#subscription.terminate(); }\n #messageHandler = (message) => {\n assert(message.type === \"send\", () => \"Message type must be 'send'\");\n const object = Object.getPrototypeOf(this.#protocol) === Object.getPrototypeOf({})\n ? this.#protocol\n : Object.getPrototypeOf(this.#protocol);\n const func = asDefined(object[message.func], `${message.func.toString()} does not exists on ${this.#protocol}`);\n const returnId = message.returnId;\n if (returnId === false) {\n func.apply(this.#protocol, message.args.map((arg) => {\n return \"value\" in arg\n ? arg.value\n : panic(`${message.func.toString()} has no promise.`);\n }));\n }\n else {\n try {\n const promise = func.apply(this.#protocol, message.args\n .map(arg => \"callback\" in arg\n ? (...args) => this.#sendCallback(returnId, arg.callback, args)\n : arg.value));\n promise.then(value => this.#sendResolve(returnId, value), reason => this.#sendReject(returnId, reason));\n }\n catch (reason) {\n this.#sendReject(returnId, reason);\n }\n }\n };\n #sendResolve = (returnId, value) => this.#messenger.send({ type: \"resolve\", returnId, resolve: value });\n #sendReject = (returnId, reason) => this.#messenger.send({ type: \"reject\", returnId, reject: reason });\n #sendCallback = (returnId, func, args) => this.#messenger.send({ type: \"callback\", returnId, funcAt: func, args });\n }\n Communicator.Executor = Executor;\n})(Communicator || (Communicator = {}));\n", "import { asDefined, ByteArrayOutput } from \"@opendaw/lib-std\";\nexport var Fetch;\n(function (Fetch) {\n Fetch.ProgressArrayBuffer = (progress) => async (response) => {\n if (!response.headers.has(\"Content-Length\")) {\n console.debug(\"No Content-Length\");\n return response.arrayBuffer();\n }\n const length = parseInt(response.headers.get(\"Content-Length\"));\n console.debug(`Content-Length: ${length}b`);\n if (isNaN(length) || length < 4096) {\n return response.arrayBuffer();\n } // smaller sizes do not need progress\n progress(0.0);\n const output = ByteArrayOutput.create(length);\n const reader = asDefined(response.body, \"response.body is empty\").getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n value.forEach((value) => output.writeByte(value));\n progress(output.position / length);\n }\n progress(1.0);\n return output.toArrayBuffer();\n };\n})(Fetch || (Fetch = {}));\n", "export var Runtime;\n(function (Runtime) {\n // Debounces execution by delaying the call until after the timeout has passed without new invocations.\n Runtime.debounce = (() => {\n let id = undefined;\n return (exec, timeout = 1000) => {\n clearTimeout(id);\n id = setTimeout(exec, timeout);\n };\n })();\n Runtime.scheduleInterval = (exec, time, ...args) => {\n const id = setInterval(exec, time, ...args);\n return { terminate: () => clearInterval(id) };\n };\n Runtime.scheduleTimeout = (exec, time, ...args) => {\n const id = setTimeout(exec, time, ...args);\n return { terminate: () => clearTimeout(id) };\n };\n})(Runtime || (Runtime = {}));\n", "import { isDefined, Notifier } from \"@opendaw/lib-std\";\nexport const Messenger = { for: (port) => new NativeMessenger(port) };\nclass NativeMessenger {\n #port;\n #notifier = new Notifier();\n constructor(port) {\n this.#port = port;\n if (isDefined(port.onmessage) || isDefined(port.onmessageerror)) {\n console.error(port);\n throw new Error(`${port} is already wrapped.`);\n }\n port.onmessage = (event) => this.#notifier.notify(event.data);\n port.onmessageerror = (event) => { throw new Error(event.type); };\n }\n send(message) { this.#port.postMessage(message); }\n channel(name) { return new Channel(this, name); }\n subscribe(observer) { return this.#notifier.subscribe(observer); }\n terminate() {\n this.#notifier.terminate();\n this.#port.onmessage = null;\n this.#port.onmessageerror = null;\n }\n}\nclass Channel {\n #messages;\n #name;\n #notifier = new Notifier();\n #subscription;\n constructor(messages, name) {\n this.#messages = messages;\n this.#name = name;\n this.#subscription = messages.subscribe(data => {\n if (\"message\" in data && \"channel\" in data && data.channel === name) {\n this.#notifier.notify(data.message);\n }\n });\n }\n send(message) { this.#messages.send({ channel: this.#name, message }); }\n channel(name) { return new Channel(this, name); }\n subscribe(observer) { return this.#notifier.subscribe(observer); }\n terminate() {\n this.#subscription.terminate();\n this.#notifier.terminate();\n }\n}\n", "import { assert, InaccessibleProperty, Option, safeExecute, Terminable, TimeSpan } from \"@opendaw/lib-std\";\nexport class IntervalRetryOption {\n maxRetry;\n timeSpan;\n #count = 0 | 0;\n constructor(maxRetry, timeSpan) {\n this.maxRetry = maxRetry;\n this.timeSpan = timeSpan;\n }\n retry(reason, exec) {\n if (++this.#count === this.maxRetry) {\n return false;\n }\n console.debug(`${reason} > will retry in ${this.timeSpan.toString()}`);\n setTimeout(exec, this.timeSpan.millis());\n return true;\n }\n}\nexport var Promises;\n(function (Promises) {\n class ResolveResult {\n value;\n status = \"resolved\";\n constructor(value) {\n this.value = value;\n }\n error = InaccessibleProperty(\"Cannot access error when promise is resolved\");\n }\n class RejectedResult {\n error;\n status = \"rejected\";\n constructor(error) {\n this.error = error;\n }\n value = InaccessibleProperty(\"Cannot access value when promise is rejected\");\n }\n Promises.makeAbortable = async (owner, promise) => {\n let running = true;\n owner.own(Terminable.create(() => running = false));\n return new Promise((resolve, reject) => promise.then(value => { if (running) {\n resolve(value);\n } }, reason => { if (running) {\n reject(reason);\n } }));\n };\n Promises.tryCatch = (promise) => promise.then(value => new ResolveResult(value), error => new RejectedResult(error));\n Promises.retry = (call, retryOption = new IntervalRetryOption(3, TimeSpan.seconds(3))) => call().catch(reason => new Promise((resolve, reject) => {\n const onFailure = (reason) => {\n if (!retryOption.retry(reason, () => call().then((value) => resolve(value), onFailure))) {\n reject(reason);\n }\n };\n onFailure(reason);\n }));\n // this is for testing the catch branch\n Promises.fail = (after, thenUse) => {\n let use = () => new Promise((_, reject) => setTimeout(() => reject(\"fails first\"), after.millis()));\n return () => {\n const promise = use();\n use = thenUse;\n return promise;\n };\n };\n Promises.timeout = (promise, timeSpan, fail) => {\n return new Promise((resolve, reject) => {\n let running = true;\n const timeout = setTimeout(() => {\n running = false;\n reject(new Error(fail ?? \"timeout\"));\n }, timeSpan.millis());\n promise\n .then((value) => { if (running) {\n resolve(value);\n } }, reason => { if (running) {\n reject(reason);\n } })\n .finally(() => clearTimeout(timeout));\n });\n };\n Promises.sequential = (fn) => {\n let lastPromise = Promise.resolve(null);\n return (arg) => lastPromise = lastPromise.then(() => fn(arg));\n };\n class Limit {\n max;\n #waiting;\n #running = 0 | 0;\n constructor(max = 1) {\n this.max = max;\n this.#waiting = [];\n }\n async add(provider) {\n if (this.#running < this.max) {\n this.#running++;\n return provider().finally(() => this.#continue());\n }\n else {\n const resolvers = Promise.withResolvers();\n this.#waiting.push([provider, resolvers]);\n return resolvers.promise.finally(() => this.#continue());\n }\n }\n #continue() {\n assert(this.#running > 0, \"Internal Error in Promises.Limit\");\n if (--this.#running < this.max) {\n if (this.#waiting.length > 0) {\n const [provider, { resolve, reject }] = this.#waiting.shift();\n this.#running++;\n provider().then(resolve, reject);\n }\n }\n }\n }\n Promises.Limit = Limit;\n class Latest {\n #onResolve;\n #onReject;\n #onFinally;\n #latest = Option.None;\n constructor(onResolve, onReject, onFinally) {\n this.#onResolve = onResolve;\n this.#onReject = onReject;\n this.#onFinally = onFinally;\n }\n update(promise) {\n this.#latest = Option.wrap(promise);\n promise\n .then(value => { if (this.#latest.contains(promise)) {\n this.#onResolve(value);\n } })\n .catch(reason => { if (this.#latest.contains(promise)) {\n this.#onReject(reason);\n } })\n .finally(() => {\n if (this.#latest.contains(promise)) {\n this.terminate();\n safeExecute(this.#onFinally);\n }\n });\n }\n terminate() { this.#latest = Option.None; }\n }\n Promises.Latest = Latest;\n})(Promises || (Promises = {}));\n", "import { Promises } from \"./promises\";\nexport var network;\n(function (network) {\n const limit = new Promises.Limit(4);\n network.limitFetch = (input, init) => limit.add(() => fetch(input, init));\n})(network || (network = {}));\n", "export const stopwatch = (level = \"debug\") => {\n const startTime = performance.now();\n return {\n lab: (label) => console[level].call(console, `${label} in ${(performance.now() - startTime).toFixed(1)}ms`)\n };\n};\n", "import { TimeSpan } from \"@opendaw/lib-std\";\nexport var TimeSpanUtils;\n(function (TimeSpanUtils) {\n TimeSpanUtils.startEstimator = () => {\n const startTime = performance.now();\n return (progress) => {\n if (progress === 0.0) {\n return TimeSpan.POSITIVE_INFINITY;\n }\n const runtime = (performance.now() - startTime);\n return TimeSpan.millis(runtime / progress - runtime);\n };\n };\n})(TimeSpanUtils || (TimeSpanUtils = {}));\n", "import { tryCatch } from \"@opendaw/lib-std\";\nexport var Wait;\n(function (Wait) {\n Wait.frame = () => new Promise(resolve => requestAnimationFrame(() => resolve()));\n Wait.frames = (numFrames) => new Promise(resolve => {\n let count = numFrames;\n const callback = () => { if (--count <= 0) {\n resolve();\n }\n else {\n requestAnimationFrame(callback);\n } };\n requestAnimationFrame(callback);\n });\n Wait.timeSpan = (time, ...args) => new Promise(resolve => setTimeout(resolve, time.millis(), ...args));\n Wait.event = (target, type) => new Promise(resolve => target.addEventListener(type, resolve, { once: true }));\n Wait.observable = (observable) => new Promise(resolve => {\n const terminable = observable.subscribe(() => {\n terminable.terminate();\n resolve();\n });\n });\n Wait.complete = (generator) => new Promise((resolve, reject) => {\n const interval = setInterval(() => {\n const { status, value: next, error } = tryCatch(() => generator.next());\n if (status === \"success\") {\n const { done, value } = next;\n if (done) {\n clearInterval(interval);\n resolve(value);\n }\n }\n else {\n clearInterval(interval);\n reject(error);\n }\n }, 0);\n });\n})(Wait || (Wait = {}));\n", "const key = Symbol.for(\"@openDAW/lib-runtime\");\nif (globalThis[key]) {\n console.debug(`%c${key.description}%c is already available in ${globalThis.constructor.name}.`, \"color: hsl(10, 83%, 60%)\", \"color: inherit\");\n}\nelse {\n globalThis[key] = true;\n console.debug(`%c${key.description}%c is now available in ${globalThis.constructor.name}.`, \"color: hsl(200, 83%, 60%)\", \"color: inherit\");\n}\nexport * from \"./communicator\";\nexport * from \"./fetch\";\nexport * from \"./runtime\";\nexport * from \"./messenger\";\nexport * from \"./network\";\nexport * from \"./promises\";\nexport * from \"./stopwatch\";\nexport * from \"./timespan\";\nexport * from \"./wait\";\n", "import { Arrays, ByteArrayInput, isDefined, Option, UUID } from \"@opendaw/lib-std\";\nimport { Communicator } from \"@opendaw/lib-runtime\";\nimport { Address } from \"./address\";\nexport const createSyncTarget = (graph, messenger) => {\n return Communicator.executor(messenger, new class {\n sendUpdates(updates) {\n graph.beginTransaction();\n updates.forEach(update => {\n const type = update.type;\n if (type === \"new\") {\n graph.createBox(update.name, update.uuid, box => box.read(new ByteArrayInput(update.buffer)));\n }\n else if (type === \"update-primitive\") {\n graph.findVertex(Address.reconstruct(update.address))\n .unwrap(() => `Could not find primitive field ${update.address}`)\n .setValue(update.value);\n }\n else if (type === \"update-pointer\") {\n graph.findVertex(Address.reconstruct(update.address))\n .unwrap(() => `Could not find pointer field ${update.address}`)\n .targetAddress = isDefined(update.target)\n ? Option.wrap(Address.reconstruct(update.target))\n : Option.None;\n }\n else if (update.type === \"delete\") {\n graph.unstageBox(graph.findBox(update.uuid).unwrap(() => `Could not find box ${UUID.toString(update.uuid)}`));\n }\n });\n graph.endTransaction();\n }\n checksum(value) {\n if (Arrays.equals(graph.checksum(), value)) {\n return Promise.resolve();\n }\n else {\n return Promise.reject(\"Checksum mismatch\");\n }\n }\n });\n};\n", "const key = Symbol.for(\"@openDAW/lib-box\");\nif (globalThis[key]) {\n console.debug(`%c${key.description}%c is already available in ${globalThis.constructor.name}.`, \"color: hsl(10, 83%, 60%)\", \"color: inherit\");\n}\nelse {\n globalThis[key] = true;\n console.debug(`%c${key.description}%c is now available in ${globalThis.constructor.name}.`, \"color: hsl(200, 83%, 60%)\", \"color: inherit\");\n}\nexport * from \"./address\";\nexport * from \"./array\";\nexport * from \"./box\";\nexport * from \"./dispatchers\";\nexport * from \"./editing\";\nexport * from \"./field\";\nexport * from \"./graph\";\nexport * from \"./graph-edges\";\nexport * from \"./object\";\nexport * from \"./pointer\";\nexport * from \"./pointer-hub\";\nexport * from \"./primitive\";\nexport * from \"./sync\";\nexport * from \"./sync-source\";\nexport * from \"./sync-target\";\nexport * from \"./updates\";\nexport * from \"./vertex\";\n", "import {ppqn} from \"@opendaw/lib-dsp\"\n\nexport class TimeInfo {\n #position: number = 0.0\n\n #transporting: boolean = false\n #leap: boolean = false\n metronomeEnabled: boolean = false\n\n getLeapStateAndReset(): boolean {\n const leap = this.#leap\n this.#leap = false\n return leap\n }\n\n get position(): number {return this.#position}\n set position(value: ppqn) {\n this.#position = value\n this.#leap = true\n }\n\n get transporting(): boolean {return this.#transporting}\n set transporting(value: boolean) {\n if (this.#transporting === value) {return}\n this.#transporting = value\n }\n\n advanceTo(position: ppqn): void {this.#position = position}\n}", "export var Pointers;\n(function (Pointers) {\n Pointers[Pointers[\"Timeline\"] = 0] = \"Timeline\";\n Pointers[Pointers[\"Selection\"] = 1] = \"Selection\";\n Pointers[Pointers[\"PianoMode\"] = 2] = \"PianoMode\";\n Pointers[Pointers[\"User\"] = 3] = \"User\";\n Pointers[Pointers[\"AudioConnection\"] = 4] = \"AudioConnection\";\n Pointers[Pointers[\"InstrumentHost\"] = 5] = \"InstrumentHost\";\n Pointers[Pointers[\"AudioOutput\"] = 6] = \"AudioOutput\";\n Pointers[Pointers[\"NotesConnection\"] = 7] = \"NotesConnection\";\n Pointers[Pointers[\"VoltageConnection\"] = 8] = \"VoltageConnection\";\n Pointers[Pointers[\"AudioUnits\"] = 9] = \"AudioUnits\";\n Pointers[Pointers[\"MidiEffectHost\"] = 10] = \"MidiEffectHost\";\n Pointers[Pointers[\"AudioEffectHost\"] = 11] = \"AudioEffectHost\";\n Pointers[Pointers[\"AudioBusses\"] = 12] = \"AudioBusses\";\n Pointers[Pointers[\"AuxSend\"] = 13] = \"AuxSend\";\n Pointers[Pointers[\"Modulation\"] = 14] = \"Modulation\";\n Pointers[Pointers[\"Automation\"] = 15] = \"Automation\";\n Pointers[Pointers[\"ParameterController\"] = 16] = \"ParameterController\";\n Pointers[Pointers[\"MidiControl\"] = 17] = \"MidiControl\";\n Pointers[Pointers[\"StepAutomation\"] = 18] = \"StepAutomation\";\n Pointers[Pointers[\"Editing\"] = 19] = \"Editing\";\n Pointers[Pointers[\"AudioFile\"] = 20] = \"AudioFile\";\n Pointers[Pointers[\"AudioUnit\"] = 21] = \"AudioUnit\";\n Pointers[Pointers[\"MarkerTrack\"] = 22] = \"MarkerTrack\";\n Pointers[Pointers[\"MarkerEvents\"] = 23] = \"MarkerEvents\";\n Pointers[Pointers[\"ClipCollection\"] = 24] = \"ClipCollection\";\n Pointers[Pointers[\"RegionCollection\"] = 25] = \"RegionCollection\";\n Pointers[Pointers[\"TrackCollection\"] = 26] = \"TrackCollection\";\n Pointers[Pointers[\"Device\"] = 27] = \"Device\";\n Pointers[Pointers[\"Groove\"] = 28] = \"Groove\";\n Pointers[Pointers[\"ModularSetup\"] = 29] = \"ModularSetup\";\n Pointers[Pointers[\"ModuleCollection\"] = 30] = \"ModuleCollection\";\n Pointers[Pointers[\"ConnectionCollection\"] = 31] = \"ConnectionCollection\";\n Pointers[Pointers[\"DeviceUserInterface\"] = 32] = \"DeviceUserInterface\";\n Pointers[Pointers[\"NoteEvents\"] = 33] = \"NoteEvents\";\n Pointers[Pointers[\"NoteEventFeature\"] = 34] = \"NoteEventFeature\";\n Pointers[Pointers[\"NoteEventCollection\"] = 35] = \"NoteEventCollection\";\n Pointers[Pointers[\"ValueEvents\"] = 36] = \"ValueEvents\";\n Pointers[Pointers[\"ValueEventCollection\"] = 37] = \"ValueEventCollection\";\n Pointers[Pointers[\"ValueInterpolation\"] = 38] = \"ValueInterpolation\";\n Pointers[Pointers[\"Sample\"] = 39] = \"Sample\";\n})(Pointers || (Pointers = {}));\n", "export var AudioUnitType;\n(function (AudioUnitType) {\n AudioUnitType[\"Instrument\"] = \"instrument\";\n AudioUnitType[\"Bus\"] = \"bus\";\n AudioUnitType[\"Aux\"] = \"aux\";\n AudioUnitType[\"Output\"] = \"output\";\n})(AudioUnitType || (AudioUnitType = {}));\n", "import { panic } from \"@opendaw/lib-std\";\nexport const IndexComparator = (a, b) => {\n if (a === b) {\n return 0;\n }\n const difference = a - b;\n if (difference === 0) {\n return panic(`Indices cannot be equal (${a}, ${b})`);\n }\n return difference;\n};\n", "import { assert, BinarySearch, clamp, Listeners, Option, UUID } from \"@opendaw/lib-std\";\nimport { IndexComparator } from \"./IndexComparator\";\nexport class SortedBoxAdapterCollection {\n static create(field, provider, pointers) {\n return new SortedBoxAdapterCollection(field, provider, pointers);\n }\n #field;\n #entries;\n #listeners;\n #subscription;\n #sorted = null;\n constructor(field, provider, pointers) {\n this.#field = field;\n this.#entries = UUID.newSet(entry => entry.adapter.uuid);\n this.#listeners = new Listeners();\n this.#subscription = field.pointerHub.catchupAndSubscribeTransactual({\n onAdd: (pointer) => {\n this.#sorted = null;\n const adapter = provider(pointer.box);\n const subscription = adapter.indexField.subscribe(() => {\n this.#sorted = null;\n this.#listeners.proxy.onReorder(adapter);\n });\n const added = this.#entries.add({ adapter, subscription });\n assert(added, `Could not add ${adapter}`);\n this.#listeners.proxy.onAdd(adapter);\n },\n onRemove: (pointer) => {\n this.#sorted = null;\n const uuid = pointer.box.address.uuid;\n const { adapter, subscription } = this.#entries.removeByKey(uuid);\n subscription.terminate();\n this.#listeners.proxy.onRemove(adapter);\n }\n }, pointers);\n }\n field() { return this.#field; }\n subscribe(listener) {\n return this.#listeners.subscribe(listener);\n }\n catchupAndSubscribe(listener) {\n this.#entries.forEach(({ adapter }) => listener.onAdd(adapter));\n return this.subscribe(listener);\n }\n getAdapterByIndex(index) {\n const idx = BinarySearch.exactMapped(this.adapters(), index, IndexComparator, adapter => adapter.indexField.getValue());\n return idx === -1 ? Option.None : Option.wrap(this.adapters()[idx]);\n }\n getAdapterById(uuid) { return this.#entries.opt(uuid).map(({ adapter }) => adapter); }\n getMinFreeIndex() {\n const adapters = this.adapters();\n for (let index = 0; index < adapters.length; index++) {\n if (adapters[index].indexField.getValue() > index) {\n return index;\n }\n }\n return adapters.length;\n }\n adapters() {\n if (this.#sorted === null) {\n this.#sorted = this.#entries.values()\n .map(({ adapter }) => adapter)\n .sort((a, b) => a.indexField.getValue() - b.indexField.getValue());\n }\n return this.#sorted;\n }\n move(adapter, delta) {\n this.moveIndex(adapter.indexField.getValue(), delta);\n }\n moveIndex(startIndex, delta) {\n const adapters = this.adapters();\n const adapter = adapters[startIndex];\n if (delta < 0) {\n const newIndex = clamp(startIndex + delta, 0, adapters.length - 1);\n for (let index = newIndex; index < startIndex; index++) {\n adapters[index].indexField.setValue(index + 1);\n }\n adapter.indexField.setValue(newIndex);\n }\n else if (delta > 1) {\n const newIndex = clamp(startIndex + (delta - 1), 0, adapters.length - 1);\n for (let index = startIndex; index < newIndex; index++) {\n adapters[index + 1].indexField.setValue(index);\n }\n adapter.indexField.setValue(newIndex);\n }\n else {\n console.warn(`moveIndex had no effect: startIndex: ${startIndex}, delta: ${delta}`);\n }\n }\n size() { return this.#entries.size(); }\n isEmpty() { return this.size() === 0; }\n terminate() {\n this.#sorted = null;\n this.#entries.forEach(({ subscription }) => subscription.terminate());\n this.#entries.clear();\n this.#listeners.terminate();\n this.#subscription.terminate();\n }\n}\n", "import { assert, clamp, TAU } from \"@opendaw/lib-std\";\n// turns out the following code is producing similar but different frequency responses\n// https://chromium.googlesource.com/chromium/blink/+/refs/heads/main/Source/platform/audio/Biquad.cpp\n// while this one produces the correct results\n// https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/audio/biquad.cc\n// quickly tested all biquad modes\nexport class BiquadCoeff {\n a1 = 0.0;\n a2 = 0.0;\n b0 = 0.0;\n b1 = 0.0;\n b2 = 0.0;\n constructor() { this.identity(); }\n identity() { this.setNormalizedCoefficients(1, 0, 0, 1, 0, 0); }\n setLowpassParams(cutoff, resonance) {\n cutoff = clamp(cutoff, 0.0, 1.0);\n if (cutoff === 1) {\n this.setNormalizedCoefficients(1, 0, 0, 1, 0, 0);\n }\n else if (cutoff > 0) {\n resonance = Math.pow(10.0, resonance / 20);\n const theta = TAU * cutoff;\n const alpha = Math.sin(theta) / (2 * resonance);\n const cosw = Math.cos(theta);\n const beta = (1 - cosw) / 2;\n const b0 = beta;\n const b1 = 2 * beta;\n const b2 = beta;\n const a0 = 1 + alpha;\n const a1 = -2 * cosw;\n const a2 = 1 - alpha;\n this.setNormalizedCoefficients(b0, b1, b2, a0, a1, a2);\n }\n else {\n this.setNormalizedCoefficients(0, 0, 0, 1, 0, 0);\n }\n return this;\n }\n setHighpassParams(cutoff, resonance) {\n cutoff = clamp(cutoff, 0.0, 1.0);\n if (cutoff === 1) {\n this.setNormalizedCoefficients(0, 0, 0, 1, 0, 0);\n }\n else if (cutoff > 0) {\n resonance = Math.pow(10.0, resonance / 20);\n const theta = TAU * cutoff;\n const alpha = Math.sin(theta) / (2 * resonance);\n const cosw = Math.cos(theta);\n const beta = (1 + cosw) / 2;\n const b0 = beta;\n const b1 = -2 * beta;\n const b2 = beta;\n const a0 = 1 + alpha;\n const a1 = -2 * cosw;\n const a2 = 1 - alpha;\n this.setNormalizedCoefficients(b0, b1, b2, a0, a1, a2);\n }\n else {\n this.setNormalizedCoefficients(1, 0, 0, 1, 0, 0);\n }\n return this;\n }\n setNormalizedCoefficients(b0, b1, b2, a0, a1, a2) {\n const a0_inverse = 1.0 / a0;\n this.b0 = b0 * a0_inverse;\n this.b1 = b1 * a0_inverse;\n this.b2 = b2 * a0_inverse;\n this.a1 = a1 * a0_inverse;\n this.a2 = a2 * a0_inverse;\n return this;\n }\n setLowShelfParams(frequency, db_gain) {\n frequency = clamp(frequency, 0.0, 1.0);\n const a = Math.pow(10.0, db_gain / 40);\n if (frequency === 1) {\n this.setNormalizedCoefficients(a * a, 0, 0, 1, 0, 0);\n }\n else if (frequency > 0) {\n const w0 = TAU * frequency;\n const s = 1;\n const alpha = 0.5 * Math.sin(w0) * Math.sqrt((a + 1 / a) * (1 / s - 1) + 2);\n const k = Math.cos(w0);\n const k2 = 2 * Math.sqrt(a) * alpha;\n const a_plus_one = a + 1;\n const a_minus_one = a - 1;\n const b0 = a * (a_plus_one - a_minus_one * k + k2);\n const b1 = 2 * a * (a_minus_one - a_plus_one * k);\n const b2 = a * (a_plus_one - a_minus_one * k - k2);\n const a0 = a_plus_one + a_minus_one * k + k2;\n const a1 = -2 * (a_minus_one + a_plus_one * k);\n const a2 = a_plus_one + a_minus_one * k - k2;\n this.setNormalizedCoefficients(b0, b1, b2, a0, a1, a2);\n }\n else {\n this.setNormalizedCoefficients(1, 0, 0, 1, 0, 0);\n }\n return this;\n }\n setHighShelfParams(frequency, db_gain) {\n frequency = clamp(frequency, 0.0, 1.0);\n const a = Math.pow(10.0, db_gain / 40);\n if (frequency === 1) {\n this.setNormalizedCoefficients(1, 0, 0, 1, 0, 0);\n }\n else if (frequency > 0) {\n const w0 = TAU * frequency;\n const s = 1;\n const alpha = 0.5 * Math.sin(w0) * Math.sqrt((a + 1 / a) * (1 / s - 1) + 2);\n const k = Math.cos(w0);\n const k2 = 2 * Math.sqrt(a) * alpha;\n const a_plus_one = a + 1;\n const a_minus_one = a - 1;\n const b0 = a * (a_plus_one + a_minus_one * k + k2);\n const b1 = -2 * a * (a_minus_one + a_plus_one * k);\n const b2 = a * (a_plus_one + a_minus_one * k - k2);\n const a0 = a_plus_one - a_minus_one * k + k2;\n const a1 = 2 * (a_minus_one - a_plus_one * k);\n const a2 = a_plus_one - a_minus_one * k - k2;\n this.setNormalizedCoefficients(b0, b1, b2, a0, a1, a2);\n }\n else {\n this.setNormalizedCoefficients(a * a, 0, 0, 1, 0, 0);\n }\n return this;\n }\n setPeakingParams(frequency, q, db_gain) {\n frequency = clamp(frequency, 0.0, 1.0);\n q = Math.max(0.0, q);\n const a = Math.pow(10.0, db_gain / 40);\n if (frequency > 0 && frequency < 1) {\n if (q > 0) {\n const w0 = TAU * frequency;\n const alpha = Math.sin(w0) / (2 * q);\n const k = Math.cos(w0);\n const b0 = 1 + alpha * a;\n const b1 = -2 * k;\n const b2 = 1 - alpha * a;\n const a0 = 1 + alpha / a;\n const a1 = -2 * k;\n const a2 = 1 - alpha / a;\n this.setNormalizedCoefficients(b0, b1, b2, a0, a1, a2);\n }\n else {\n this.setNormalizedCoefficients(a * a, 0, 0, 1, 0, 0);\n }\n }\n else {\n this.setNormalizedCoefficients(1, 0, 0, 1, 0, 0);\n }\n return this;\n }\n setAllpassParams(frequency, q) {\n frequency = clamp(frequency, 0.0, 1.0);\n q = Math.max(0.0, q);\n if (frequency > 0 && frequency < 1) {\n if (q > 0) {\n const w0 = TAU * frequency;\n const alpha = Math.sin(w0) / (2 * q);\n const k = Math.cos(w0);\n const b0 = 1 - alpha;\n const b1 = -2 * k;\n const b2 = 1 + alpha;\n const a0 = 1 + alpha;\n const a1 = -2 * k;\n const a2 = 1 - alpha;\n this.setNormalizedCoefficients(b0, b1, b2, a0, a1, a2);\n }\n else {\n this.setNormalizedCoefficients(-1, 0, 0, 1, 0, 0);\n }\n }\n else {\n this.setNormalizedCoefficients(1, 0, 0, 1, 0, 0);\n }\n return this;\n }\n setNotchParams(frequency, q) {\n frequency = clamp(frequency, 0.0, 1.0);\n q = Math.max(0.0, q);\n if (frequency > 0 && frequency < 1) {\n if (q > 0) {\n const w0 = TAU * frequency;\n const alpha = Math.sin(w0) / (2 * q);\n const k = Math.cos(w0);\n const b0 = 1;\n const b1 = -2 * k;\n const b2 = 1;\n const a0 = 1 + alpha;\n const a1 = -2 * k;\n const a2 = 1 - alpha;\n this.setNormalizedCoefficients(b0, b1, b2, a0, a1, a2);\n }\n else {\n this.setNormalizedCoefficients(0, 0, 0, 1, 0, 0);\n }\n }\n else {\n this.setNormalizedCoefficients(1, 0, 0, 1, 0, 0);\n }\n return this;\n }\n setBandpassParams(frequency, q) {\n frequency = Math.max(0.0, frequency);\n q = Math.max(0.0, q);\n if (frequency > 0 && frequency < 1) {\n const w0 = TAU * frequency;\n if (q > 0) {\n const alpha = Math.sin(w0) / (2 * q);\n const k = Math.cos(w0);\n const b0 = alpha;\n const b1 = 0;\n const b2 = -alpha;\n const a0 = 1 + alpha;\n const a1 = -2 * k;\n const a2 = 1 - alpha;\n this.setNormalizedCoefficients(b0, b1, b2, a0, a1, a2);\n }\n else {\n this.setNormalizedCoefficients(1, 0, 0, 1, 0, 0);\n }\n }\n else {\n this.setNormalizedCoefficients(0, 0, 0, 1, 0, 0);\n }\n return this;\n }\n getFrequencyResponse(frequency, magResponse, phaseResponse) {\n assert(frequency.length === magResponse.length && frequency.length === phaseResponse.length, \"Array lengths do not match\");\n const b0 = this.b0;\n const b1 = this.b1;\n const b2 = this.b2;\n const a1 = this.a1;\n const a2 = this.a2;\n for (let k = 0; k < frequency.length; ++k) {\n const omega = -Math.PI * 2 * frequency[k];\n const zReal = Math.cos(omega);\n const zImag = Math.sin(omega);\n const numeratorReal = b0 + ((b1 + b2 * zReal) * zReal - b2 * zImag * zImag);\n const numeratorImag = ((b1 + b2 * zReal) * zImag + b2 * zImag * zReal);\n const denominatorReal = 1 + ((a1 + a2 * zReal) * zReal - a2 * zImag * zImag);\n const denominatorImag = ((a1 + a2 * zReal) * zImag + a2 * zImag * zReal);\n const denom = denominatorReal * denominatorReal + denominatorImag * denominatorImag;\n const responseReal = (numeratorReal * denominatorReal + numeratorImag * denominatorImag) / denom;\n const responseImag = (numeratorImag * denominatorReal - numeratorReal * denominatorImag) / denom;\n magResponse[k] = Math.sqrt(responseReal * responseReal + responseImag * responseImag);\n phaseResponse[k] = Math.atan2(responseImag, responseReal);\n }\n }\n}\n", "import { Arrays } from \"@opendaw/lib-std\";\nexport class BiquadMono {\n #x1 = 0.0;\n #x2 = 0.0;\n #y1 = 0.0;\n #y2 = 0.0;\n reset() {\n this.#x1 = 0.0;\n this.#x2 = 0.0;\n this.#y1 = 0.0;\n this.#y2 = 0.0;\n }\n process({ a1, a2, b0, b1, b2 }, source, target, fromIndex, toIndex) {\n let x1 = this.#x1;\n let x2 = this.#x2;\n let y1 = this.#y1;\n let y2 = this.#y2;\n for (let i = fromIndex; i < toIndex; i++) {\n const x = source[i];\n const y = target[i] = (b0 * x + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2) + 1e-18 - 1e-18;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n this.#x1 = x1;\n this.#x2 = x2;\n this.#y1 = y1;\n this.#y2 = y2;\n }\n processFrame({ a1, a2, b0, b1, b2 }, x) {\n const y = (b0 * x + b1 * this.#x1 + b2 * this.#x2 - a1 * this.#y1 - a2 * this.#y2) + 1e-18 - 1e-18;\n this.#x2 = this.#x1;\n this.#x1 = x;\n this.#y2 = this.#y1;\n this.#y1 = y;\n return y;\n }\n}\nexport class BiquadStack {\n #stack;\n order;\n constructor(maxOrder) {\n this.#stack = Arrays.create(() => new BiquadMono(), maxOrder);\n this.order = this.#stack.length;\n }\n reset() { this.#stack.forEach(processor => processor.reset()); }\n process(coeff, source, target, fromIndex, toIndex) {\n for (let i = 0; i < this.order; i++) {\n this.#stack[i].process(coeff, source, target, fromIndex, toIndex);\n source = target;\n }\n }\n processFrame(coeff, x) {\n for (let i = 0; i < this.order; i++) {\n x = this.#stack[i].processFrame(coeff, x);\n }\n return x;\n }\n}\n", "/**\n * BPM detector (90-180 BPM) for a mono Float32Array.\n * Port of Mark Hills bpm(1) with a light \"low-BPM penalty\" to dodge \u00BD-tempo aliases.\n */\nexport var BPMTools;\n(function (BPMTools) {\n function detect(buf, sampleRate, options = {}) {\n const { interval = 64, // samples between energy taps\n scanSteps = 1_024, // coarse grid\n scanSamples = 2_048, // autodiff averages / point\n minBPM = 90, maxBPM = 180 } = options;\n const env = new Float32Array(Math.floor(buf.length / interval));\n let v = 0.0, k = 0.0, i = 0;\n for (const x of buf) {\n const z = Math.abs(x);\n v += (z - v) * (z > v ? 1 / 8 : 1 / 512);\n if (++k === interval) {\n k = 0;\n env[i++] = v;\n }\n }\n if (!env.length)\n return NaN;\n const sample = (frames, index) => frames[Math.floor(index)] ?? 0.0;\n const bpmToIv = (b) => (sampleRate / (b / 60.0)) / interval;\n const ivToBpm = (iv) => (sampleRate / (iv * interval)) * 60.0;\n const BEATS = [-32, -16, -8, -4, -2, -1, 1, 2, 4, 8, 16, 32];\n const NO_BEATS = [-0.5, -0.25, 0.25, 0.5];\n const autodiff = (iv) => {\n const mid = Math.random() * env.length;\n const v0 = sample(env, mid);\n let d = 0, t = 0;\n for (const b of BEATS) {\n const w = 1 / Math.abs(b);\n d += w * Math.abs(sample(env, mid + b * iv) - v0);\n t += w;\n }\n for (const nb of NO_BEATS) {\n const w = Math.abs(nb);\n d -= w * Math.abs(sample(env, mid + nb * iv) - v0);\n t += w;\n }\n return d / t;\n };\n const avgDiff = (iv) => {\n let s = 0.0;\n for (let i = 0; i < scanSamples; ++i)\n s += autodiff(iv);\n return s / scanSamples;\n };\n const slow = bpmToIv(minBPM);\n const fast = bpmToIv(maxBPM);\n const step = (slow - fast) / scanSteps;\n let bestBpm = minBPM, bestScore = Infinity;\n for (let iv = fast; iv <= slow; iv += step) {\n const bpm = ivToBpm(iv);\n const cost = avgDiff(iv) * (minBPM / bpm);\n if (cost < bestScore) {\n bestScore = cost;\n bestBpm = bpm;\n }\n }\n return bestBpm;\n }\n BPMTools.detect = detect;\n})(BPMTools || (BPMTools = {}));\n", "import { Arrays } from \"@opendaw/lib-std\";\nexport var Chord;\n(function (Chord) {\n Chord.Major = [0, 2, 4, 5, 7, 9, 11];\n Chord.Minor = [0, 2, 3, 5, 7, 8, 10];\n Chord.NoteLabels = [\"C\", \"C#\", \"D\", \"D#\", \"E\", \"F\", \"F#\", \"G\", \"G#\", \"A\", \"A#\", \"B\"];\n Chord.compile = (scale, root, variation, n) => Arrays.create(index => {\n const step = variation + index * 2;\n const interval = scale[step % 7] + Math.floor(step / 7) * 12;\n return root + interval;\n }, n);\n Chord.toString = (midiNote) => Chord.NoteLabels[midiNote % 12] + (Math.floor(midiNote / 12) - 2);\n})(Chord || (Chord = {}));\n", "import { Arrays, BinarySearch, Generators, Integer, isDefined, mod, NumberComparator, Option, Predicates } from \"@opendaw/lib-std\";\nexport var Event;\n(function (Event) {\n Event.Comparator = (a, b) => a.position - b.position;\n Event.PositionExtractor = (event) => event.position;\n})(Event || (Event = {}));\nexport var EventSpan;\n(function (EventSpan) {\n EventSpan.complete = (event) => event.position + event.duration;\n EventSpan.DescendingComparator = (a, b) => EventSpan.complete(b) - EventSpan.complete(a);\n})(EventSpan || (EventSpan = {}));\n// https://www.desmos.com/calculator/xz4tl5a9o9\nexport var LoopableRegion;\n(function (LoopableRegion) {\n LoopableRegion.globalToLocal = (region, ppqn) => mod(ppqn - region.position + region.loopOffset, region.loopDuration);\n // This locates the first loop iteration and returns a LoopPass, if the loop overlaps the passed range\n // It is probably only used in region editors to render the region's content with the same renderer.\n LoopableRegion.locateLoop = ({ position, complete, loopOffset, loopDuration }, from, to) => {\n const rawStart = position - loopOffset;\n const rawEnd = rawStart + loopDuration;\n if (rawStart >= to || rawEnd <= from) {\n return Option.None;\n } // no overlap\n const resultStart = Math.max(rawStart, from);\n const resultEnd = Math.min(rawEnd, to);\n return Option.wrap({\n index: 0,\n rawStart,\n rawEnd,\n regionStart: Math.max(rawStart, position),\n regionEnd: Math.min(rawEnd, complete),\n resultStart,\n resultEnd,\n resultStartValue: rawStart < resultStart ? (resultStart - rawStart) / loopDuration : 0.0,\n resultEndValue: rawEnd > resultEnd ? (resultEnd - rawStart) / loopDuration : 1.0\n });\n };\n // This locates all loop passes within a given range.\n // This is used for region rendering but can also be used for sequencing region's content.\n function* locateLoops({ position, complete, loopOffset, loopDuration }, from, to) {\n const offset = position - loopOffset;\n const seekMin = Math.max(position, from);\n const seekMax = Math.min(complete, to);\n let passIndex = Math.floor((seekMin - offset) / loopDuration);\n let rawStart = offset + passIndex * loopDuration;\n while (rawStart < seekMax) {\n const rawEnd = rawStart + loopDuration;\n const regionStart = Math.max(rawStart, position);\n const regionEnd = Math.min(rawEnd, complete);\n const resultStart = Math.max(rawStart, seekMin);\n const resultEnd = Math.min(rawEnd, seekMax);\n const resultStartValue = rawStart < resultStart ? (resultStart - rawStart) / loopDuration : 0.0;\n const resultEndValue = rawEnd > resultEnd ? (resultEnd - rawStart) / loopDuration : 1.0;\n yield {\n index: passIndex++,\n rawStart,\n rawEnd,\n regionStart,\n regionEnd,\n resultStart,\n resultEnd,\n resultStartValue,\n resultEndValue\n };\n rawStart = rawEnd;\n }\n }\n LoopableRegion.locateLoops = locateLoops;\n})(LoopableRegion || (LoopableRegion = {}));\nexport class EventCollection {\n static DefaultComparator = (a, b) => a.position - b.position;\n static create(comparator) {\n return new EventCollection(comparator ?? EventCollection.DefaultComparator);\n }\n #array;\n constructor(comparator) { this.#array = new EventArrayImpl(comparator); }\n add(event) { this.#array.add(event); }\n remove(event) { return this.#array.remove(event); }\n contains(event) { return this.#array.contains(event); }\n clear() { this.#array.clear(); }\n optAt(index) { return this.#array.optAt(index); }\n asArray() { return this.#array.asArray(); }\n lowerEqual(position, predicate) {\n return this.#array.lowerEqual(position, predicate);\n }\n greaterEqual(position, predicate) {\n return this.#array.greaterEqual(position, predicate);\n }\n floorLastIndex(position) { return this.#array.floorLastIndex(position); }\n ceilFirstIndex(position) { return this.#array.ceilFirstIndex(position); }\n iterateFrom(fromPosition, predicate) {\n if (this.#array.isEmpty()) {\n return Generators.empty();\n }\n return this.#array.iterateFrom(fromPosition, predicate);\n }\n iterateRange(fromPosition, toPosition, predicate) {\n if (this.#array.isEmpty()) {\n return Generators.empty();\n }\n return this.#array.iterate(this.#array.ceilFirstIndex(fromPosition), toPosition, predicate);\n }\n length() { return this.#array.length(); }\n isEmpty() { return this.#array.isEmpty(); }\n onIndexingChanged() { this.#array.onIndexingChanged(); }\n}\nexport class RegionCollection {\n static Comparator = (a, b) => a.position - b.position;\n static create(comparator) {\n return new RegionCollection(comparator);\n }\n #array;\n constructor(comparator = RegionCollection.Comparator) {\n this.#array = new EventArrayImpl(comparator);\n }\n add(event) { this.#array.add(event); }\n remove(event) { return this.#array.remove(event); }\n contains(event) { return this.#array.contains(event); }\n clear() { this.#array.clear(); }\n optAt(index) { return this.#array.optAt(index); }\n asArray() { return this.#array.asArray(); }\n lowerEqual(position, predicate) {\n return this.#array.lowerEqual(position, predicate);\n }\n greaterEqual(position, predicate) {\n return this.#array.greaterEqual(position, predicate);\n }\n floorLastIndex(position) { return this.#array.floorLastIndex(position); }\n ceilFirstIndex(position) { return this.#array.ceilFirstIndex(position); }\n iterateFrom(fromPosition, predicate) {\n return this.#array.isEmpty() ? Generators.empty() : this.#array.iterateFrom(fromPosition, predicate);\n }\n iterateRange(fromPosition, toPosition) {\n if (this.#array.isEmpty()) {\n return Generators.empty();\n }\n let index = Math.max(0, this.#array.floorLastIndex(fromPosition));\n let period = this.#array.optAt(index);\n if (period === null) {\n return Generators.empty();\n }\n while (period.position + period.duration <= fromPosition) {\n period = this.#array.optAt(++index);\n if (period === null || period.position >= toPosition) {\n return Generators.empty();\n }\n }\n return this.#array.iterate(index, toPosition);\n }\n length() { return this.#array.length(); }\n isEmpty() { return this.#array.isEmpty(); }\n onIndexingChanged() { this.#array.onIndexingChanged(); }\n}\nexport class EventSpanRetainer {\n #array;\n constructor() { this.#array = []; }\n addAndRetain(event) {\n if (this.#array.length === 0) {\n this.#array.push(event);\n }\n else {\n const insertIndex = BinarySearch.leftMost(this.#array, event, EventSpan.DescendingComparator);\n this.#array.splice(insertIndex, 0, event);\n }\n }\n *overlapping(position, comparator) {\n const result = this.#array.filter(event => event.position <= position && position < event.position + event.duration);\n yield* isDefined(comparator) ? result.sort(comparator) : result;\n }\n *releaseLinearCompleted(position) {\n if (this.#array.length === 0) {\n return;\n }\n for (let lastIndex = this.#array.length - 1; lastIndex >= 0; lastIndex--) {\n const event = this.#array[lastIndex];\n if (EventSpan.complete(event) < position) {\n this.#array.splice(lastIndex, 1);\n yield event;\n }\n else {\n return;\n }\n }\n }\n *releaseAll() {\n if (this.#array.length === 0) {\n return;\n }\n for (let lastIndex = this.#array.length - 1; lastIndex >= 0; lastIndex--) {\n const event = this.#array[lastIndex];\n if (Number.POSITIVE_INFINITY > event.duration) {\n this.#array.splice(lastIndex, 1);\n yield event;\n }\n }\n }\n isEmpty() { return this.#array.length === 0; }\n nonEmpty() { return this.#array.length > 0; }\n clear() { Arrays.clear(this.#array); }\n}\nclass EventArrayImpl {\n comparator;\n #array = [];\n #unsorted = false;\n modCount = 0;\n constructor(comparator) {\n this.comparator = comparator;\n }\n add(event) {\n ++this.modCount;\n this.#array.push(event);\n if (this.#array.length > 1) {\n this.#unsorted = true;\n }\n }\n remove(event) {\n ++this.modCount;\n const index = this.#array.indexOf(event);\n if (-1 === index) {\n return false;\n }\n this.#array.splice(index, 1);\n return true;\n }\n contains(event) {\n const size = this.#array.length;\n if (size === 0) {\n return false;\n }\n if (this.#unsorted) {\n this.#sort();\n }\n const key = event.position;\n const startIndex = BinarySearch.leftMostMapped(this.#array, key, NumberComparator, Event.PositionExtractor);\n for (let i = startIndex; i < this.#array.length; i++) {\n const other = this.#array[i];\n if (other === event) {\n return true;\n }\n if (other.position !== key) {\n return false;\n }\n }\n return false;\n }\n clear() {\n ++this.modCount;\n Arrays.clear(this.#array);\n this.#unsorted = false;\n }\n optAt(index) {\n if (index < 0 || index >= this.#array.length) {\n return null;\n }\n if (this.#unsorted) {\n this.#sort();\n }\n return this.#array[index];\n }\n asArray() {\n if (this.#unsorted) {\n this.#sort();\n }\n return this.#array;\n }\n lowerEqual(position, predicate) {\n if (predicate === undefined) {\n return this.optAt(this.floorLastIndex(position));\n }\n let index = this.floorLastIndex(position);\n while (index >= 0) {\n const event = this.#array[index--];\n if (predicate(event)) {\n return event;\n }\n }\n return null;\n }\n greaterEqual(position, predicate) {\n if (predicate === undefined) {\n return this.optAt(this.ceilFirstIndex(position));\n }\n let index = this.ceilFirstIndex(position);\n while (index < this.#array.length) {\n const event = this.#array[index++];\n if (predicate(event)) {\n return event;\n }\n }\n return null;\n }\n floorLastIndex(position) {\n if (this.#unsorted) {\n this.#sort();\n }\n return BinarySearch.rightMostMapped(this.#array, position, NumberComparator, Event.PositionExtractor);\n }\n ceilFirstIndex(position) {\n if (this.#unsorted) {\n this.#sort();\n }\n return BinarySearch.leftMostMapped(this.#array, position, NumberComparator, Event.PositionExtractor);\n }\n iterateFrom(fromPosition, predicate) {\n const floorLastIndex = this.floorLastIndex(fromPosition);\n let startIndex = floorLastIndex;\n if (startIndex < 0) {\n return this.iterate(0, Integer.MAX_VALUE, predicate);\n }\n while (startIndex >= 0) {\n const event = this.optAt(startIndex);\n if (event !== null && predicate !== undefined && predicate(event)) {\n return this.iterate(startIndex, Integer.MAX_VALUE, predicate);\n }\n startIndex--;\n }\n return this.iterate(floorLastIndex, Integer.MAX_VALUE, predicate);\n }\n length() { return this.#array.length; }\n isEmpty() { return this.#array.length === 0; }\n onIndexingChanged() { this.#unsorted = this.length() > 1; }\n *iterate(fromIndex, toPosition, predicate = Predicates.alwaysTrue) {\n if (this.#unsorted) {\n this.#sort();\n }\n while (fromIndex < this.#array.length) {\n const element = this.#array[fromIndex++];\n if (element.position >= toPosition) {\n return;\n }\n if (predicate(element)) {\n yield element;\n }\n }\n }\n #sort() {\n this.#array.sort(this.comparator);\n this.#unsorted = false;\n }\n}\n", "export class FFT {\n static reverse(i) {\n i = (i & 0x55555555) << 1 | (i >>> 1) & 0x55555555;\n i = (i & 0x33333333) << 2 | (i >>> 2) & 0x33333333;\n i = (i & 0x0f0f0f0f) << 4 | (i >>> 4) & 0x0f0f0f0f;\n i = (i << 24) | ((i & 0xff00) << 8) | ((i >>> 8) & 0xff00) | (i >>> 24);\n return i;\n }\n ;\n #n;\n #levels;\n #cosTable;\n #sinTable;\n constructor(n) {\n this.#n = n;\n const halfN = n / 2;\n this.#levels = (32 - Math.floor(Math.log2(n))) | 0;\n this.#cosTable = new Float32Array(halfN);\n this.#sinTable = new Float32Array(halfN);\n for (let i = 0; i < halfN; i++) {\n const angle = 2.0 * Math.PI * i / n;\n this.#cosTable[i] = Math.cos(angle);\n this.#sinTable[i] = Math.sin(angle);\n }\n }\n process(real, imag) {\n let i, j, k, temp;\n for (let i = 0 | 0; i < this.#n; ++i) {\n j = FFT.reverse(i) >>> this.#levels;\n if (j > i) {\n temp = real[i];\n real[i] = real[j];\n real[j] = temp;\n temp = imag[i];\n imag[i] = imag[j];\n imag[j] = temp;\n }\n }\n const cosTable = this.#cosTable;\n const sinTable = this.#sinTable;\n for (let size = 2 | 0; size <= this.#n; size <<= 1) {\n const hs = size >> 1;\n const ts = this.#n / size;\n for (i = 0 | 0; i < this.#n; i += size) {\n const m = i + hs;\n for (j = i, k = 0; j < m; j++, k = (k + ts) | 0) {\n const idx = (j + hs) | 0;\n const cos = cosTable[k];\n const sin = sinTable[k];\n const reali = real[idx];\n const imagi = imag[idx];\n const pre = reali * cos + imagi * sin;\n const pim = imagi * cos - reali * sin;\n const real2 = real[j];\n const imag2 = imag[j];\n real[idx] = real2 - pre;\n imag[idx] = imag2 - pim;\n real[j] = real2 + pre;\n imag[j] = imag2 + pim;\n }\n }\n if (size === this.#n) {\n break;\n }\n }\n }\n}\n", "// Pulses per quarter note (PPQN)\n// 960 = 3*5*2^6\nconst Quarter = 960;\nconst Bar = Quarter << 2; // 3_840\nconst SemiQuaver = Quarter >>> 2; // 240\nconst fromSignature = (nominator, denominator) => Math.floor(Bar / denominator) * nominator;\nconst toParts = (ppqn, nominator = 4, denominator = 4) => {\n const lowerPulses = fromSignature(1, denominator);\n const beats = Math.floor(ppqn / lowerPulses);\n const bars = Math.floor(beats / nominator);\n const remainingPulses = Math.floor(ppqn) - fromSignature(bars * nominator, denominator);\n const ticks = remainingPulses % lowerPulses;\n const semiquavers = Math.floor(ticks / SemiQuaver);\n const remainingTicks = ticks % SemiQuaver;\n return {\n bars,\n beats: beats - bars * nominator,\n semiquavers,\n ticks: remainingTicks\n };\n};\nconst secondsToPulses = (seconds, bpm) => seconds * bpm / 60.0 * Quarter;\nconst pulsesToSeconds = (pulses, bpm) => (pulses * 60.0 / Quarter) / bpm;\nconst samplesToPulses = (samples, bpm, sampleRate) => secondsToPulses(samples / sampleRate, bpm);\nconst pulsesToSamples = (pulses, bpm, sampleRate) => pulsesToSeconds(pulses, bpm) * sampleRate;\nexport const PPQN = {\n Bar,\n Quarter,\n SemiQuaver,\n fromSignature,\n toParts,\n secondsToPulses,\n pulsesToSeconds,\n samplesToPulses,\n pulsesToSamples,\n toString: (pulses, nominator = 4, denominator = 4) => {\n const { bars, beats, semiquavers, ticks } = toParts(pulses | 0, nominator, denominator);\n return `${bars + 1}.${beats + 1}.${semiquavers + 1}:${ticks}`;\n }\n};\n", "import { PPQN } from \"./ppqn\";\nexport var Fraction;\n(function (Fraction) {\n Fraction.builder = () => new Builder();\n Fraction.toDouble = ([n, d]) => n / d;\n Fraction.toPPQN = ([n, d]) => PPQN.fromSignature(n, d);\n class Builder {\n #list = [];\n add(fraction) {\n this.#list.push(fraction);\n return this;\n }\n asArray() { return this.#list; }\n asAscendingArray() { return this.#list.toSorted((a, b) => Fraction.toDouble(a) - Fraction.toDouble(b)); }\n asDescendingArray() { return this.#list.toSorted((a, b) => Fraction.toDouble(b) - Fraction.toDouble(a)); }\n }\n})(Fraction || (Fraction = {}));\n", "export class Fragmentor {\n static *iterate(p0, p1, stepSize) {\n let index = Math.ceil(p0 / stepSize);\n let position = index * stepSize;\n while (position < p1) {\n yield position;\n position = ++index * stepSize;\n }\n }\n static *iterateWithIndex(p0, p1, stepSize) {\n let index = Math.ceil(p0 / stepSize);\n let position = index * stepSize;\n while (position < p1) {\n yield { position, index };\n position = ++index * stepSize;\n }\n }\n}\n", "import { Arrays, asDefined, assert } from \"@opendaw/lib-std\";\nexport class Graph {\n #vertices;\n #predecessors;\n constructor() {\n this.#vertices = [];\n this.#predecessors = new Map();\n }\n addVertex(vertex) {\n assert(!this.#vertices.includes(vertex), \"Vertex already exists\");\n this.#vertices.push(vertex);\n assert(!this.#predecessors.has(vertex), \"Predecessor already exists\");\n this.#predecessors.set(vertex, []);\n }\n removeVertex(vertex) {\n Arrays.remove(this.#vertices, vertex);\n const found = this.#predecessors.delete(vertex);\n assert(found, \"Predecessor does not exists\");\n }\n getPredecessors(vertex) { return this.#predecessors.get(vertex) ?? Arrays.empty(); }\n predecessors() { return this.#predecessors; }\n vertices() { return this.#vertices; }\n addEdge([source, target]) {\n const vertexPredecessors = asDefined(this.#predecessors.get(target), `[add] Edge has unannounced vertex. (${target})`);\n assert(!vertexPredecessors.includes(source), `${source} is already marked.`);\n vertexPredecessors.push(source);\n }\n removeEdge([source, target]) {\n const vertexPredecessors = asDefined(this.#predecessors.get(target), `[remove] Edge has unannounced vertex. (${target})`);\n assert(vertexPredecessors.includes(source), `${source} is not marked.`);\n Arrays.remove(vertexPredecessors, source);\n }\n isEmpty() { return this.#vertices.length === 0; }\n}\nexport class TopologicalSort {\n #graph;\n #sorted;\n #visited;\n #withLoops;\n #successors;\n constructor(graph) {\n this.#graph = graph;\n this.#sorted = [];\n this.#visited = new Set();\n this.#withLoops = new Set();\n this.#successors = new Map();\n }\n update() {\n this.#prepare();\n this.#graph.vertices().forEach(vertex => this.#visit(vertex));\n }\n sorted() { return this.#sorted; }\n hasLoops() { return this.#withLoops.size !== 0; }\n #prepare() {\n this.#clear();\n const addTo = new Map();\n for (const vert of this.#graph.vertices()) {\n this.#successors.set(vert, new Set());\n addTo.set(vert, new Set());\n }\n for (const vert2 of this.#graph.vertices()) {\n for (const vert1 of this.#graph.getPredecessors(vert2)) {\n asDefined(this.#successors.get(vert1), `Could not find Successor for ${vert1}`).add(vert2);\n }\n }\n let change;\n do {\n change = false;\n for (const vert of this.#graph.vertices()) {\n asDefined(addTo.get(vert)).clear();\n for (const vert1 of asDefined(this.#successors.get(vert))) {\n for (const vert2 of asDefined(this.#successors.get(vert1))) {\n if (!this.#successors.get(vert)?.has(vert2)) {\n change = true;\n asDefined(addTo.get(vert)).add(vert2);\n }\n }\n }\n }\n for (const vert of this.#graph.vertices()) {\n const vs = asDefined(this.#successors.get(vert));\n asDefined(addTo.get(vert)).forEach(n1 => vs.add(n1));\n }\n } while (change);\n }\n #visit(vert) {\n if (this.#visited.has(vert)) {\n return;\n }\n this.#visited.add(vert);\n for (const n1 of this.#graph.getPredecessors(vert)) {\n if (asDefined(this.#successors.get(vert)).has(n1)) {\n this.#withLoops.add(vert);\n this.#withLoops.add(n1);\n continue;\n }\n this.#visit(n1);\n }\n this.#sorted.push(vert);\n }\n #clear() {\n Arrays.clear(this.#sorted);\n this.#visited.clear();\n this.#withLoops.clear();\n this.#successors.clear();\n }\n}\n", "import { assert, BinarySearch, NumberComparator, quantizeFloor } from \"@opendaw/lib-std\";\nexport var Groove;\n(function (Groove) {\n Groove.Identity = {\n warp: (position) => position,\n unwarp: (position) => position\n };\n})(Groove || (Groove = {}));\nexport class GroovePattern {\n #func;\n constructor(func) { this.#func = func; }\n warp(position) { return this.#transform(true, position); }\n unwarp(position) { return this.#transform(false, position); }\n #transform(forward, position) {\n const duration = this.#func.duration();\n const start = quantizeFloor(position, duration);\n const normalized = (position - start) / duration;\n const transformed = forward ? this.#func.fx(normalized) : this.#func.fy(normalized);\n return start + transformed * duration;\n }\n}\nexport class QuantisedGrooveFunction {\n #values;\n constructor(values) {\n assert(values.length >= 2, \"Must have at least two values [0, 1]\");\n assert(values[0] === 0.0, \"First entry must be zero\");\n assert(values[values.length - 1] === 1.0, \"Last entry must be one\");\n this.#values = values;\n }\n fx(x) {\n if (x <= 0.0) {\n return 0.0;\n }\n if (x >= 1.0) {\n return 1.0;\n }\n const idxFloat = x * (this.#values.length - 1);\n const idxInteger = idxFloat | 0;\n const valueFloor = this.#values[idxInteger];\n const alpha = idxFloat - idxInteger;\n return valueFloor + alpha * (this.#values[idxInteger + 1] - valueFloor);\n }\n fy(y) {\n if (y <= 0.0) {\n return 0.0;\n }\n if (y >= 1.0) {\n return 1.0;\n }\n const index = BinarySearch.rightMost(this.#values, y, NumberComparator);\n const curr = this.#values[index];\n const next = this.#values[index + 1];\n const alpha = (y - curr) / (next - curr);\n return (index + alpha) / (this.#values.length - 1);\n }\n}\nexport class GrooveChain {\n #grooves;\n constructor(grooves) { this.#grooves = grooves; }\n warp(position) {\n for (let i = 0; i < this.#grooves.length; i++) {\n position = this.#grooves[i].warp(position);\n }\n return position;\n }\n unwarp(position) {\n for (let i = this.#grooves.length - 1; i >= 0; i--) {\n position = this.#grooves[i].unwarp(position);\n }\n return position;\n }\n}\n", "export var MidiKeys;\n(function (MidiKeys) {\n MidiKeys.BlackKeyIndices = [1, 3, 6, 8, 10];\n MidiKeys.BlackKeyBits = MidiKeys.BlackKeyIndices.reduce((bits, keyIndex) => (bits |= 1 << keyIndex), 0);\n MidiKeys.Names = {\n English: [\"C\", \"C#\", \"D\", \"D#\", \"E\", \"F\", \"F#\", \"G\", \"G#\", \"A\", \"A#\", \"B\"],\n German: [\"C\", \"Cis\", \"D\", \"Dis\", \"E\", \"F\", \"Fis\", \"G\", \"Gis\", \"A\", \"Ais\", \"H\"],\n Solfege: [\"Do\", \"Do#\", \"R\u00E9\", \"R\u00E9#\", \"Mi\", \"Fa\", \"Fa#\", \"Sol\", \"Sol#\", \"La\", \"La#\", \"Si\"],\n French: [\"Do\", \"Do#\", \"R\u00E9\", \"R\u00E9#\", \"Mi\", \"Fa\", \"Fa#\", \"Sol\", \"Sol#\", \"La\", \"La#\", \"Si\"],\n Spanish: [\"Do\", \"Do#\", \"Re\", \"Re#\", \"Mi\", \"Fa\", \"Fa#\", \"Sol\", \"Sol#\", \"La\", \"La#\", \"Si\"],\n Japanese: [\"\u30C9\", \"\u30C9\u266F\", \"\u30EC\", \"\u30EC\u266F\", \"\u30DF\", \"\u30D5\u30A1\", \"\u30D5\u30A1\u266F\", \"\u30BD\", \"\u30BD\u266F\", \"\u30E9\", \"\u30E9\u266F\", \"\u30B7\"]\n };\n MidiKeys.isBlackKey = (note) => (MidiKeys.BlackKeyBits & (1 << (note % 12))) !== 0;\n MidiKeys.toFullString = (note) => `${MidiKeys.Names.English[note % 12]}${(Math.floor(note / 12) - 2)}`;\n class PredefinedScaleImpl {\n #name;\n #bits;\n constructor(name, ...keys) {\n this.#name = name;\n this.#bits = keys.reduce((bits, keyIndex) => (bits |= 1 << keyIndex), 0);\n }\n get name() { return this.#name; }\n get bits() { return this.#bits; }\n has(note) { return (this.#bits & (1 << (note % 12))) !== 0; }\n equals(other) { return this.#bits === other.bits; }\n }\n MidiKeys.StockScales = [\n new PredefinedScaleImpl(\"Major\", 0, 2, 4, 5, 7, 9, 11),\n new PredefinedScaleImpl(\"Natural Minor\", 0, 2, 3, 5, 7, 8, 10),\n new PredefinedScaleImpl(\"Harmonic Minor\", 0, 2, 3, 5, 7, 8, 11),\n new PredefinedScaleImpl(\"Melodic Minor\", 0, 2, 3, 5, 7, 9, 11),\n new PredefinedScaleImpl(\"Dorian\", 0, 2, 3, 5, 7, 9, 10),\n new PredefinedScaleImpl(\"Phrygian\", 0, 1, 3, 5, 7, 8, 10),\n new PredefinedScaleImpl(\"Lydian\", 0, 2, 4, 6, 7, 9, 11),\n new PredefinedScaleImpl(\"Mixolydian\", 0, 2, 4, 5, 7, 9, 10),\n new PredefinedScaleImpl(\"Locrian\", 0, 1, 3, 5, 6, 8, 10),\n new PredefinedScaleImpl(\"Pentatonic Major\", 0, 2, 4, 7, 9),\n new PredefinedScaleImpl(\"Pentatonic Minor\", 0, 3, 5, 7, 10),\n new PredefinedScaleImpl(\"Blues\", 0, 3, 5, 6, 7, 10),\n new PredefinedScaleImpl(\"Whole Tone\", 0, 2, 4, 6, 8, 10),\n new PredefinedScaleImpl(\"Diminished\", 0, 2, 3, 5, 6, 8, 9, 11),\n new PredefinedScaleImpl(\"Augmented\", 0, 3, 4, 7, 8, 11)\n ];\n})(MidiKeys || (MidiKeys = {}));\n", "import { EventSpan } from \"./events\";\nexport var NoteEvent;\n(function (NoteEvent) {\n NoteEvent.isOfType = (event) => event.type === \"note-event\";\n NoteEvent.Comparator = (a, b) => {\n const positionDiff = a.position - b.position;\n if (positionDiff !== 0) {\n return positionDiff;\n }\n const pitchDiff = a.pitch - b.pitch;\n if (pitchDiff !== 0) {\n return pitchDiff;\n }\n // We should allow this and leave it to the user to resolve issues like that\n return 0;\n };\n // TODO Replace with https://www.desmos.com/calculator/ekbzuu5j2x\n NoteEvent.curveFunc = (ratio, curve) => curve < 0.0 ? ratio ** (2.0 ** -curve) : 1.0 - (1.0 - ratio) ** (2.0 ** curve);\n NoteEvent.inverseCurveFunc = (ratio, curve) => curve < 0.0 ? ratio ** (2.0 ** curve) : 1.0 - Math.max(0.0, 1.0 - ratio) ** (2.0 ** -curve);\n NoteEvent.CompleteComparator = (a, b) => {\n const diffComplete = EventSpan.complete(a) - EventSpan.complete(b);\n if (diffComplete !== 0) {\n return diffComplete;\n }\n return a.pitch - b.pitch;\n };\n})(NoteEvent || (NoteEvent = {}));\n", "export var Waveform;\n(function (Waveform) {\n Waveform[Waveform[\"sine\"] = 0] = \"sine\";\n Waveform[Waveform[\"triangle\"] = 1] = \"triangle\";\n Waveform[Waveform[\"sawtooth\"] = 2] = \"sawtooth\";\n Waveform[Waveform[\"square\"] = 3] = \"square\";\n})(Waveform || (Waveform = {}));\nexport class BandLimitedOscillator {\n #phase = 0.0;\n #integrator = 0.0;\n generate(buffer, phaseInc, waveform, fromIndex, toIndex) {\n for (let i = fromIndex; i < toIndex; i++) {\n const t = this.#phase % 1.0;\n let out = 0.0;\n switch (waveform) {\n case Waveform.sine:\n out = Math.sin(2.0 * Math.PI * t);\n break;\n case Waveform.sawtooth:\n out = 2.0 * t - 1.0;\n out -= this.#polyBLEP(t, phaseInc);\n break;\n case Waveform.square:\n out = t < 0.5 ? 1.0 : -1.0;\n out += this.#polyBLEP(t, phaseInc);\n out -= this.#polyBLEP((t + 0.5) % 1.0, phaseInc);\n break;\n case Waveform.triangle:\n let sq = t < 0.5 ? 1.0 : -1.0;\n sq += this.#polyBLEP(t, phaseInc);\n sq -= this.#polyBLEP((t + 0.5) % 1.0, phaseInc);\n this.#integrator += sq * (4.0 * phaseInc);\n out = this.#integrator;\n break;\n }\n buffer[i] = out;\n this.#phase += phaseInc;\n }\n }\n #polyBLEP(t, dt) {\n if (t < dt) {\n t /= dt;\n return t + t - t * t - 1.0;\n }\n else if (t > 1.0 - dt) {\n t = (t - 1.0) / dt;\n return t * t + t + t + 1.0;\n }\n return 0.0;\n }\n}\n", "import { clamp, PI_QUART } from \"@opendaw/lib-std\";\nexport var StereoMatrix;\n(function (StereoMatrix) {\n let Mixing;\n (function (Mixing) {\n Mixing[Mixing[\"Linear\"] = 0] = \"Linear\";\n Mixing[Mixing[\"EqualPower\"] = 1] = \"EqualPower\";\n })(Mixing = StereoMatrix.Mixing || (StereoMatrix.Mixing = {}));\n StereoMatrix.zero = () => ({ ll: 0.0, lr: 0.0, rl: 0.0, rr: 0.0 });\n StereoMatrix.identity = () => ({ ll: 1.0, lr: 0.0, rl: 0.0, rr: 1.0 });\n StereoMatrix.update = (m, { gain, panning, invertL, invertR, stereo, swap }, mixing = Mixing.EqualPower) => {\n const [panL, panR] = StereoMatrix.panningToGains(panning, mixing);\n let lGain = panL * gain;\n let rGain = panR * gain;\n if (invertL)\n lGain *= -1.0;\n if (invertR)\n rGain *= -1.0;\n const mono = Math.max(0.0, -stereo);\n const expand = Math.max(0.0, stereo);\n const midGain = 1.0 - expand;\n const sideGain = 1.0 + expand;\n const monoAmount = mono * 0.5;\n const stereoWidth = 1.0 - mono;\n const m00 = (midGain + sideGain) * 0.5;\n const m01 = (midGain - sideGain) * 0.5;\n const m10 = (midGain - sideGain) * 0.5;\n const m11 = (midGain + sideGain) * 0.5;\n const ll = (lGain * (monoAmount + stereoWidth)) * m00 + (rGain * monoAmount) * m01;\n const rl = (lGain * (monoAmount + stereoWidth)) * m10 + (rGain * monoAmount) * m11;\n const lr = (lGain * monoAmount) * m00 + (rGain * (monoAmount + stereoWidth)) * m01;\n const rr = (lGain * monoAmount) * m10 + (rGain * (monoAmount + stereoWidth)) * m11;\n if (swap) {\n m.ll = rl;\n m.rl = ll;\n m.lr = rr;\n m.rr = lr;\n }\n else {\n m.ll = ll;\n m.lr = lr;\n m.rl = rl;\n m.rr = rr;\n }\n };\n StereoMatrix.panningToGains = (panning, mixing) => {\n const x = clamp(panning, -1.0, 1.0);\n switch (mixing) {\n case Mixing.Linear:\n return [\n Math.min(1.0 - x, 1.0),\n Math.min(x + 1.0, 1.0)\n ];\n case Mixing.EqualPower:\n return [\n Math.cos((x + 1.0) * PI_QUART),\n Math.sin((x + 1.0) * PI_QUART)\n ];\n }\n };\n StereoMatrix.applyFrame = (m, l, r) => [m.ll * l + m.rl * r, m.lr * l + m.rr * r];\n StereoMatrix.processFrames = (m, source, target, fromIndex, toIndex) => {\n const [src0, src1] = source;\n const [trg0, trg1] = target;\n for (let i = fromIndex; i < toIndex; i++) {\n const l = src0[i];\n const r = src1[i];\n trg0[i] = m.ll * l + m.rl * r;\n trg1[i] = m.lr * l + m.rr * r;\n }\n };\n StereoMatrix.replaceFrames = (m, [ch0, ch1], fromIndex, toIndex) => {\n for (let i = fromIndex; i < toIndex; i++) {\n const l = ch0[i];\n const r = ch1[i];\n ch0[i] = m.ll * l + m.rl * r;\n ch1[i] = m.lr * l + m.rr * r;\n }\n };\n})(StereoMatrix || (StereoMatrix = {}));\n", "import { StereoMatrix } from \"./stereo\";\nexport var Ramp;\n(function (Ramp) {\n Ramp.linear = (sampleRate, durationInSeconds = 0.005) => {\n return new LinearRamp(Math.ceil(sampleRate * durationInSeconds) | 0);\n };\n Ramp.stereoMatrix = (sampleRate, durationInSeconds = 0.005) => {\n return new StereoMatrixRamp(Math.ceil(sampleRate * durationInSeconds) | 0);\n };\n class LinearRamp {\n #length;\n #value = 0.0;\n #target = 0.0;\n #delta = 0.0;\n #remaining = 0 | 0;\n constructor(length) { this.#length = length; }\n set(target, smooth) {\n if (this.#value === target) {\n return;\n }\n if (smooth === true) {\n this.#target = target;\n this.#delta = (target - this.#value) / this.#length;\n this.#remaining = this.#length;\n }\n else {\n this.#value = this.#target = target;\n this.#delta = 0.0;\n this.#remaining = 0;\n }\n }\n get() { return this.#value; }\n moveAndGet() {\n if (0 < this.#remaining) {\n this.#value += this.#delta;\n if (0 === --this.#remaining) {\n this.#delta = 0.0;\n this.#value = this.#target;\n }\n }\n return this.#value;\n }\n isFixed(value) { return this.#value === value && 0 === this.#remaining; }\n isInterpolating() { return this.#remaining > 0; }\n }\n class StereoMatrixRamp {\n #length;\n #value = StereoMatrix.zero();\n #target = StereoMatrix.zero();\n #delta = StereoMatrix.zero();\n #remaining = 0 | 0;\n constructor(length) { this.#length = length; }\n update(params, mixing, smooth) {\n StereoMatrix.update(this.#target, params, mixing);\n if (smooth === true) {\n this.#delta.ll = (this.#target.ll - this.#value.ll) / this.#length;\n this.#delta.lr = (this.#target.lr - this.#value.lr) / this.#length;\n this.#delta.rl = (this.#target.rl - this.#value.rl) / this.#length;\n this.#delta.rr = (this.#target.rr - this.#value.rr) / this.#length;\n this.#remaining = this.#length;\n }\n else {\n this.#value.ll = this.#target.ll;\n this.#value.lr = this.#target.lr;\n this.#value.rl = this.#target.rl;\n this.#value.rr = this.#target.rr;\n this.#delta.ll = 0.0;\n this.#delta.lr = 0.0;\n this.#delta.rl = 0.0;\n this.#delta.rr = 0.0;\n this.#remaining = 0;\n }\n }\n processFrames(source, target, fromIndex, toIndex) {\n const [src0, src1] = source;\n const [trg0, trg1] = target;\n if (this.isInterpolating()) {\n for (let i = fromIndex; i < toIndex; i++) {\n const l = src0[i];\n const r = src1[i];\n const m = this.moveAndGet();\n trg0[i] = m.ll * l + m.rl * r;\n trg1[i] = m.lr * l + m.rr * r;\n }\n }\n else {\n const m = this.#target;\n for (let i = fromIndex; i < toIndex; i++) {\n const l = src0[i];\n const r = src1[i];\n trg0[i] = m.ll * l + m.rl * r;\n trg1[i] = m.lr * l + m.rr * r;\n }\n }\n }\n set(target, smooth) {\n if (this.#equals(target)) {\n return;\n }\n if (smooth === true) {\n this.#target.ll = target.ll;\n this.#target.lr = target.lr;\n this.#target.rl = target.rl;\n this.#target.rr = target.rr;\n this.#delta.ll = (target.ll - this.#value.ll) / this.#length;\n this.#delta.lr = (target.lr - this.#value.lr) / this.#length;\n this.#delta.rl = (target.rl - this.#value.rl) / this.#length;\n this.#delta.rr = (target.rr - this.#value.rr) / this.#length;\n this.#remaining = this.#length;\n }\n else {\n this.#value.ll = this.#target.ll = target.ll;\n this.#value.lr = this.#target.lr = target.lr;\n this.#value.rl = this.#target.rl = target.rl;\n this.#value.rr = this.#target.rr = target.rr;\n this.#delta.ll = 0.0;\n this.#delta.lr = 0.0;\n this.#delta.rl = 0.0;\n this.#delta.rr = 0.0;\n this.#remaining = 0;\n }\n }\n get() { return this.#value; }\n moveAndGet() {\n if (0 < this.#remaining) {\n this.#value.ll += this.#delta.ll;\n this.#value.lr += this.#delta.lr;\n this.#value.rl += this.#delta.rl;\n this.#value.rr += this.#delta.rr;\n if (0 === --this.#remaining) {\n this.#delta.ll = 0.0;\n this.#delta.lr = 0.0;\n this.#delta.rl = 0.0;\n this.#delta.rr = 0.0;\n this.#value.ll = this.#target.ll;\n this.#value.lr = this.#target.lr;\n this.#value.rl = this.#target.rl;\n this.#value.rr = this.#target.rr;\n }\n }\n return this.#value;\n }\n isFixed(value) { return this.#equals(value) && this.#remaining === 0; }\n isInterpolating() { return this.#remaining > 0; }\n #equals(value) {\n return this.#value.ll === value.ll && this.#value.lr === value.lr\n && this.#value.rl === value.rl && this.#value.rr === value.rr;\n }\n }\n Ramp.StereoMatrixRamp = StereoMatrixRamp;\n})(Ramp || (Ramp = {}));\n", "export class RMS {\n #values;\n #inv;\n #index;\n #sum;\n constructor(n) {\n this.#values = new Float32Array(n);\n this.#inv = 1.0 / n;\n this.#index = 0 | 0;\n this.#sum = 0.0;\n }\n pushPop(x) {\n const squared = x * x;\n this.#sum -= this.#values[this.#index];\n this.#sum += squared;\n this.#values[this.#index] = squared;\n if (++this.#index === this.#values.length) {\n this.#index = 0;\n }\n return this.#sum <= 0.0 ? 0.0 : Math.sqrt(this.#sum * this.#inv);\n }\n clear() {\n this.#values.fill(0.0);\n this.#sum = 0.0;\n this.#index = 0 | 0;\n }\n}\n", "import { panic } from \"@opendaw/lib-std\";\nconst LogDb = Math.log(10.0) / 20.0;\nexport const midiToHz = (note = 60.0, baseFrequency = 440.0) => baseFrequency * Math.pow(2.0, (note + 3.0) / 12.0 - 6.0);\nexport const hzToMidi = (hz, baseFrequency = 440.0) => (12.0 * Math.log(hz / baseFrequency) + 69.0 * Math.LN2) / Math.LN2;\nexport const dbToGain = (db) => Math.exp(db * LogDb);\nexport const gainToDb = (gain) => Math.log(gain) / LogDb;\nexport const velocityToGain = (velocity) => dbToGain(20 * Math.log10(velocity));\nexport const barsToBpm = (bars, duration) => (bars * 240.0) / duration;\nexport const bpmToBars = (bpm, duration) => (bpm * duration) / 240.0;\nexport const estimateBpm = (duration, maxBpm = 180.0) => {\n const bpm = barsToBpm(Math.pow(2.0, Math.floor(Math.log(bpmToBars(maxBpm, duration)) / Math.LN2)), duration);\n return Math.round(bpm * 1000.0) / 1000.0;\n};\nexport const parseTimeSignature = (input) => {\n const [first, second] = input.split(\"/\");\n const numerator = parseInt(first, 10);\n const denominator = parseInt(second, 10);\n if (!Number.isInteger(numerator) || !Number.isInteger(denominator)) {\n return panic(\"Invalid format. Must be two integers separated by '/'\");\n }\n if ((denominator & (denominator - 1)) !== 0) {\n return panic(\"Denominator must be a power of two\");\n }\n return [numerator, denominator];\n};\n", "import { BinarySearch, Curve, Iterables, panic } from \"@opendaw/lib-std\";\nexport const Interpolation = {\n None: { type: \"none\" },\n Linear: { type: \"linear\" },\n Curve: (slope) => ({ type: \"curve\", slope })\n};\nexport var ValueEvent;\n(function (ValueEvent) {\n ValueEvent.Comparator = (a, b) => {\n const positionDiff = a.position - b.position;\n if (positionDiff !== 0) {\n return positionDiff;\n }\n const indexDiff = a.index - b.index;\n if (indexDiff !== 0) {\n return indexDiff;\n }\n return a === b ? 0 : panic(`${a} and ${b} are identical in terms of comparison`);\n };\n function* iterateWindow(events, fromPosition, toPosition) {\n if (events.isEmpty()) {\n return Iterables.empty();\n }\n for (const event of events.iterateFrom(fromPosition)) {\n yield event;\n if (event.position >= toPosition) {\n return;\n }\n }\n }\n ValueEvent.iterateWindow = iterateWindow;\n ValueEvent.nextEvent = (events, precursor) => {\n const sorted = events.asArray();\n const index = BinarySearch.rightMost(sorted, precursor, ValueEvent.Comparator);\n return index === -1 ? null : sorted[index + 1] ?? null;\n };\n /**\n * Computes a value at a given position\n */\n ValueEvent.valueAt = (events, position, fallback) => {\n if (events.isEmpty()) {\n return fallback;\n } // no events, nothing to iterate\n const iterator = events.iterateFrom(position);\n const { done, value: prevEvent } = iterator.next();\n if (done) {\n return fallback;\n }\n if (prevEvent.position <= position) {\n const { done, value: nextEvent } = iterator.next();\n if (done) {\n return prevEvent.value;\n }\n else if (position < nextEvent.position) {\n return interpolate(prevEvent, nextEvent, position);\n }\n else if (prevEvent.interpolation === Interpolation.None) {\n return prevEvent.value;\n }\n }\n return prevEvent.value;\n };\n /**\n * Quantize an automation in equal segments but also include min/max values.\n * This is used for the ValueClipPainter to draw circular automation curves.\n * It has been tested in the AutomationPage.\n */\n function* quantise(events, position, duration, numSteps) {\n if (events.isEmpty()) {\n return;\n } // no events, nothing to iterate\n const iterator = events.iterateFrom(position);\n const { done, value } = iterator.next();\n if (done) {\n return;\n }\n const step = duration / numSteps;\n let prevEvent = value;\n if (prevEvent.position > position) {\n while (position < prevEvent.position) {\n yield { position, value: prevEvent.value };\n position += step;\n if (position > duration) {\n return;\n }\n }\n if (prevEvent.position <= duration) {\n yield prevEvent;\n }\n }\n while (position <= duration) {\n const { done, value: nextEvent } = iterator.next();\n if (done) {\n break;\n }\n while (position < nextEvent.position) {\n if (position > duration) {\n return;\n }\n yield { position, value: interpolate(prevEvent, nextEvent, position) };\n position += step;\n }\n if (nextEvent.position < duration) {\n if (prevEvent.interpolation === Interpolation.None) {\n yield { position: nextEvent.position, value: prevEvent.value };\n }\n yield nextEvent;\n }\n prevEvent = nextEvent;\n }\n while (position <= duration) {\n yield { position, value: prevEvent.value };\n position += step;\n }\n }\n ValueEvent.quantise = quantise;\n const interpolate = ({ value, position, interpolation }, b, x) => {\n if (interpolation.type === \"none\") {\n return value;\n }\n else if (interpolation.type === \"linear\") {\n return value + (x - position) / (b.position - position) * (b.value - value);\n }\n else if (interpolation.type === \"curve\") {\n return Curve.valueAt({\n slope: interpolation.slope,\n steps: b.position - position,\n y0: value,\n y1: b.value\n }, x - position);\n }\n else {\n return panic(\"Unknown interpolation\");\n }\n };\n})(ValueEvent || (ValueEvent = {}));\n", "export var Window;\n(function (Window) {\n let Type;\n (function (Type) {\n Type[Type[\"Bartlett\"] = 0] = \"Bartlett\";\n Type[Type[\"Blackman\"] = 1] = \"Blackman\";\n Type[Type[\"BlackmanHarris\"] = 2] = \"BlackmanHarris\";\n Type[Type[\"Hamming\"] = 3] = \"Hamming\";\n Type[Type[\"Hanning\"] = 4] = \"Hanning\";\n })(Type = Window.Type || (Window.Type = {}));\n Window.create = (type, n) => {\n const values = new Float32Array(n);\n const a = Math.PI / (n - 1);\n switch (type) {\n case Type.Bartlett: {\n const n2 = (n >> 1) - 1;\n let i = 0;\n for (; i <= n2; ++i) {\n values[i] = 2.0 * i / (n - 1.0);\n }\n for (; i < n; ++i) {\n values[i] = 2.0 - 2.0 * i / (n - 1.0);\n }\n return values;\n }\n case Type.Blackman: {\n const c = 2.0 * a;\n const d = 4.0 * a;\n for (let i = 0; i < n; ++i) {\n values[i] = 0.42323 - 0.49755 * Math.cos(c * i) + 0.07922 * Math.cos(d * i);\n }\n return values;\n }\n case Type.BlackmanHarris: {\n const c = 2.0 * a;\n const d = 4.0 * a;\n const e = 6.0 * a;\n for (let i = 0; i < n; ++i) {\n values[i] = 0.35875 - 0.48829 * Math.cos(c * i) + 0.14128 * Math.cos(d * i) - 0.01168 * Math.cos(e * i);\n }\n return values;\n }\n case Type.Hamming: {\n const c = 2.0 * a;\n for (let i = 0; i < n; ++i) {\n values[i] = 0.54 - 0.46 * Math.cos(c * i);\n }\n return values;\n }\n case Type.Hanning: {\n const c = 2.0 * a;\n for (let i = 0; i < n; ++i) {\n values[i] = 0.5 - 0.5 * Math.cos(c * i);\n }\n return values;\n }\n }\n };\n})(Window || (Window = {}));\n", "const key = Symbol.for(\"@openDAW/lib-dsp\");\nif (globalThis[key]) {\n console.debug(`%c${key.description}%c is already available in ${globalThis.constructor.name}.`, \"color: hsl(10, 83%, 60%)\", \"color: inherit\");\n}\nelse {\n globalThis[key] = true;\n console.debug(`%c${key.description}%c is now available in ${globalThis.constructor.name}.`, \"color: hsl(200, 83%, 60%)\", \"color: inherit\");\n}\nexport * from \"./biquad-coeff\";\nexport * from \"./biquad-processor\";\nexport * from \"./bpm-tools\";\nexport * from \"./chords\";\nexport * from \"./delay\";\nexport * from \"./events\";\nexport * from \"./fft\";\nexport * from \"./fractions\";\nexport * from \"./fragmentor\";\nexport * from \"./graph\";\nexport * from \"./grooves\";\nexport * from \"./midi-keys\";\nexport * from \"./notes\";\nexport * from \"./osc\";\nexport * from \"./ppqn\";\nexport * from \"./ramp\";\nexport * from \"./rms\";\nexport * from \"./stereo\";\nexport * from \"./utils\";\nexport * from \"./value\";\nexport * from \"./window\";\n", "import { RootBox, SelectionBox, UserInterfaceBox, TimelineBox, TrackBox, NoteEventBox, NoteEventRepeatBox, NoteEventCollectionBox, NoteRegionBox, NoteClipBox, ValueEventBox, ValueEventCollectionBox, ValueEventCurveBox, ValueRegionBox, ValueClipBox, AudioRegionBox, AudioClipBox, MarkerBox, AudioFileBox, AudioUnitBox, AudioBusBox, AuxSendBox, StepAutomationBox, GrooveShuffleBox, DeviceInterfaceKnobBox, ModularDeviceBox, DeviceClashBox, StereoToolDeviceBox, DelayDeviceBox, RevampDeviceBox, ReverbDeviceBox, VaporisateurDeviceBox, NanoDeviceBox, PlayfieldDeviceBox, PlayfieldSampleBox, TapeDeviceBox, ArpeggioDeviceBox, PitchDeviceBox, ZeitgeistDeviceBox, ModularBox, ModuleConnectionBox, ModularAudioInputBox, ModularAudioOutputBox, ModuleDelayBox, ModuleMultiplierBox, ModuleGainBox, } from \".\";\nimport { ByteArrayInput, panic, UUID } from \"@opendaw/lib-std\";\n//\n// ___ ___\n// | _ ) _____ _| __|__ _ _ __ _ ___\n// | _ \\/ _ \\ \\ / _/ _ \\ '_/ _` / -_)\n// |___/\\___/_\\_\\_|\\___/_| \\__, \\___|\n// |___/\n//\n// auto-generated | do not edit | blame andre.michelle@opendaw.org\n//\nexport var BoxIO;\n(function (BoxIO) {\n BoxIO.create = (name, graph, uuid, constructor) => {\n switch (name) {\n case \"RootBox\":\n return RootBox.create(graph, uuid, constructor);\n case \"SelectionBox\":\n return SelectionBox.create(graph, uuid, constructor);\n case \"UserInterfaceBox\":\n return UserInterfaceBox.create(graph, uuid, constructor);\n case \"TimelineBox\":\n return TimelineBox.create(graph, uuid, constructor);\n case \"TrackBox\":\n return TrackBox.create(graph, uuid, constructor);\n case \"NoteEventBox\":\n return NoteEventBox.create(graph, uuid, constructor);\n case \"NoteEventRepeatBox\":\n return NoteEventRepeatBox.create(graph, uuid, constructor);\n case \"NoteEventCollectionBox\":\n return NoteEventCollectionBox.create(graph, uuid, constructor);\n case \"NoteRegionBox\":\n return NoteRegionBox.create(graph, uuid, constructor);\n case \"NoteClipBox\":\n return NoteClipBox.create(graph, uuid, constructor);\n case \"ValueEventBox\":\n return ValueEventBox.create(graph, uuid, constructor);\n case \"ValueEventCollectionBox\":\n return ValueEventCollectionBox.create(graph, uuid, constructor);\n case \"ValueEventCurveBox\":\n return ValueEventCurveBox.create(graph, uuid, constructor);\n case \"ValueRegionBox\":\n return ValueRegionBox.create(graph, uuid, constructor);\n case \"ValueClipBox\":\n return ValueClipBox.create(graph, uuid, constructor);\n case \"AudioRegionBox\":\n return AudioRegionBox.create(graph, uuid, constructor);\n case \"AudioClipBox\":\n return AudioClipBox.create(graph, uuid, constructor);\n case \"MarkerBox\":\n return MarkerBox.create(graph, uuid, constructor);\n case \"AudioFileBox\":\n return AudioFileBox.create(graph, uuid, constructor);\n case \"AudioUnitBox\":\n return AudioUnitBox.create(graph, uuid, constructor);\n case \"AudioBusBox\":\n return AudioBusBox.create(graph, uuid, constructor);\n case \"AuxSendBox\":\n return AuxSendBox.create(graph, uuid, constructor);\n case \"StepAutomationBox\":\n return StepAutomationBox.create(graph, uuid, constructor);\n case \"GrooveShuffleBox\":\n return GrooveShuffleBox.create(graph, uuid, constructor);\n case \"DeviceInterfaceKnobBox\":\n return DeviceInterfaceKnobBox.create(graph, uuid, constructor);\n case \"ModularDeviceBox\":\n return ModularDeviceBox.create(graph, uuid, constructor);\n case \"DeviceClashBox\":\n return DeviceClashBox.create(graph, uuid, constructor);\n case \"StereoToolDeviceBox\":\n return StereoToolDeviceBox.create(graph, uuid, constructor);\n case \"DelayDeviceBox\":\n return DelayDeviceBox.create(graph, uuid, constructor);\n case \"RevampDeviceBox\":\n return RevampDeviceBox.create(graph, uuid, constructor);\n case \"ReverbDeviceBox\":\n return ReverbDeviceBox.create(graph, uuid, constructor);\n case \"VaporisateurDeviceBox\":\n return VaporisateurDeviceBox.create(graph, uuid, constructor);\n case \"NanoDeviceBox\":\n return NanoDeviceBox.create(graph, uuid, constructor);\n case \"PlayfieldDeviceBox\":\n return PlayfieldDeviceBox.create(graph, uuid, constructor);\n case \"PlayfieldSampleBox\":\n return PlayfieldSampleBox.create(graph, uuid, constructor);\n case \"TapeDeviceBox\":\n return TapeDeviceBox.create(graph, uuid, constructor);\n case \"ArpeggioDeviceBox\":\n return ArpeggioDeviceBox.create(graph, uuid, constructor);\n case \"PitchDeviceBox\":\n return PitchDeviceBox.create(graph, uuid, constructor);\n case \"ZeitgeistDeviceBox\":\n return ZeitgeistDeviceBox.create(graph, uuid, constructor);\n case \"ModularBox\":\n return ModularBox.create(graph, uuid, constructor);\n case \"ModuleConnectionBox\":\n return ModuleConnectionBox.create(graph, uuid, constructor);\n case \"ModularAudioInputBox\":\n return ModularAudioInputBox.create(graph, uuid, constructor);\n case \"ModularAudioOutputBox\":\n return ModularAudioOutputBox.create(graph, uuid, constructor);\n case \"ModuleDelayBox\":\n return ModuleDelayBox.create(graph, uuid, constructor);\n case \"ModuleMultiplierBox\":\n return ModuleMultiplierBox.create(graph, uuid, constructor);\n case \"ModuleGainBox\":\n return ModuleGainBox.create(graph, uuid, constructor);\n default:\n return panic(`Unknown box class '${name}'`);\n }\n };\n BoxIO.deserialize = (graph, buffer) => {\n const stream = new ByteArrayInput(buffer);\n const className = stream.readString();\n const uuidBytes = UUID.fromDataInput(stream);\n const box = BoxIO.create(className, graph, uuidBytes);\n box.read(stream);\n return box;\n };\n})(BoxIO || (BoxIO = {}));\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, NoPointers, Int32Field, Float32Field, BooleanField, } from \"@opendaw/lib-box\";\nexport class PianoMode extends ObjectField {\n static create(construct) {\n return new PianoMode(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get keyboard() {\n return this.getField(1);\n }\n get timeRangeInQuarters() {\n return this.getField(2);\n }\n get noteScale() {\n return this.getField(3);\n }\n get noteLabels() {\n return this.getField(4);\n }\n get transpose() {\n return this.getField(5);\n }\n initializeFields() {\n return {\n 1: Int32Field.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"keyboard\",\n pointerRules: NoPointers,\n }, 0),\n 2: Float32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"timeRangeInQuarters\",\n pointerRules: NoPointers,\n }, 8),\n 3: Float32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"noteScale\",\n pointerRules: NoPointers,\n }, 1.5),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"noteLabels\",\n pointerRules: NoPointers,\n }, true),\n 5: Int32Field.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"transpose\",\n pointerRules: NoPointers,\n }, 0),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Field, StringField, } from \"@opendaw/lib-box\";\nimport { PianoMode } from \"./PianoMode\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class RootBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new RootBox({ uuid, graph, name: \"RootBox\", pointerRules: NoPointers }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitRootBox, this);\n }\n get timeline() {\n return this.getField(1);\n }\n get users() {\n return this.getField(2);\n }\n get created() {\n return this.getField(3);\n }\n get groove() {\n return this.getField(4);\n }\n get modularSetups() {\n return this.getField(10);\n }\n get audioUnits() {\n return this.getField(20);\n }\n get audioBusses() {\n return this.getField(21);\n }\n get outputDevice() {\n return this.getField(30);\n }\n get pianoMode() {\n return this.getField(40);\n }\n get editingChannel() {\n return this.getField(111);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"timeline\",\n pointerRules: NoPointers,\n }, Pointers.Timeline, true),\n 2: Field.hook({\n parent: this,\n fieldKey: 2,\n fieldName: \"users\",\n pointerRules: { accepts: [Pointers.User], mandatory: true },\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"created\",\n pointerRules: NoPointers,\n }),\n 4: PointerField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"groove\",\n pointerRules: NoPointers,\n }, Pointers.Groove, true),\n 10: Field.hook({\n parent: this,\n fieldKey: 10,\n fieldName: \"modularSetups\",\n pointerRules: { accepts: [Pointers.ModularSetup], mandatory: false },\n }),\n 20: Field.hook({\n parent: this,\n fieldKey: 20,\n fieldName: \"audioUnits\",\n pointerRules: { accepts: [Pointers.AudioUnits], mandatory: false },\n }),\n 21: Field.hook({\n parent: this,\n fieldKey: 21,\n fieldName: \"audioBusses\",\n pointerRules: { accepts: [Pointers.AudioBusses], mandatory: false },\n }),\n 30: Field.hook({\n parent: this,\n fieldKey: 30,\n fieldName: \"outputDevice\",\n pointerRules: { accepts: [Pointers.AudioOutput], mandatory: true },\n }),\n 40: PianoMode.create({\n parent: this,\n fieldKey: 40,\n fieldName: \"pianoMode\",\n pointerRules: NoPointers,\n }),\n 111: PointerField.create({\n parent: this,\n fieldKey: 111,\n fieldName: \"editingChannel\",\n pointerRules: NoPointers,\n }, Pointers.Editing, false),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class SelectionBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new SelectionBox({\n uuid,\n graph,\n name: \"SelectionBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitSelectionBox, this);\n }\n get selection() {\n return this.getField(1);\n }\n get selectable() {\n return this.getField(2);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"selection\",\n pointerRules: NoPointers,\n }, Pointers.Selection, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"selectable\",\n pointerRules: NoPointers,\n }, Pointers.Selection, true),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class UserInterfaceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new UserInterfaceBox({\n uuid,\n graph,\n name: \"UserInterfaceBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitUserInterfaceBox, this);\n }\n get root() {\n return this.getField(1);\n }\n get selection() {\n return this.getField(10);\n }\n get editingDeviceChain() {\n return this.getField(21);\n }\n get editingTimelineRegion() {\n return this.getField(22);\n }\n get editingModularSystem() {\n return this.getField(23);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"root\",\n pointerRules: NoPointers,\n }, Pointers.User, true),\n 10: Field.hook({\n parent: this,\n fieldKey: 10,\n fieldName: \"selection\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }),\n 21: PointerField.create({\n parent: this,\n fieldKey: 21,\n fieldName: \"editingDeviceChain\",\n pointerRules: NoPointers,\n }, Pointers.Editing, false),\n 22: PointerField.create({\n parent: this,\n fieldKey: 22,\n fieldName: \"editingTimelineRegion\",\n pointerRules: NoPointers,\n }, Pointers.Editing, false),\n 23: PointerField.create({\n parent: this,\n fieldKey: 23,\n fieldName: \"editingModularSystem\",\n pointerRules: NoPointers,\n }, Pointers.Editing, false),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, NoPointers, Int32Field, } from \"@opendaw/lib-box\";\nexport class Signature extends ObjectField {\n static create(construct) {\n return new Signature(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get nominator() {\n return this.getField(1);\n }\n get denominator() {\n return this.getField(2);\n }\n initializeFields() {\n return {\n 1: Int32Field.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"nominator\",\n pointerRules: NoPointers,\n }, 4),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"denominator\",\n pointerRules: NoPointers,\n }, 4),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, NoPointers, BooleanField, Int32Field, } from \"@opendaw/lib-box\";\nexport class LoopArea extends ObjectField {\n static create(construct) {\n return new LoopArea(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get enabled() {\n return this.getField(1);\n }\n get from() {\n return this.getField(2);\n }\n get to() {\n return this.getField(3);\n }\n initializeFields() {\n return {\n 1: BooleanField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"from\",\n pointerRules: NoPointers,\n }, 0),\n 3: Int32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"to\",\n pointerRules: NoPointers,\n }, 15360),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, NoPointers, Field, Int32Field, BooleanField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class MarkerTrack extends ObjectField {\n static create(construct) {\n return new MarkerTrack(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get markers() {\n return this.getField(1);\n }\n get index() {\n return this.getField(10);\n }\n get enabled() {\n return this.getField(20);\n }\n initializeFields() {\n return {\n 1: Field.hook({\n parent: this,\n fieldKey: 1,\n fieldName: \"markers\",\n pointerRules: { accepts: [Pointers.MarkerTrack], mandatory: false },\n }),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 20: BooleanField.create({\n parent: this,\n fieldKey: 20,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, Field, Int32Field, Float32Field, } from \"@opendaw/lib-box\";\nimport { Signature } from \"./Signature\";\nimport { LoopArea } from \"./LoopArea\";\nimport { MarkerTrack } from \"./MarkerTrack\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class TimelineBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new TimelineBox({\n uuid,\n graph,\n name: \"TimelineBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitTimelineBox, this);\n }\n get root() {\n return this.getField(1);\n }\n get signature() {\n return this.getField(10);\n }\n get loopArea() {\n return this.getField(11);\n }\n get deprecatedMarkerTrack() {\n return this.getField(20);\n }\n get markerTrack() {\n return this.getField(21);\n }\n get durationInPulses() {\n return this.getField(30);\n }\n get bpm() {\n return this.getField(31);\n }\n initializeFields() {\n return {\n 1: Field.hook({\n parent: this,\n fieldKey: 1,\n fieldName: \"root\",\n pointerRules: { accepts: [Pointers.Timeline], mandatory: true },\n }),\n 10: Signature.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"signature\",\n pointerRules: NoPointers,\n }),\n 11: LoopArea.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"loopArea\",\n pointerRules: NoPointers,\n }),\n 20: Field.hook({\n parent: this,\n fieldKey: 20,\n fieldName: \"deprecatedMarkerTrack\",\n pointerRules: { accepts: [Pointers.MarkerTrack], mandatory: false },\n }),\n 21: MarkerTrack.create({\n parent: this,\n fieldKey: 21,\n fieldName: \"markerTrack\",\n pointerRules: NoPointers,\n }),\n 30: Int32Field.create({\n parent: this,\n fieldKey: 30,\n fieldName: \"durationInPulses\",\n pointerRules: NoPointers,\n }, 491520),\n 31: Float32Field.create({\n parent: this,\n fieldKey: 31,\n fieldName: \"bpm\",\n pointerRules: NoPointers,\n }, 120),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Field, Int32Field, BooleanField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class TrackBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new TrackBox({\n uuid,\n graph,\n name: \"TrackBox\",\n pointerRules: {\n accepts: [Pointers.Selection, Pointers.PianoMode],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitTrackBox, this);\n }\n get tracks() {\n return this.getField(1);\n }\n get target() {\n return this.getField(2);\n }\n get regions() {\n return this.getField(3);\n }\n get clips() {\n return this.getField(4);\n }\n get index() {\n return this.getField(10);\n }\n get type() {\n return this.getField(11);\n }\n get enabled() {\n return this.getField(20);\n }\n get excludePianoMode() {\n return this.getField(30);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"tracks\",\n pointerRules: NoPointers,\n }, Pointers.TrackCollection, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"target\",\n pointerRules: NoPointers,\n }, Pointers.Automation, true),\n 3: Field.hook({\n parent: this,\n fieldKey: 3,\n fieldName: \"regions\",\n pointerRules: {\n accepts: [Pointers.RegionCollection],\n mandatory: false,\n },\n }),\n 4: Field.hook({\n parent: this,\n fieldKey: 4,\n fieldName: \"clips\",\n pointerRules: { accepts: [Pointers.ClipCollection], mandatory: false },\n }),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"type\",\n pointerRules: NoPointers,\n }),\n 20: BooleanField.create({\n parent: this,\n fieldKey: 20,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 30: BooleanField.create({\n parent: this,\n fieldKey: 30,\n fieldName: \"excludePianoMode\",\n pointerRules: NoPointers,\n }, false),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class NoteEventBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new NoteEventBox({\n uuid,\n graph,\n name: \"NoteEventBox\",\n pointerRules: {\n accepts: [Pointers.Selection, Pointers.NoteEventFeature],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitNoteEventBox, this);\n }\n get events() {\n return this.getField(1);\n }\n get position() {\n return this.getField(10);\n }\n get duration() {\n return this.getField(11);\n }\n get pitch() {\n return this.getField(20);\n }\n get velocity() {\n return this.getField(21);\n }\n get playCount() {\n return this.getField(22);\n }\n get playCurve() {\n return this.getField(23);\n }\n get cent() {\n return this.getField(24);\n }\n get chance() {\n return this.getField(25);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"events\",\n pointerRules: NoPointers,\n }, Pointers.NoteEvents, true),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"position\",\n pointerRules: NoPointers,\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"duration\",\n pointerRules: NoPointers,\n }, 240),\n 20: Int32Field.create({\n parent: this,\n fieldKey: 20,\n fieldName: \"pitch\",\n pointerRules: NoPointers,\n }, 60),\n 21: Float32Field.create({\n parent: this,\n fieldKey: 21,\n fieldName: \"velocity\",\n pointerRules: NoPointers,\n }, 0.7874015748031497),\n 22: Int32Field.create({\n parent: this,\n fieldKey: 22,\n fieldName: \"playCount\",\n pointerRules: NoPointers,\n }, 1),\n 23: Float32Field.create({\n parent: this,\n fieldKey: 23,\n fieldName: \"playCurve\",\n pointerRules: NoPointers,\n }, 0),\n 24: Float32Field.create({\n parent: this,\n fieldKey: 24,\n fieldName: \"cent\",\n pointerRules: NoPointers,\n }, 0),\n 25: Int32Field.create({\n parent: this,\n fieldKey: 25,\n fieldName: \"chance\",\n pointerRules: NoPointers,\n }, 100),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class NoteEventRepeatBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new NoteEventRepeatBox({\n uuid,\n graph,\n name: \"NoteEventRepeatBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitNoteEventRepeatBox, this);\n }\n get event() {\n return this.getField(1);\n }\n get count() {\n return this.getField(2);\n }\n get curve() {\n return this.getField(3);\n }\n get length() {\n return this.getField(4);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"event\",\n pointerRules: NoPointers,\n }, Pointers.NoteEventFeature, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"count\",\n pointerRules: NoPointers,\n }, 1),\n 3: Float32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"curve\",\n pointerRules: NoPointers,\n }, 0),\n 4: Float32Field.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"length\",\n pointerRules: NoPointers,\n }, 1),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, Field } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class NoteEventCollectionBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new NoteEventCollectionBox({\n uuid,\n graph,\n name: \"NoteEventCollectionBox\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitNoteEventCollectionBox, this);\n }\n get events() {\n return this.getField(1);\n }\n get owners() {\n return this.getField(2);\n }\n initializeFields() {\n return {\n 1: Field.hook({\n parent: this,\n fieldKey: 1,\n fieldName: \"events\",\n pointerRules: { accepts: [Pointers.NoteEvents], mandatory: false },\n }),\n 2: Field.hook({\n parent: this,\n fieldKey: 2,\n fieldName: \"owners\",\n pointerRules: {\n accepts: [Pointers.NoteEventCollection],\n mandatory: true,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, BooleanField, StringField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class NoteRegionBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new NoteRegionBox({\n uuid,\n graph,\n name: \"NoteRegionBox\",\n pointerRules: {\n accepts: [Pointers.Selection, Pointers.Editing],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitNoteRegionBox, this);\n }\n get regions() {\n return this.getField(1);\n }\n get events() {\n return this.getField(2);\n }\n get position() {\n return this.getField(10);\n }\n get duration() {\n return this.getField(11);\n }\n get loopOffset() {\n return this.getField(12);\n }\n get loopDuration() {\n return this.getField(13);\n }\n get eventOffset() {\n return this.getField(14);\n }\n get mute() {\n return this.getField(15);\n }\n get label() {\n return this.getField(16);\n }\n get hue() {\n return this.getField(17);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"regions\",\n pointerRules: NoPointers,\n }, Pointers.RegionCollection, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"events\",\n pointerRules: NoPointers,\n }, Pointers.NoteEventCollection, true),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"position\",\n pointerRules: NoPointers,\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"duration\",\n pointerRules: NoPointers,\n }),\n 12: Int32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"loopOffset\",\n pointerRules: NoPointers,\n }),\n 13: Int32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"loopDuration\",\n pointerRules: NoPointers,\n }),\n 14: Int32Field.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"eventOffset\",\n pointerRules: NoPointers,\n }),\n 15: BooleanField.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"mute\",\n pointerRules: NoPointers,\n }),\n 16: StringField.create({\n parent: this,\n fieldKey: 16,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 17: Int32Field.create({\n parent: this,\n fieldKey: 17,\n fieldName: \"hue\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, NoPointers, BooleanField, Int32Field, } from \"@opendaw/lib-box\";\nexport class ClipPlaybackFields extends ObjectField {\n static create(construct) {\n return new ClipPlaybackFields(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get loop() {\n return this.getField(1);\n }\n get reverse() {\n return this.getField(2);\n }\n get mute() {\n return this.getField(3);\n }\n get speed() {\n return this.getField(4);\n }\n get quantise() {\n return this.getField(5);\n }\n get trigger() {\n return this.getField(6);\n }\n initializeFields() {\n return {\n 1: BooleanField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"loop\",\n pointerRules: NoPointers,\n }, true),\n 2: BooleanField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"reverse\",\n pointerRules: NoPointers,\n }),\n 3: BooleanField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"mute\",\n pointerRules: NoPointers,\n }),\n 4: Int32Field.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"speed\",\n pointerRules: NoPointers,\n }),\n 5: Int32Field.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"quantise\",\n pointerRules: NoPointers,\n }),\n 6: Int32Field.create({\n parent: this,\n fieldKey: 6,\n fieldName: \"trigger\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, BooleanField, StringField, } from \"@opendaw/lib-box\";\nimport { ClipPlaybackFields } from \"./ClipPlaybackFields\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class NoteClipBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new NoteClipBox({\n uuid,\n graph,\n name: \"NoteClipBox\",\n pointerRules: {\n accepts: [Pointers.Selection, Pointers.Editing],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitNoteClipBox, this);\n }\n get clips() {\n return this.getField(1);\n }\n get events() {\n return this.getField(2);\n }\n get index() {\n return this.getField(3);\n }\n get playback() {\n return this.getField(4);\n }\n get duration() {\n return this.getField(10);\n }\n get mute() {\n return this.getField(11);\n }\n get label() {\n return this.getField(12);\n }\n get hue() {\n return this.getField(13);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"clips\",\n pointerRules: NoPointers,\n }, Pointers.ClipCollection, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"events\",\n pointerRules: NoPointers,\n }, Pointers.NoteEventCollection, true),\n 3: Int32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 4: ClipPlaybackFields.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"playback\",\n pointerRules: NoPointers,\n }),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"duration\",\n pointerRules: NoPointers,\n }),\n 11: BooleanField.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"mute\",\n pointerRules: NoPointers,\n }),\n 12: StringField.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 13: Int32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"hue\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ValueEventBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ValueEventBox({\n uuid,\n graph,\n name: \"ValueEventBox\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitValueEventBox, this);\n }\n get events() {\n return this.getField(1);\n }\n get position() {\n return this.getField(10);\n }\n get index() {\n return this.getField(11);\n }\n get interpolation() {\n return this.getField(12);\n }\n get value() {\n return this.getField(13);\n }\n get slope() {\n return this.getField(14);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"events\",\n pointerRules: NoPointers,\n }, Pointers.ValueEvents, true),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"position\",\n pointerRules: NoPointers,\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 12: Int32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"interpolation\",\n pointerRules: {\n accepts: [Pointers.ValueInterpolation],\n mandatory: false,\n },\n }, 1),\n 13: Float32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"value\",\n pointerRules: NoPointers,\n }),\n 14: Float32Field.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"slope\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, Field } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ValueEventCollectionBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ValueEventCollectionBox({\n uuid,\n graph,\n name: \"ValueEventCollectionBox\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitValueEventCollectionBox, this);\n }\n get events() {\n return this.getField(1);\n }\n get owners() {\n return this.getField(2);\n }\n initializeFields() {\n return {\n 1: Field.hook({\n parent: this,\n fieldKey: 1,\n fieldName: \"events\",\n pointerRules: { accepts: [Pointers.ValueEvents], mandatory: false },\n }),\n 2: Field.hook({\n parent: this,\n fieldKey: 2,\n fieldName: \"owners\",\n pointerRules: {\n accepts: [Pointers.ValueEventCollection],\n mandatory: true,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ValueEventCurveBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ValueEventCurveBox({\n uuid,\n graph,\n name: \"ValueEventCurveBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitValueEventCurveBox, this);\n }\n get event() {\n return this.getField(1);\n }\n get slope() {\n return this.getField(2);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"event\",\n pointerRules: NoPointers,\n }, Pointers.ValueInterpolation, true),\n 2: Float32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"slope\",\n pointerRules: NoPointers,\n }, 0.5),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, BooleanField, StringField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ValueRegionBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ValueRegionBox({\n uuid,\n graph,\n name: \"ValueRegionBox\",\n pointerRules: {\n accepts: [Pointers.Selection, Pointers.Editing],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitValueRegionBox, this);\n }\n get regions() {\n return this.getField(1);\n }\n get events() {\n return this.getField(2);\n }\n get position() {\n return this.getField(10);\n }\n get duration() {\n return this.getField(11);\n }\n get loopOffset() {\n return this.getField(12);\n }\n get loopDuration() {\n return this.getField(13);\n }\n get mute() {\n return this.getField(14);\n }\n get label() {\n return this.getField(15);\n }\n get hue() {\n return this.getField(16);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"regions\",\n pointerRules: NoPointers,\n }, Pointers.RegionCollection, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"events\",\n pointerRules: NoPointers,\n }, Pointers.ValueEventCollection, true),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"position\",\n pointerRules: NoPointers,\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"duration\",\n pointerRules: NoPointers,\n }),\n 12: Int32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"loopOffset\",\n pointerRules: NoPointers,\n }),\n 13: Int32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"loopDuration\",\n pointerRules: NoPointers,\n }),\n 14: BooleanField.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"mute\",\n pointerRules: NoPointers,\n }),\n 15: StringField.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 16: Int32Field.create({\n parent: this,\n fieldKey: 16,\n fieldName: \"hue\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, BooleanField, StringField, } from \"@opendaw/lib-box\";\nimport { ClipPlaybackFields } from \"./ClipPlaybackFields\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ValueClipBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ValueClipBox({\n uuid,\n graph,\n name: \"ValueClipBox\",\n pointerRules: {\n accepts: [Pointers.Selection, Pointers.Editing],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitValueClipBox, this);\n }\n get clips() {\n return this.getField(1);\n }\n get events() {\n return this.getField(2);\n }\n get index() {\n return this.getField(3);\n }\n get playback() {\n return this.getField(4);\n }\n get duration() {\n return this.getField(10);\n }\n get mute() {\n return this.getField(11);\n }\n get label() {\n return this.getField(12);\n }\n get hue() {\n return this.getField(13);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"clips\",\n pointerRules: NoPointers,\n }, Pointers.ClipCollection, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"events\",\n pointerRules: NoPointers,\n }, Pointers.ValueEventCollection, true),\n 3: Int32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 4: ClipPlaybackFields.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"playback\",\n pointerRules: NoPointers,\n }),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"duration\",\n pointerRules: NoPointers,\n }),\n 11: BooleanField.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"mute\",\n pointerRules: NoPointers,\n }),\n 12: StringField.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 13: Int32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"hue\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, BooleanField, StringField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class AudioRegionBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new AudioRegionBox({\n uuid,\n graph,\n name: \"AudioRegionBox\",\n pointerRules: {\n accepts: [Pointers.Selection, Pointers.Editing],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitAudioRegionBox, this);\n }\n get regions() {\n return this.getField(1);\n }\n get file() {\n return this.getField(2);\n }\n get position() {\n return this.getField(10);\n }\n get duration() {\n return this.getField(11);\n }\n get loopOffset() {\n return this.getField(12);\n }\n get loopDuration() {\n return this.getField(13);\n }\n get mute() {\n return this.getField(14);\n }\n get label() {\n return this.getField(15);\n }\n get hue() {\n return this.getField(16);\n }\n get gain() {\n return this.getField(17);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"regions\",\n pointerRules: NoPointers,\n }, Pointers.RegionCollection, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"file\",\n pointerRules: NoPointers,\n }, Pointers.AudioFile, true),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"position\",\n pointerRules: NoPointers,\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"duration\",\n pointerRules: NoPointers,\n }),\n 12: Int32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"loopOffset\",\n pointerRules: NoPointers,\n }),\n 13: Int32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"loopDuration\",\n pointerRules: NoPointers,\n }),\n 14: BooleanField.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"mute\",\n pointerRules: NoPointers,\n }),\n 15: StringField.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 16: Int32Field.create({\n parent: this,\n fieldKey: 16,\n fieldName: \"hue\",\n pointerRules: NoPointers,\n }),\n 17: Float32Field.create({\n parent: this,\n fieldKey: 17,\n fieldName: \"gain\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, BooleanField, StringField, Float32Field, } from \"@opendaw/lib-box\";\nimport { ClipPlaybackFields } from \"./ClipPlaybackFields\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class AudioClipBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new AudioClipBox({\n uuid,\n graph,\n name: \"AudioClipBox\",\n pointerRules: {\n accepts: [Pointers.Selection, Pointers.Editing],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitAudioClipBox, this);\n }\n get clips() {\n return this.getField(1);\n }\n get file() {\n return this.getField(2);\n }\n get index() {\n return this.getField(3);\n }\n get playback() {\n return this.getField(4);\n }\n get duration() {\n return this.getField(10);\n }\n get mute() {\n return this.getField(11);\n }\n get label() {\n return this.getField(12);\n }\n get hue() {\n return this.getField(13);\n }\n get gain() {\n return this.getField(14);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"clips\",\n pointerRules: NoPointers,\n }, Pointers.ClipCollection, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"file\",\n pointerRules: NoPointers,\n }, Pointers.AudioFile, true),\n 3: Int32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 4: ClipPlaybackFields.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"playback\",\n pointerRules: NoPointers,\n }),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"duration\",\n pointerRules: NoPointers,\n }),\n 11: BooleanField.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"mute\",\n pointerRules: NoPointers,\n }),\n 12: StringField.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 13: Int32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"hue\",\n pointerRules: NoPointers,\n }),\n 14: Float32Field.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"gain\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, StringField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class MarkerBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new MarkerBox({\n uuid,\n graph,\n name: \"MarkerBox\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitMarkerBox, this);\n }\n get track() {\n return this.getField(1);\n }\n get position() {\n return this.getField(2);\n }\n get plays() {\n return this.getField(3);\n }\n get label() {\n return this.getField(4);\n }\n get hue() {\n return this.getField(5);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"track\",\n pointerRules: NoPointers,\n }, Pointers.MarkerTrack, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"position\",\n pointerRules: NoPointers,\n }),\n 3: Int32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"plays\",\n pointerRules: NoPointers,\n }, 1),\n 4: StringField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 5: Int32Field.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"hue\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, Int32Field, StringField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class AudioFileBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new AudioFileBox({\n uuid,\n graph,\n name: \"AudioFileBox\",\n pointerRules: { accepts: [Pointers.AudioFile], mandatory: true },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitAudioFileBox, this);\n }\n get startInSeconds() {\n return this.getField(1);\n }\n get endInSeconds() {\n return this.getField(2);\n }\n get fileName() {\n return this.getField(3);\n }\n initializeFields() {\n return {\n 1: Int32Field.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"startInSeconds\",\n pointerRules: NoPointers,\n }),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"endInSeconds\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"fileName\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, StringField, PointerField, Field, Int32Field, Float32Field, BooleanField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class AudioUnitBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new AudioUnitBox({\n uuid,\n graph,\n name: \"AudioUnitBox\",\n pointerRules: {\n accepts: [Pointers.Selection, Pointers.Automation],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitAudioUnitBox, this);\n }\n get type() {\n return this.getField(1);\n }\n get collection() {\n return this.getField(2);\n }\n get editing() {\n return this.getField(3);\n }\n get index() {\n return this.getField(11);\n }\n get volume() {\n return this.getField(12);\n }\n get panning() {\n return this.getField(13);\n }\n get mute() {\n return this.getField(14);\n }\n get solo() {\n return this.getField(15);\n }\n get tracks() {\n return this.getField(20);\n }\n get midiEffects() {\n return this.getField(21);\n }\n get input() {\n return this.getField(22);\n }\n get audioEffects() {\n return this.getField(23);\n }\n get auxSends() {\n return this.getField(24);\n }\n get output() {\n return this.getField(25);\n }\n initializeFields() {\n return {\n 1: StringField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"type\",\n pointerRules: NoPointers,\n }, \"instrument\"),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"collection\",\n pointerRules: NoPointers,\n }, Pointers.AudioUnits, true),\n 3: Field.hook({\n parent: this,\n fieldKey: 3,\n fieldName: \"editing\",\n pointerRules: { accepts: [Pointers.Editing], mandatory: false },\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 12: Float32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"volume\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 13: Float32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"panning\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 14: BooleanField.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"mute\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 15: BooleanField.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"solo\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 20: Field.hook({\n parent: this,\n fieldKey: 20,\n fieldName: \"tracks\",\n pointerRules: { accepts: [Pointers.TrackCollection], mandatory: false },\n }),\n 21: Field.hook({\n parent: this,\n fieldKey: 21,\n fieldName: \"midiEffects\",\n pointerRules: { accepts: [Pointers.MidiEffectHost], mandatory: false },\n }),\n 22: Field.hook({\n parent: this,\n fieldKey: 22,\n fieldName: \"input\",\n pointerRules: {\n accepts: [Pointers.InstrumentHost, Pointers.AudioOutput],\n mandatory: false,\n },\n }),\n 23: Field.hook({\n parent: this,\n fieldKey: 23,\n fieldName: \"audioEffects\",\n pointerRules: { accepts: [Pointers.AudioEffectHost], mandatory: false },\n }),\n 24: Field.hook({\n parent: this,\n fieldKey: 24,\n fieldName: \"auxSends\",\n pointerRules: { accepts: [Pointers.AuxSend], mandatory: false },\n }),\n 25: PointerField.create({\n parent: this,\n fieldKey: 25,\n fieldName: \"output\",\n pointerRules: NoPointers,\n }, Pointers.AudioOutput, false),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Field, BooleanField, StringField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class AudioBusBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new AudioBusBox({\n uuid,\n graph,\n name: \"AudioBusBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitAudioBusBox, this);\n }\n get collection() {\n return this.getField(1);\n }\n get output() {\n return this.getField(2);\n }\n get input() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get icon() {\n return this.getField(5);\n }\n get label() {\n return this.getField(6);\n }\n get color() {\n return this.getField(7);\n }\n get minimized() {\n return this.getField(8);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"collection\",\n pointerRules: NoPointers,\n }, Pointers.AudioBusses, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"output\",\n pointerRules: NoPointers,\n }, Pointers.AudioOutput, true),\n 3: Field.hook({\n parent: this,\n fieldKey: 3,\n fieldName: \"input\",\n pointerRules: { accepts: [Pointers.AudioOutput], mandatory: false },\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: StringField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"icon\",\n pointerRules: NoPointers,\n }),\n 6: StringField.create({\n parent: this,\n fieldKey: 6,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 7: StringField.create({\n parent: this,\n fieldKey: 7,\n fieldName: \"color\",\n pointerRules: NoPointers,\n }, \"red\"),\n 8: BooleanField.create({\n parent: this,\n fieldKey: 8,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class AuxSendBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new AuxSendBox({\n uuid,\n graph,\n name: \"AuxSendBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitAuxSendBox, this);\n }\n get audioUnit() {\n return this.getField(1);\n }\n get targetBus() {\n return this.getField(2);\n }\n get index() {\n return this.getField(3);\n }\n get routing() {\n return this.getField(4);\n }\n get sendGain() {\n return this.getField(5);\n }\n get sendPan() {\n return this.getField(6);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"audioUnit\",\n pointerRules: NoPointers,\n }, Pointers.AuxSend, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"targetBus\",\n pointerRules: NoPointers,\n }, Pointers.AudioOutput, true),\n 3: Int32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 4: Int32Field.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"routing\",\n pointerRules: NoPointers,\n }),\n 5: Float32Field.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"sendGain\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 6: Float32Field.create({\n parent: this,\n fieldKey: 6,\n fieldName: \"sendPan\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class StepAutomationBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new StepAutomationBox({\n uuid,\n graph,\n name: \"StepAutomationBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitStepAutomationBox, this);\n }\n get step() {\n return this.getField(1);\n }\n get parameter() {\n return this.getField(2);\n }\n get value() {\n return this.getField(3);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"step\",\n pointerRules: NoPointers,\n }, Pointers.StepAutomation, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"parameter\",\n pointerRules: NoPointers,\n }, Pointers.StepAutomation, true),\n 3: Float32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"value\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, StringField, Float32Field, Int32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class GrooveShuffleBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new GrooveShuffleBox({\n uuid,\n graph,\n name: \"GrooveShuffleBox\",\n pointerRules: { accepts: [Pointers.Groove], mandatory: true },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitGrooveShuffleBox, this);\n }\n get label() {\n return this.getField(1);\n }\n get amount() {\n return this.getField(10);\n }\n get duration() {\n return this.getField(11);\n }\n initializeFields() {\n return {\n 1: StringField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"amount\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0.6),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"duration\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 480),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, Float32Field, StringField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class DeviceInterfaceKnobBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new DeviceInterfaceKnobBox({\n uuid,\n graph,\n name: \"DeviceInterfaceKnobBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitDeviceInterfaceKnobBox, this);\n }\n get userInterface() {\n return this.getField(1);\n }\n get parameter() {\n return this.getField(2);\n }\n get index() {\n return this.getField(3);\n }\n get anchor() {\n return this.getField(10);\n }\n get color() {\n return this.getField(11);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"userInterface\",\n pointerRules: NoPointers,\n }, Pointers.DeviceUserInterface, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"parameter\",\n pointerRules: NoPointers,\n }, Pointers.ParameterController, true),\n 3: Int32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"anchor\",\n pointerRules: NoPointers,\n }),\n 11: StringField.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"color\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class DeviceUserInterface extends ObjectField {\n static create(construct) {\n return new DeviceUserInterface(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get elements() {\n return this.getField(1);\n }\n initializeFields() {\n return {\n 1: Field.hook({\n parent: this,\n fieldKey: 1,\n fieldName: \"elements\",\n pointerRules: {\n accepts: [Pointers.DeviceUserInterface],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, StringField, BooleanField, } from \"@opendaw/lib-box\";\nimport { DeviceUserInterface } from \"./DeviceUserInterface\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ModularDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ModularDeviceBox({\n uuid,\n graph,\n name: \"ModularDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitModularDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get index() {\n return this.getField(2);\n }\n get label() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get modularSetup() {\n return this.getField(10);\n }\n get userInterface() {\n return this.getField(11);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.AudioEffectHost, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: PointerField.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"modularSetup\",\n pointerRules: NoPointers,\n }, Pointers.ModularSetup, true),\n 11: DeviceUserInterface.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"userInterface\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, BooleanField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ClashStep extends ObjectField {\n static create(construct) {\n return new ClashStep(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get active() {\n return this.getField(1);\n }\n initializeFields() {\n return {\n 1: BooleanField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"active\",\n pointerRules: { accepts: [Pointers.StepAutomation], mandatory: false },\n }),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, NoPointers, ArrayField, Int32Field, } from \"@opendaw/lib-box\";\nimport { ClashStep } from \"./ClashStep\";\nexport class ClashPattern extends ObjectField {\n static create(construct) {\n return new ClashPattern(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get steps() {\n return this.getField(10);\n }\n get length() {\n return this.getField(11);\n }\n get scale() {\n return this.getField(12);\n }\n initializeFields() {\n return {\n 10: ArrayField.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"steps\",\n pointerRules: NoPointers,\n }, (construct) => ClashStep.create(construct), 128),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"length\",\n pointerRules: NoPointers,\n }, 16),\n 12: Int32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"scale\",\n pointerRules: NoPointers,\n }, 960),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, StringField, BooleanField, Float32Field, ArrayField, } from \"@opendaw/lib-box\";\nimport { ClashPattern } from \"./ClashPattern\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class DeviceClashBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new DeviceClashBox({\n uuid,\n graph,\n name: \"DeviceClashBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitDeviceClashBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get label() {\n return this.getField(2);\n }\n get icon() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get delay() {\n return this.getField(10);\n }\n get feedback() {\n return this.getField(11);\n }\n get cross() {\n return this.getField(12);\n }\n get filter() {\n return this.getField(13);\n }\n get wet() {\n return this.getField(14);\n }\n get dry() {\n return this.getField(15);\n }\n get patterns() {\n return this.getField(30);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.InstrumentHost, true),\n 2: StringField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"icon\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"delay\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.StepAutomation,\n ],\n mandatory: false,\n },\n }, 0.5),\n 11: Float32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"feedback\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.StepAutomation,\n ],\n mandatory: false,\n },\n }, 0.9),\n 12: Float32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"cross\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.StepAutomation,\n ],\n mandatory: false,\n },\n }, 0),\n 13: Float32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"filter\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.StepAutomation,\n ],\n mandatory: false,\n },\n }, 0),\n 14: Float32Field.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"wet\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.StepAutomation,\n ],\n mandatory: false,\n },\n }, -3),\n 15: Float32Field.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"dry\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.StepAutomation,\n ],\n mandatory: false,\n },\n }, -3),\n 30: ArrayField.create({\n parent: this,\n fieldKey: 30,\n fieldName: \"patterns\",\n pointerRules: NoPointers,\n }, (construct) => ClashPattern.create(construct), 16),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, StringField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class StereoToolDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new StereoToolDeviceBox({\n uuid,\n graph,\n name: \"StereoToolDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitStereoToolDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get index() {\n return this.getField(2);\n }\n get label() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get volume() {\n return this.getField(10);\n }\n get panning() {\n return this.getField(11);\n }\n get stereo() {\n return this.getField(12);\n }\n get invertL() {\n return this.getField(13);\n }\n get invertR() {\n return this.getField(14);\n }\n get swap() {\n return this.getField(15);\n }\n get panningMixing() {\n return this.getField(20);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.AudioEffectHost, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"volume\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 11: Float32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"panning\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 12: Float32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"stereo\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 13: BooleanField.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"invertL\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 14: BooleanField.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"invertR\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 15: BooleanField.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"swap\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 20: Int32Field.create({\n parent: this,\n fieldKey: 20,\n fieldName: \"panningMixing\",\n pointerRules: NoPointers,\n }, 1),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, StringField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class DelayDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new DelayDeviceBox({\n uuid,\n graph,\n name: \"DelayDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitDelayDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get index() {\n return this.getField(2);\n }\n get label() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get delay() {\n return this.getField(10);\n }\n get feedback() {\n return this.getField(11);\n }\n get cross() {\n return this.getField(12);\n }\n get filter() {\n return this.getField(13);\n }\n get wet() {\n return this.getField(14);\n }\n get dry() {\n return this.getField(15);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.AudioEffectHost, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"delay\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 4),\n 11: Float32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"feedback\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0.5),\n 12: Float32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"cross\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0),\n 13: Float32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"filter\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0),\n 14: Float32Field.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"wet\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, -6),\n 15: Float32Field.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"dry\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, BooleanField, Float32Field, Int32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class RevampPass extends ObjectField {\n static create(construct) {\n return new RevampPass(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get enabled() {\n return this.getField(1);\n }\n get frequency() {\n return this.getField(10);\n }\n get order() {\n return this.getField(11);\n }\n get q() {\n return this.getField(12);\n }\n initializeFields() {\n return {\n 1: BooleanField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"enabled\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"frequency\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"order\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 12: Float32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"q\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class RevampShelf extends ObjectField {\n static create(construct) {\n return new RevampShelf(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get enabled() {\n return this.getField(1);\n }\n get frequency() {\n return this.getField(10);\n }\n get gain() {\n return this.getField(11);\n }\n initializeFields() {\n return {\n 1: BooleanField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"enabled\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"frequency\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 11: Float32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"gain\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class RevampBell extends ObjectField {\n static create(construct) {\n return new RevampBell(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get enabled() {\n return this.getField(1);\n }\n get frequency() {\n return this.getField(10);\n }\n get gain() {\n return this.getField(11);\n }\n get q() {\n return this.getField(12);\n }\n initializeFields() {\n return {\n 1: BooleanField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"enabled\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"frequency\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 11: Float32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"gain\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 12: Float32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"q\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, StringField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { RevampPass } from \"./RevampPass\";\nimport { RevampShelf } from \"./RevampShelf\";\nimport { RevampBell } from \"./RevampBell\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class RevampDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new RevampDeviceBox({\n uuid,\n graph,\n name: \"RevampDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitRevampDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get index() {\n return this.getField(2);\n }\n get label() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get highPass() {\n return this.getField(10);\n }\n get lowShelf() {\n return this.getField(11);\n }\n get lowBell() {\n return this.getField(12);\n }\n get midBell() {\n return this.getField(13);\n }\n get highBell() {\n return this.getField(14);\n }\n get highShelf() {\n return this.getField(15);\n }\n get lowPass() {\n return this.getField(16);\n }\n get gain() {\n return this.getField(17);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.AudioEffectHost, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: RevampPass.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"highPass\",\n pointerRules: NoPointers,\n }),\n 11: RevampShelf.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"lowShelf\",\n pointerRules: NoPointers,\n }),\n 12: RevampBell.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"lowBell\",\n pointerRules: NoPointers,\n }),\n 13: RevampBell.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"midBell\",\n pointerRules: NoPointers,\n }),\n 14: RevampBell.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"highBell\",\n pointerRules: NoPointers,\n }),\n 15: RevampShelf.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"highShelf\",\n pointerRules: NoPointers,\n }),\n 16: RevampPass.create({\n parent: this,\n fieldKey: 16,\n fieldName: \"lowPass\",\n pointerRules: NoPointers,\n }),\n 17: Float32Field.create({\n parent: this,\n fieldKey: 17,\n fieldName: \"gain\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, StringField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ReverbDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ReverbDeviceBox({\n uuid,\n graph,\n name: \"ReverbDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitReverbDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get index() {\n return this.getField(2);\n }\n get label() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get decay() {\n return this.getField(10);\n }\n get preDelay() {\n return this.getField(11);\n }\n get damp() {\n return this.getField(12);\n }\n get filter() {\n return this.getField(13);\n }\n get wet() {\n return this.getField(14);\n }\n get dry() {\n return this.getField(15);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.AudioEffectHost, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"decay\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0.5),\n 11: Float32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"preDelay\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0),\n 12: Float32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"damp\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0.5),\n 13: Float32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"filter\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0),\n 14: Float32Field.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"wet\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, -3),\n 15: Float32Field.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"dry\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, StringField, BooleanField, Float32Field, Int32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class VaporisateurDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new VaporisateurDeviceBox({\n uuid,\n graph,\n name: \"VaporisateurDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitVaporisateurDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get label() {\n return this.getField(2);\n }\n get icon() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get volume() {\n return this.getField(10);\n }\n get octave() {\n return this.getField(11);\n }\n get tune() {\n return this.getField(12);\n }\n get waveform() {\n return this.getField(13);\n }\n get cutoff() {\n return this.getField(14);\n }\n get resonance() {\n return this.getField(15);\n }\n get attack() {\n return this.getField(16);\n }\n get release() {\n return this.getField(17);\n }\n get filterEnvelope() {\n return this.getField(18);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.InstrumentHost, true),\n 2: StringField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"icon\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"volume\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"octave\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 12: Float32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"tune\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 13: Int32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"waveform\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 14: Float32Field.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"cutoff\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 15: Float32Field.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"resonance\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 16: Float32Field.create({\n parent: this,\n fieldKey: 16,\n fieldName: \"attack\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 17: Float32Field.create({\n parent: this,\n fieldKey: 17,\n fieldName: \"release\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 18: Float32Field.create({\n parent: this,\n fieldKey: 18,\n fieldName: \"filterEnvelope\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, StringField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class NanoDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new NanoDeviceBox({\n uuid,\n graph,\n name: \"NanoDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitNanoDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get label() {\n return this.getField(2);\n }\n get icon() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get volume() {\n return this.getField(10);\n }\n get file() {\n return this.getField(15);\n }\n get release() {\n return this.getField(20);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.InstrumentHost, true),\n 2: StringField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"icon\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"volume\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, -3),\n 15: PointerField.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"file\",\n pointerRules: NoPointers,\n }, Pointers.AudioFile, false),\n 20: Float32Field.create({\n parent: this,\n fieldKey: 20,\n fieldName: \"release\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0.1),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, StringField, BooleanField, Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class PlayfieldDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new PlayfieldDeviceBox({\n uuid,\n graph,\n name: \"PlayfieldDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitPlayfieldDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get label() {\n return this.getField(2);\n }\n get icon() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get samples() {\n return this.getField(10);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.InstrumentHost, true),\n 2: StringField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"icon\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Field.hook({\n parent: this,\n fieldKey: 10,\n fieldName: \"samples\",\n pointerRules: { accepts: [Pointers.Sample], mandatory: false },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Field, Int32Field, StringField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class PlayfieldSampleBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new PlayfieldSampleBox({\n uuid,\n graph,\n name: \"PlayfieldSampleBox\",\n pointerRules: { accepts: [Pointers.Editing], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitPlayfieldSampleBox, this);\n }\n get device() {\n return this.getField(10);\n }\n get file() {\n return this.getField(11);\n }\n get midiEffects() {\n return this.getField(12);\n }\n get audioEffects() {\n return this.getField(13);\n }\n get index() {\n return this.getField(15);\n }\n get label() {\n return this.getField(20);\n }\n get icon() {\n return this.getField(21);\n }\n get enabled() {\n return this.getField(22);\n }\n get minimized() {\n return this.getField(23);\n }\n get mute() {\n return this.getField(40);\n }\n get solo() {\n return this.getField(41);\n }\n get exclude() {\n return this.getField(42);\n }\n get polyphone() {\n return this.getField(43);\n }\n get gate() {\n return this.getField(44);\n }\n get pitch() {\n return this.getField(45);\n }\n get sampleStart() {\n return this.getField(46);\n }\n get sampleEnd() {\n return this.getField(47);\n }\n get attack() {\n return this.getField(48);\n }\n get release() {\n return this.getField(49);\n }\n initializeFields() {\n return {\n 10: PointerField.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"device\",\n pointerRules: NoPointers,\n }, Pointers.Sample, true),\n 11: PointerField.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"file\",\n pointerRules: NoPointers,\n }, Pointers.AudioFile, true),\n 12: Field.hook({\n parent: this,\n fieldKey: 12,\n fieldName: \"midiEffects\",\n pointerRules: { accepts: [Pointers.MidiEffectHost], mandatory: false },\n }),\n 13: Field.hook({\n parent: this,\n fieldKey: 13,\n fieldName: \"audioEffects\",\n pointerRules: { accepts: [Pointers.AudioEffectHost], mandatory: false },\n }),\n 15: Int32Field.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }, 60),\n 20: StringField.create({\n parent: this,\n fieldKey: 20,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 21: StringField.create({\n parent: this,\n fieldKey: 21,\n fieldName: \"icon\",\n pointerRules: NoPointers,\n }),\n 22: BooleanField.create({\n parent: this,\n fieldKey: 22,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 23: BooleanField.create({\n parent: this,\n fieldKey: 23,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 40: BooleanField.create({\n parent: this,\n fieldKey: 40,\n fieldName: \"mute\",\n pointerRules: NoPointers,\n }),\n 41: BooleanField.create({\n parent: this,\n fieldKey: 41,\n fieldName: \"solo\",\n pointerRules: NoPointers,\n }),\n 42: BooleanField.create({\n parent: this,\n fieldKey: 42,\n fieldName: \"exclude\",\n pointerRules: NoPointers,\n }),\n 43: BooleanField.create({\n parent: this,\n fieldKey: 43,\n fieldName: \"polyphone\",\n pointerRules: NoPointers,\n }),\n 44: Int32Field.create({\n parent: this,\n fieldKey: 44,\n fieldName: \"gate\",\n pointerRules: NoPointers,\n }, 0),\n 45: Float32Field.create({\n parent: this,\n fieldKey: 45,\n fieldName: \"pitch\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 46: Float32Field.create({\n parent: this,\n fieldKey: 46,\n fieldName: \"sampleStart\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0),\n 47: Float32Field.create({\n parent: this,\n fieldKey: 47,\n fieldName: \"sampleEnd\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 1),\n 48: Float32Field.create({\n parent: this,\n fieldKey: 48,\n fieldName: \"attack\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0.001),\n 49: Float32Field.create({\n parent: this,\n fieldKey: 49,\n fieldName: \"release\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 0.02),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, StringField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class TapeDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new TapeDeviceBox({\n uuid,\n graph,\n name: \"TapeDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection, Pointers.Automation],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitTapeDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get label() {\n return this.getField(2);\n }\n get icon() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get flutter() {\n return this.getField(10);\n }\n get wow() {\n return this.getField(11);\n }\n get noise() {\n return this.getField(12);\n }\n get saturation() {\n return this.getField(13);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.InstrumentHost, true),\n 2: StringField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"icon\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Float32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"flutter\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 11: Float32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"wow\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 12: Float32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"noise\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 13: Float32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"saturation\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, StringField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ArpeggioDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ArpeggioDeviceBox({\n uuid,\n graph,\n name: \"ArpeggioDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitArpeggioDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get index() {\n return this.getField(2);\n }\n get label() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get modeIndex() {\n return this.getField(10);\n }\n get numOctaves() {\n return this.getField(11);\n }\n get rateIndex() {\n return this.getField(12);\n }\n get gate() {\n return this.getField(13);\n }\n get repeat() {\n return this.getField(14);\n }\n get velocity() {\n return this.getField(15);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.MidiEffectHost, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"modeIndex\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 11: Int32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"numOctaves\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 1),\n 12: Int32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"rateIndex\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 9),\n 13: Float32Field.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"gate\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 1),\n 14: Int32Field.create({\n parent: this,\n fieldKey: 14,\n fieldName: \"repeat\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }, 1),\n 15: Float32Field.create({\n parent: this,\n fieldKey: 15,\n fieldName: \"velocity\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, StringField, BooleanField, Float32Field, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class PitchDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new PitchDeviceBox({\n uuid,\n graph,\n name: \"PitchDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitPitchDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get index() {\n return this.getField(2);\n }\n get label() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get semiTones() {\n return this.getField(10);\n }\n get cents() {\n return this.getField(11);\n }\n get octaves() {\n return this.getField(12);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.MidiEffectHost, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: Int32Field.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"semiTones\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 11: Float32Field.create({\n parent: this,\n fieldKey: 11,\n fieldName: \"cents\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n 12: Int32Field.create({\n parent: this,\n fieldKey: 12,\n fieldName: \"octaves\",\n pointerRules: {\n accepts: [\n Pointers.Modulation,\n Pointers.Automation,\n Pointers.MidiControl,\n ],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Int32Field, StringField, BooleanField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ZeitgeistDeviceBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ZeitgeistDeviceBox({\n uuid,\n graph,\n name: \"ZeitgeistDeviceBox\",\n pointerRules: {\n accepts: [Pointers.Device, Pointers.Selection],\n mandatory: false,\n },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitZeitgeistDeviceBox, this);\n }\n get host() {\n return this.getField(1);\n }\n get index() {\n return this.getField(2);\n }\n get label() {\n return this.getField(3);\n }\n get enabled() {\n return this.getField(4);\n }\n get minimized() {\n return this.getField(5);\n }\n get groove() {\n return this.getField(10);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"host\",\n pointerRules: NoPointers,\n }, Pointers.MidiEffectHost, true),\n 2: Int32Field.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"index\",\n pointerRules: NoPointers,\n }),\n 3: StringField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 4: BooleanField.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"enabled\",\n pointerRules: NoPointers,\n }, true),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"minimized\",\n pointerRules: NoPointers,\n }, false),\n 10: PointerField.create({\n parent: this,\n fieldKey: 10,\n fieldName: \"groove\",\n pointerRules: NoPointers,\n }, Pointers.Groove, true),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, Field, StringField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ModularBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ModularBox({\n uuid,\n graph,\n name: \"ModularBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitModularBox, this);\n }\n get collection() {\n return this.getField(1);\n }\n get device() {\n return this.getField(2);\n }\n get editing() {\n return this.getField(3);\n }\n get modules() {\n return this.getField(11);\n }\n get connections() {\n return this.getField(12);\n }\n get label() {\n return this.getField(13);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"collection\",\n pointerRules: NoPointers,\n }, Pointers.ModularSetup, true),\n 2: Field.hook({\n parent: this,\n fieldKey: 2,\n fieldName: \"device\",\n pointerRules: { accepts: [Pointers.ModularSetup], mandatory: true },\n }),\n 3: Field.hook({\n parent: this,\n fieldKey: 3,\n fieldName: \"editing\",\n pointerRules: { accepts: [Pointers.Editing], mandatory: false },\n }),\n 11: Field.hook({\n parent: this,\n fieldKey: 11,\n fieldName: \"modules\",\n pointerRules: {\n accepts: [Pointers.ModuleCollection],\n mandatory: false,\n },\n }),\n 12: Field.hook({\n parent: this,\n fieldKey: 12,\n fieldName: \"connections\",\n pointerRules: {\n accepts: [Pointers.ConnectionCollection],\n mandatory: false,\n },\n }),\n 13: StringField.create({\n parent: this,\n fieldKey: 13,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, PointerField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ModuleConnectionBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ModuleConnectionBox({\n uuid,\n graph,\n name: \"ModuleConnectionBox\",\n pointerRules: NoPointers,\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitModuleConnectionBox, this);\n }\n get collection() {\n return this.getField(1);\n }\n get source() {\n return this.getField(2);\n }\n get target() {\n return this.getField(3);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"collection\",\n pointerRules: NoPointers,\n }, Pointers.ConnectionCollection, true),\n 2: PointerField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"source\",\n pointerRules: NoPointers,\n }, Pointers.VoltageConnection, true),\n 3: PointerField.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"target\",\n pointerRules: NoPointers,\n }, Pointers.VoltageConnection, true),\n };\n }\n}\n", "import \"@opendaw/lib-std\";\nimport { ObjectField, NoPointers, PointerField, StringField, Int32Field, BooleanField, } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ModuleAttributes extends ObjectField {\n static create(construct) {\n return new ModuleAttributes(construct);\n }\n constructor(construct) {\n super(construct);\n }\n get collection() {\n return this.getField(1);\n }\n get label() {\n return this.getField(2);\n }\n get x() {\n return this.getField(3);\n }\n get y() {\n return this.getField(4);\n }\n get collapsed() {\n return this.getField(5);\n }\n get removable() {\n return this.getField(6);\n }\n initializeFields() {\n return {\n 1: PointerField.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"collection\",\n pointerRules: NoPointers,\n }, Pointers.ModuleCollection, true),\n 2: StringField.create({\n parent: this,\n fieldKey: 2,\n fieldName: \"label\",\n pointerRules: NoPointers,\n }),\n 3: Int32Field.create({\n parent: this,\n fieldKey: 3,\n fieldName: \"x\",\n pointerRules: NoPointers,\n }),\n 4: Int32Field.create({\n parent: this,\n fieldKey: 4,\n fieldName: \"y\",\n pointerRules: NoPointers,\n }),\n 5: BooleanField.create({\n parent: this,\n fieldKey: 5,\n fieldName: \"collapsed\",\n pointerRules: NoPointers,\n }, false),\n 6: BooleanField.create({\n parent: this,\n fieldKey: 6,\n fieldName: \"removable\",\n pointerRules: NoPointers,\n }, true),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, Field, } from \"@opendaw/lib-box\";\nimport { ModuleAttributes } from \"./ModuleAttributes\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ModularAudioInputBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ModularAudioInputBox({\n uuid,\n graph,\n name: \"ModularAudioInputBox\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitModularAudioInputBox, this);\n }\n get attributes() {\n return this.getField(1);\n }\n get output() {\n return this.getField(10);\n }\n initializeFields() {\n return {\n 1: ModuleAttributes.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"attributes\",\n pointerRules: NoPointers,\n }),\n 10: Field.hook({\n parent: this,\n fieldKey: 10,\n fieldName: \"output\",\n pointerRules: {\n accepts: [Pointers.VoltageConnection],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, Field, } from \"@opendaw/lib-box\";\nimport { ModuleAttributes } from \"./ModuleAttributes\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ModularAudioOutputBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ModularAudioOutputBox({\n uuid,\n graph,\n name: \"ModularAudioOutputBox\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitModularAudioOutputBox, this);\n }\n get attributes() {\n return this.getField(1);\n }\n get input() {\n return this.getField(10);\n }\n initializeFields() {\n return {\n 1: ModuleAttributes.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"attributes\",\n pointerRules: NoPointers,\n }),\n 10: Field.hook({\n parent: this,\n fieldKey: 10,\n fieldName: \"input\",\n pointerRules: {\n accepts: [Pointers.VoltageConnection],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, Field, Float32Field, } from \"@opendaw/lib-box\";\nimport { ModuleAttributes } from \"./ModuleAttributes\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ModuleDelayBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ModuleDelayBox({\n uuid,\n graph,\n name: \"ModuleDelayBox\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitModuleDelayBox, this);\n }\n get attributes() {\n return this.getField(1);\n }\n get voltageInput() {\n return this.getField(10);\n }\n get voltageOutput() {\n return this.getField(11);\n }\n get time() {\n return this.getField(20);\n }\n initializeFields() {\n return {\n 1: ModuleAttributes.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"attributes\",\n pointerRules: NoPointers,\n }),\n 10: Field.hook({\n parent: this,\n fieldKey: 10,\n fieldName: \"voltageInput\",\n pointerRules: {\n accepts: [Pointers.VoltageConnection],\n mandatory: false,\n },\n }),\n 11: Field.hook({\n parent: this,\n fieldKey: 11,\n fieldName: \"voltageOutput\",\n pointerRules: {\n accepts: [Pointers.VoltageConnection],\n mandatory: false,\n },\n }),\n 20: Float32Field.create({\n parent: this,\n fieldKey: 20,\n fieldName: \"time\",\n pointerRules: {\n accepts: [Pointers.ParameterController],\n mandatory: false,\n },\n }, 500),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, Field, Float32Field, } from \"@opendaw/lib-box\";\nimport { ModuleAttributes } from \"./ModuleAttributes\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ModuleMultiplierBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ModuleMultiplierBox({\n uuid,\n graph,\n name: \"ModuleMultiplierBox\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitModuleMultiplierBox, this);\n }\n get attributes() {\n return this.getField(1);\n }\n get voltageInputX() {\n return this.getField(10);\n }\n get voltageInputY() {\n return this.getField(11);\n }\n get voltageOutput() {\n return this.getField(12);\n }\n get multiplier() {\n return this.getField(20);\n }\n initializeFields() {\n return {\n 1: ModuleAttributes.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"attributes\",\n pointerRules: NoPointers,\n }),\n 10: Field.hook({\n parent: this,\n fieldKey: 10,\n fieldName: \"voltageInputX\",\n pointerRules: {\n accepts: [Pointers.VoltageConnection],\n mandatory: false,\n },\n }),\n 11: Field.hook({\n parent: this,\n fieldKey: 11,\n fieldName: \"voltageInputY\",\n pointerRules: {\n accepts: [Pointers.VoltageConnection],\n mandatory: false,\n },\n }),\n 12: Field.hook({\n parent: this,\n fieldKey: 12,\n fieldName: \"voltageOutput\",\n pointerRules: {\n accepts: [Pointers.VoltageConnection],\n mandatory: false,\n },\n }),\n 20: Float32Field.create({\n parent: this,\n fieldKey: 20,\n fieldName: \"multiplier\",\n pointerRules: NoPointers,\n }),\n };\n }\n}\n", "import { safeExecute } from \"@opendaw/lib-std\";\nimport { Box, NoPointers, Field, Float32Field, } from \"@opendaw/lib-box\";\nimport { ModuleAttributes } from \"./ModuleAttributes\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nexport class ModuleGainBox extends Box {\n static create(graph, uuid, constructor) {\n return graph.stageBox(new ModuleGainBox({\n uuid,\n graph,\n name: \"ModuleGainBox\",\n pointerRules: { accepts: [Pointers.Selection], mandatory: false },\n }), constructor);\n }\n constructor(construct) {\n super(construct);\n }\n accept(visitor) {\n return safeExecute(visitor.visitModuleGainBox, this);\n }\n get attributes() {\n return this.getField(1);\n }\n get voltageInput() {\n return this.getField(10);\n }\n get voltageOutput() {\n return this.getField(12);\n }\n get gain() {\n return this.getField(20);\n }\n initializeFields() {\n return {\n 1: ModuleAttributes.create({\n parent: this,\n fieldKey: 1,\n fieldName: \"attributes\",\n pointerRules: NoPointers,\n }),\n 10: Field.hook({\n parent: this,\n fieldKey: 10,\n fieldName: \"voltageInput\",\n pointerRules: {\n accepts: [Pointers.VoltageConnection],\n mandatory: false,\n },\n }),\n 12: Field.hook({\n parent: this,\n fieldKey: 12,\n fieldName: \"voltageOutput\",\n pointerRules: {\n accepts: [Pointers.VoltageConnection],\n mandatory: false,\n },\n }),\n 20: Float32Field.create({\n parent: this,\n fieldKey: 20,\n fieldName: \"gain\",\n pointerRules: {\n accepts: [Pointers.ParameterController],\n mandatory: false,\n },\n }),\n };\n }\n}\n", "import { Pointers } from \"@opendaw/studio-enums\";\nimport { Interpolation } from \"@opendaw/lib-dsp\";\nimport { ValueEventCurveBox } from \"@opendaw/studio-boxes\";\nimport { assertInstanceOf, isDefined, panic, UUID } from \"@opendaw/lib-std\";\nexport var InterpolationFieldAdapter;\n(function (InterpolationFieldAdapter) {\n InterpolationFieldAdapter.write = (field, value) => {\n if (value.type === \"none\") {\n field.disconnect();\n field.setValue(0);\n }\n else if (value.type === \"linear\") {\n field.disconnect();\n field.setValue(1);\n }\n else if (value.type === \"curve\") {\n field.setValue(0);\n const curveBox = field.pointerHub.filter(Pointers.ValueInterpolation).at(0)?.box;\n if (isDefined(curveBox)) {\n assertInstanceOf(curveBox, ValueEventCurveBox);\n curveBox.slope.setValue(value.slope);\n }\n else {\n ValueEventCurveBox.create(field.box.graph, UUID.generate(), box => {\n box.slope.setValue(value.slope);\n box.event.refer(field);\n });\n }\n }\n };\n InterpolationFieldAdapter.read = (field) => {\n const curveBox = field.pointerHub.incoming().at(0)?.box;\n if (isDefined(curveBox)) {\n assertInstanceOf(curveBox, ValueEventCurveBox);\n return { type: \"curve\", slope: curveBox.slope.getValue() };\n }\n if (field.getValue() === 0) {\n return Interpolation.None;\n }\n else if (field.getValue() === 1) {\n return Interpolation.Linear;\n }\n else {\n return panic(\"Unknown Interpolation value\");\n }\n };\n})(InterpolationFieldAdapter || (InterpolationFieldAdapter = {}));\n", "import { Arrays, Cache, Terminable, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { Propagation } from \"@opendaw/lib-box\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { ValueEventBox } from \"@opendaw/studio-boxes\";\nimport { ValueEventCollectionBoxAdapter } from \"../collection/ValueEventCollectionBoxAdapter\";\nimport { InterpolationFieldAdapter } from \"./InterpolationFieldAdapter\";\nexport class ValueEventBoxAdapter {\n static Comparator = (a, b) => {\n const positionDiff = a.position - b.position;\n if (positionDiff !== 0) {\n return positionDiff;\n }\n const indexDiff = a.index - b.index;\n if (indexDiff !== 0) {\n return indexDiff;\n }\n throw new Error(`${a} and ${b} are identical in terms of comparison`);\n };\n type = \"value-event\";\n #terminator = new Terminator();\n #context;\n #box;\n #interpolation;\n #interpolationSubscription;\n #isSelected = false;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#interpolation = this.#terminator.own(new Cache(() => InterpolationFieldAdapter.read(this.#box.interpolation)));\n const invalidateInterpolation = () => {\n this.#interpolation.invalidate();\n this.collection.ifSome(collection => collection.onEventPropertyChanged());\n };\n this.#terminator.ownAll(this.#box.subscribe(Propagation.Children, (update) => {\n if (this.collection.isEmpty()) {\n return;\n }\n if (update.type === \"primitive\" || update.type === \"pointer\") {\n const collection = this.collection.unwrap();\n const updatedFieldKeys = update.address.fieldKeys;\n const indexChanged = Arrays.equals(this.#box.index.address.fieldKeys, updatedFieldKeys);\n const positionChanged = Arrays.equals(this.#box.position.address.fieldKeys, updatedFieldKeys);\n if (indexChanged || positionChanged) {\n collection.requestSorting();\n }\n else {\n collection.onEventPropertyChanged();\n }\n }\n }), this.#box.interpolation.subscribe(invalidateInterpolation), this.#box.interpolation.pointerHub.subscribeImmediate({\n onAdd: ({ targetVertex }) => {\n this.#interpolationSubscription.terminate();\n this.#interpolationSubscription = targetVertex.unwrap().box\n .subscribe(Propagation.Children, invalidateInterpolation);\n invalidateInterpolation();\n },\n onRemove: () => {\n this.#interpolationSubscription.terminate();\n this.#interpolationSubscription = Terminable.Empty;\n invalidateInterpolation();\n }\n }));\n this.#interpolationSubscription = this.#box.interpolation.pointerHub\n .filter(Pointers.ValueInterpolation)\n .at(0)?.box\n .subscribe(Propagation.Children, invalidateInterpolation)\n ?? Terminable.Empty;\n }\n onSelected() {\n this.#isSelected = true;\n this.collection.ifSome(region => region.onEventPropertyChanged());\n }\n onDeselected() {\n this.#isSelected = false;\n this.collection.ifSome(region => region.onEventPropertyChanged());\n }\n terminate() {\n this.#interpolationSubscription.terminate();\n this.#terminator.terminate();\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get position() { return this.#box.position.getValue(); }\n get index() { return this.#box.index.getValue(); }\n set interpolation(value) { InterpolationFieldAdapter.write(this.#box.interpolation, value); }\n get interpolation() { return this.#interpolation.get(); }\n get value() { return this.#box.value.getValue(); }\n get isSelected() { return this.#isSelected; }\n get collection() {\n return this.#box.events.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, ValueEventCollectionBoxAdapter));\n }\n copyTo(options) {\n const eventBox = ValueEventBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.position.setValue(options?.position ?? this.position);\n box.index.setValue(options?.index ?? this.index);\n box.events.refer(options?.events ?? this.collection.unwrap().box.events);\n box.value.setValue(options?.value ?? this.value);\n });\n InterpolationFieldAdapter.write(eventBox.interpolation, options?.interpolation ?? this.interpolation);\n return this.#context.boxAdapters.adapterFor(eventBox, ValueEventBoxAdapter);\n }\n copyFrom(options) {\n this.#box.position.setValue(options?.position ?? this.position);\n this.#box.index.setValue(options?.index ?? this.index);\n this.#box.events.refer(options?.events ?? this.collection.unwrap().box.events);\n this.#box.value.setValue(options?.value ?? this.value);\n InterpolationFieldAdapter.write(this.#box.interpolation, options?.interpolation ?? this.interpolation);\n return this;\n }\n toString() { return `{ValueEventBoxAdapter position: ${this.position} index: ${this.index}}`; }\n}\n", "import { ValueEventBox, ValueEventCollectionBox } from \"@opendaw/studio-boxes\";\nimport { asDefined, Curve, linear, Notifier, Option, panic, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { EventCollection, Interpolation, ValueEvent } from \"@opendaw/lib-dsp\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { ValueEventBoxAdapter } from \"../event/ValueEventBoxAdapter\";\nimport { InterpolationFieldAdapter } from \"../event/InterpolationFieldAdapter\";\nexport class ValueEventCollectionBoxAdapter {\n #terminator = new Terminator();\n #context;\n #box;\n #changeNotifier;\n #adapters;\n #events;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#changeNotifier = new Notifier();\n this.#adapters = UUID.newSet(adapter => adapter.uuid);\n this.#events = EventCollection.create(ValueEventBoxAdapter.Comparator);\n const addValueProcedure = (box) => {\n const adapter = asDefined(box.accept({\n visitValueEventBox: (box) => this.#context.boxAdapters.adapterFor(box, ValueEventBoxAdapter)\n }), `Could not find adapter for ${box}`);\n if (this.#adapters.add(adapter)) {\n this.#events.add(adapter);\n this.#onEventsChanged();\n }\n };\n this.#box.events.pointerHub.incoming().forEach(({ box }) => addValueProcedure(box));\n this.#terminator.own(this.#box.events.pointerHub.subscribeTransactual({\n onAdd: ({ box }) => addValueProcedure(box),\n onRemove: ({ box: { address: { uuid } } }) => {\n this.#events.remove(this.#adapters.removeByKey(uuid));\n this.#onEventsChanged();\n }\n }));\n this.#terminator.own(this.#box.owners.pointerHub.subscribeTransactual({\n onAdd: () => this.#changeNotifier.notify(this),\n onRemove: () => this.#changeNotifier.notify(this)\n }));\n }\n valueAt(position, fallback) { return ValueEvent.valueAt(this.#events, position, fallback); }\n copy() {\n const graph = this.#context.boxGraph;\n const boxCopy = ValueEventCollectionBox.create(graph, UUID.generate());\n this.#events.asArray().forEach(source => source.copyTo({ events: boxCopy.events }));\n return this.#context.boxAdapters.adapterFor(boxCopy, ValueEventCollectionBoxAdapter);\n }\n cut(position) {\n const low = this.events.lowerEqual(position);\n const high = this.events.greaterEqual(position);\n if (null === high) {\n if (null === low) {\n return Option.None;\n }\n return Option.wrap(this.createEvent({\n position,\n value: low.value,\n index: low.index,\n interpolation: low.interpolation\n }));\n }\n if (null === low) {\n return Option.wrap(this.createEvent({\n position,\n value: high.value,\n index: high.index,\n interpolation: high.interpolation\n }));\n }\n if (low.position === position) {\n return Option.wrap(low);\n }\n if (low.interpolation.type === \"none\") {\n return Option.wrap(this.createEvent({\n position,\n value: low.value,\n index: low.index,\n interpolation: low.interpolation\n }));\n }\n if (low.interpolation.type === \"linear\") {\n const { position: p0, value: v0 } = low;\n const { position: p1, value: v1 } = high;\n return Option.wrap(this.createEvent({\n position,\n value: linear(v0, v1, (position - p0) / (p1 - p0)),\n index: 0,\n interpolation: low.interpolation\n }));\n }\n if (low.interpolation.type === \"curve\") {\n const { position: p0, value: y0 } = low;\n const { position: p1, value: y1 } = high;\n const steps = p1 - p0;\n const cutOffset = position - p0;\n const curve = Curve.byHalf(steps, y0, Curve.valueAt({\n slope: low.interpolation.slope,\n steps,\n y0,\n y1\n }, steps * 0.5), y1);\n const cutValue = Curve.valueAt(curve, cutOffset);\n const lowSlope = Curve.slopeByHalf(y0, Curve.valueAt(curve, cutOffset * 0.5), cutValue);\n InterpolationFieldAdapter.write(low.box.interpolation, Interpolation.Curve(lowSlope));\n return Option.wrap(this.createEvent({\n position,\n value: cutValue,\n index: 0,\n interpolation: Interpolation.Curve(Curve.slopeByHalf(cutValue, Curve.valueAt(curve, (cutOffset + steps) * 0.5), y1))\n }));\n }\n return panic(\"Unknown interpolation type\");\n }\n subscribeChange(observer) { return this.#changeNotifier.subscribe(observer); }\n createEvent({ position, index, value, interpolation }) {\n const eventBox = ValueEventBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.position.setValue(position);\n box.index.setValue(index);\n box.value.setValue(value);\n box.events.refer(this.#box.events);\n });\n InterpolationFieldAdapter.write(eventBox.interpolation, interpolation);\n return this.#context.boxAdapters.adapterFor(eventBox, ValueEventBoxAdapter);\n }\n requestSorting() {\n this.#events.onIndexingChanged();\n this.onEventPropertyChanged();\n }\n onEventPropertyChanged() { this.#onEventsChanged(); }\n terminate() { this.#terminator.terminate(); }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get numOwners() { return this.#box.owners.pointerHub.filter(Pointers.ValueEventCollection).length; }\n get events() { return this.#events; }\n toString() { return `{ValueEventCollectionBox ${UUID.toString(this.#box.address.uuid)}}`; }\n #onEventsChanged() { this.#changeNotifier.notify(this); }\n}\n", "import { PPQN } from \"@opendaw/lib-dsp\";\nimport { DefaultObservableValue, Notifier, Option, safeExecute, Terminable, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { Propagation } from \"@opendaw/lib-box\";\nimport { TrackBoxAdapter } from \"../TrackBoxAdapter\";\nimport { ValueEventCollectionBoxAdapter } from \"../collection/ValueEventCollectionBoxAdapter\";\nimport { ValueClipBox } from \"@opendaw/studio-boxes\";\nexport class ValueClipBoxAdapter {\n type = \"value-clip\";\n #terminator = new Terminator();\n #context;\n #box;\n #selectedValue;\n #changeNotifier;\n #isConstructing; // Prevents stack overflow due to infinite adapter queries\n #eventCollectionSubscription = Terminable.Empty;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#isConstructing = true;\n this.#selectedValue = this.#terminator.own(new DefaultObservableValue(false));\n this.#changeNotifier = this.#terminator.own(new Notifier());\n this.#terminator.own(this.#box.pointerHub.subscribeImmediate({\n onAdd: () => this.#dispatchChange(),\n onRemove: () => this.#dispatchChange()\n }));\n this.#terminator.own(this.#box.subscribe(Propagation.Children, (_update) => this.#dispatchChange()));\n this.#terminator.own(this.#box.events.catchupAndSubscribe(({ targetVertex }) => {\n this.#eventCollectionSubscription.terminate();\n this.#eventCollectionSubscription = targetVertex.match({\n none: () => Terminable.Empty,\n some: ({ box }) => this.#context.boxAdapters\n .adapterFor(box, ValueEventCollectionBoxAdapter)\n .subscribeChange(() => this.#dispatchChange())\n });\n this.#dispatchChange();\n }));\n this.#isConstructing = false;\n }\n valueAt(position, fallback) {\n const content = this.optCollection;\n return content.isEmpty() ? fallback : content.unwrap().valueAt(position % this.duration, fallback);\n }\n catchupAndSubscribeSelected(observer) {\n return this.#selectedValue.catchupAndSubscribe(observer);\n }\n subscribeChange(observer) { return this.#changeNotifier.subscribe(observer); }\n accept(visitor) { return safeExecute(visitor.visitValueClipBoxAdapter, this); }\n consolidate() { this.#box.events.refer(this.optCollection.unwrap().copy().box.owners); }\n clone(consolidate) {\n const events = consolidate ? this.optCollection.unwrap().copy().box.owners : this.#box.events.targetVertex.unwrap();\n ValueClipBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.index.setValue(this.indexField.getValue());\n box.label.setValue(this.label);\n box.hue.setValue(this.hue);\n box.duration.setValue(this.duration);\n box.mute.setValue(this.mute);\n box.clips.refer(this.#box.clips.targetVertex.unwrap());\n box.events.refer(events);\n });\n }\n onSelected() { this.#selectedValue.setValue(true); }\n onDeselected() { this.#selectedValue.setValue(false); }\n get isSelected() { return this.#selectedValue.getValue(); }\n terminate() {\n this.#eventCollectionSubscription.terminate();\n this.#terminator.terminate();\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get duration() { return this.#box.duration.getValue(); }\n get mute() { return this.#box.mute.getValue(); }\n get hue() { return this.#box.hue.getValue(); }\n get hasCollection() { return !this.optCollection.isEmpty(); }\n get events() {\n return this.optCollection.map(collection => collection.events);\n }\n get optCollection() {\n return this.#box.events.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, ValueEventCollectionBoxAdapter));\n }\n get label() { return this.#box.label.getValue(); }\n get trackBoxAdapter() {\n if (this.#isConstructing) {\n return Option.None;\n }\n return this.#box.clips.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, TrackBoxAdapter));\n }\n get isMirrowed() { return this.optCollection.mapOr(adapter => adapter.numOwners > 1, false); }\n get canMirror() { return true; }\n toString() { return `{ValueClipBoxAdapter ${UUID.toString(this.#box.address.uuid)} d: ${PPQN.toString(this.duration)}}`; }\n #dispatchChange() {\n this.#changeNotifier.notify();\n this.trackBoxAdapter.unwrapOrNull()?.clips?.dispatchChange();\n }\n}\n", "export class AudioFileBoxAdapter {\n #context;\n #box;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get startInSeconds() { return this.#box.startInSeconds.getValue(); }\n get endInSeconds() { return this.#box.endInSeconds.getValue(); }\n get data() { return this.getOrCreateLoader().data; }\n get peaks() { return this.getOrCreateLoader().peaks; }\n getOrCreateLoader() {\n return this.#context.audioManager.getOrCreate(this.#box.address.uuid);\n }\n terminate() { }\n}\n", "import { PPQN } from \"@opendaw/lib-dsp\";\nimport { DefaultObservableValue, Notifier, Option, safeExecute, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { AudioClipBox } from \"@opendaw/studio-boxes\";\nimport { Propagation } from \"@opendaw/lib-box\";\nimport { TrackBoxAdapter } from \"../TrackBoxAdapter\";\nimport { AudioFileBoxAdapter } from \"../../audio/AudioFileBoxAdapter\";\nexport class AudioClipBoxAdapter {\n type = \"audio-clip\";\n #terminator = new Terminator();\n #context;\n #box;\n #selectedValue;\n #changeNotifier;\n #isConstructing; // Prevents stack overflow due to infinite adapter queries\n #fileAdapter = Option.None;\n #fileSubscription = Option.None;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#isConstructing = true;\n this.#selectedValue = this.#terminator.own(new DefaultObservableValue(false));\n this.#changeNotifier = this.#terminator.own(new Notifier());\n this.#terminator.ownAll(this.#box.pointerHub.subscribeImmediate({\n onAdd: () => this.#dispatchChange(),\n onRemove: () => this.#dispatchChange()\n }), this.#box.file.catchupAndSubscribe((pointerField) => {\n this.#fileAdapter = pointerField.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, AudioFileBoxAdapter));\n this.#fileSubscription.ifSome(subscription => subscription.terminate());\n this.#fileSubscription = this.#fileAdapter.map(adapter => adapter.getOrCreateLoader().subscribe(() => this.#dispatchChange()));\n }), this.#box.subscribe(Propagation.Children, (_update) => this.#dispatchChange()), {\n terminate: () => {\n this.#fileSubscription.ifSome(subscription => subscription.terminate());\n this.#fileSubscription = Option.None;\n }\n });\n this.#isConstructing = false;\n }\n catchupAndSubscribeSelected(observer) {\n return this.#selectedValue.catchupAndSubscribe(observer);\n }\n subscribeChange(observer) { return this.#changeNotifier.subscribe(observer); }\n accept(visitor) { return safeExecute(visitor.visitAudioClipBoxAdapter, this); }\n consolidate() { }\n clone(_mirrored) {\n AudioClipBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.index.setValue(this.indexField.getValue());\n box.gain.setValue(this.gain);\n box.label.setValue(this.label);\n box.hue.setValue(this.hue);\n box.duration.setValue(this.duration);\n box.mute.setValue(this.mute);\n box.clips.refer(this.#box.clips.targetVertex.unwrap());\n box.file.refer(this.#box.file.targetVertex.unwrap());\n });\n }\n onSelected() { this.#selectedValue.setValue(true); }\n onDeselected() { this.#selectedValue.setValue(false); }\n get isSelected() { return this.#selectedValue.getValue(); }\n terminate() { this.#terminator.terminate(); }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get duration() { return this.#box.duration.getValue(); }\n get mute() { return this.#box.mute.getValue(); }\n get hue() { return this.#box.hue.getValue(); }\n get gain() { return this.#box.gain.getValue(); }\n get file() { return this.#fileAdapter.unwrap(\"Cannot access file.\"); }\n get hasCollection() { return !this.optCollection.isEmpty(); }\n get optCollection() { return Option.None; }\n get label() { return this.#box.label.getValue(); }\n get trackBoxAdapter() {\n if (this.#isConstructing) {\n return Option.None;\n }\n return this.#box.clips.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, TrackBoxAdapter));\n }\n get isMirrowed() { return false; }\n get canMirror() { return false; }\n toString() { return `{AudioClipBoxAdapter ${UUID.toString(this.#box.address.uuid)} d: ${PPQN.toString(this.duration)}}`; }\n #dispatchChange() {\n this.#changeNotifier.notify();\n this.trackBoxAdapter.unwrapOrNull()?.clips?.dispatchChange();\n }\n}\n", "import { NoteEvent } from \"@opendaw/lib-dsp\";\nimport { Arrays, UUID } from \"@opendaw/lib-std\";\nimport { NoteEventBox } from \"@opendaw/studio-boxes\";\nimport { Propagation } from \"@opendaw/lib-box\";\nimport { NoteEventCollectionBoxAdapter } from \"../collection/NoteEventCollectionBoxAdapter\";\nexport class NoteEventBoxAdapter {\n type = \"note-event\";\n #context;\n #box;\n #subscription;\n #isSelected = false;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#subscription = this.#box.subscribe(Propagation.Children, (update) => {\n if (this.collection.isEmpty()) {\n return;\n }\n if (update.type === \"primitive\" || update.type === \"pointer\") {\n const collection = this.collection.unwrap();\n const updatedFieldKeys = update.address.fieldKeys;\n const pitchChanged = Arrays.equals(this.#box.pitch.address.fieldKeys, updatedFieldKeys);\n const positionChanged = Arrays.equals(this.#box.position.address.fieldKeys, updatedFieldKeys);\n if (pitchChanged || positionChanged) {\n collection.requestSorting();\n }\n else {\n collection.onEventPropertyChanged();\n }\n }\n });\n }\n onSelected() {\n this.#isSelected = true;\n this.collection.ifSome(region => region.onEventPropertyChanged());\n }\n onDeselected() {\n this.#isSelected = false;\n this.collection.ifSome(region => region.onEventPropertyChanged());\n }\n terminate() { this.#subscription.terminate(); }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get position() { return this.#box.position.getValue(); }\n get duration() { return this.#box.duration.getValue(); }\n get complete() { return this.position + this.duration; }\n get velocity() { return this.#box.velocity.getValue(); } // 0.0...1.0\n get pitch() { return this.#box.pitch.getValue(); } // 0...127\n get cent() { return this.#box.cent.getValue(); } // -50.0...+50.0\n get chance() { return this.#box.chance.getValue(); } // 0...100%\n get playCount() { return this.#box.playCount.getValue(); } // 1...16\n get playCurve() { return this.#box.playCurve.getValue(); } // -1...+1\n get isSelected() { return this.#isSelected; }\n get collection() {\n return this.#box.events.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, NoteEventCollectionBoxAdapter));\n }\n normalizedPitch() {\n if (this.collection.isEmpty()) {\n return 0.5;\n }\n const { minPitch, maxPitch } = this.collection.unwrap();\n return minPitch === maxPitch ? 0.5 : 1.0 - (this.pitch - minPitch) / (maxPitch - minPitch);\n }\n copyAsNoteEvent() {\n return {\n type: \"note-event\",\n position: this.position,\n duration: this.duration,\n pitch: this.pitch,\n cent: this.cent,\n velocity: this.velocity\n };\n }\n copyTo(options) {\n return this.#context.boxAdapters.adapterFor(NoteEventBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.position.setValue(options?.position ?? this.position);\n box.duration.setValue(options?.duration ?? this.duration);\n box.pitch.setValue(options?.pitch ?? this.pitch);\n box.playCount.setValue(options?.playCount ?? this.playCount);\n box.events.refer(options?.events ?? this.collection.unwrap().box.events);\n box.velocity.setValue(this.velocity);\n box.cent.setValue(this.cent);\n box.chance.setValue(this.chance);\n }), NoteEventBoxAdapter);\n }\n computeCurveValue(ratio) { return NoteEvent.curveFunc(ratio, this.playCurve); }\n canConsolidate() { return this.playCount > 1; }\n consolidate() {\n const playCount = this.playCount;\n const events = this.collection.unwrap().box.events;\n const adapters = Arrays.create((index) => {\n const a = Math.floor(this.computeCurveValue(index / playCount) * this.duration);\n const b = Math.floor(this.computeCurveValue((index + 1) / playCount) * this.duration);\n return this.copyTo({\n position: Math.floor(this.position + a),\n duration: Math.max(1, b - a),\n playCount: 1,\n events\n });\n }, playCount);\n this.#box.delete();\n return adapters;\n }\n}\n", "import { NoteEventBox, NoteEventCollectionBox } from \"@opendaw/studio-boxes\";\nimport { asDefined, Intervals, Iterables, Notifier, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { EventCollection, NoteEvent } from \"@opendaw/lib-dsp\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { NoteEventBoxAdapter } from \"../event/NoteEventBoxAdapter\";\nexport class NoteEventCollectionBoxAdapter {\n #terminator = new Terminator();\n #context;\n #box;\n #changeNotifier;\n #adapters;\n #events;\n #minPitch = 60;\n #maxPitch = 60;\n #maxDuration = 0;\n #computedExtremas = false;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#changeNotifier = new Notifier();\n this.#adapters = UUID.newSet(adapter => adapter.uuid);\n this.#events = EventCollection.create(NoteEvent.Comparator);\n const addNoteProcedure = (box) => {\n const adapter = asDefined(box.accept({\n visitNoteEventBox: (box) => this.#context.boxAdapters.adapterFor(box, NoteEventBoxAdapter)\n }), `Could not find adapter for ${box}`);\n if (this.#adapters.add(adapter)) {\n this.#events.add(adapter);\n this.#onEventsChanged();\n }\n };\n this.#box.events.pointerHub.incoming().forEach(({ box }) => addNoteProcedure(box));\n this.#terminator.own(this.#box.events.pointerHub.subscribeTransactual({\n onAdd: ({ box }) => addNoteProcedure(box),\n onRemove: ({ box: { address: { uuid } } }) => {\n this.#events.remove(this.#adapters.removeByKey(uuid));\n this.#onEventsChanged();\n }\n }));\n this.#terminator.own(this.#box.owners.pointerHub.subscribeTransactual({\n onAdd: () => this.#changeNotifier.notify(this),\n onRemove: () => this.#changeNotifier.notify(this)\n }));\n }\n copy() {\n const graph = this.#context.boxGraph;\n const boxCopy = NoteEventCollectionBox.create(graph, UUID.generate());\n this.#events.asArray().forEach(source => source.copyTo({ events: boxCopy.events }));\n return this.#context.boxAdapters.adapterFor(boxCopy, NoteEventCollectionBoxAdapter);\n }\n createEvent({ position, duration, velocity, pitch, chance, playCount, cent }) {\n return this.#context.boxAdapters.adapterFor(NoteEventBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.position.setValue(position);\n box.duration.setValue(duration);\n box.velocity.setValue(velocity);\n box.pitch.setValue(pitch);\n box.chance.setValue(chance);\n box.playCount.setValue(playCount);\n box.cent.setValue(cent);\n box.events.refer(this.#box.events);\n }), NoteEventBoxAdapter);\n }\n subscribeChange(observer) { return this.#changeNotifier.subscribe(observer); }\n selectable() { return this.#events.asArray(); }\n selectableAt(coordinates) {\n for (const element of this.#events.asArray()) { // TODO Optimise\n if (element.position <= coordinates.u && coordinates.u < element.complete && element.pitch === coordinates.v) {\n return Iterables.one(element);\n }\n }\n return Iterables.empty();\n }\n selectablesBetween(begin, end) {\n const events = [];\n for (const element of this.#events.asArray()) { // TODO Optimise\n if (Intervals.intersect1D(element.position, element.complete, begin.u, end.u)\n && Intervals.intersect1D(element.pitch, element.pitch, begin.v, end.v)) {\n events.push(element);\n }\n }\n return events;\n }\n requestSorting() {\n this.#events.onIndexingChanged();\n this.onEventPropertyChanged();\n }\n onEventPropertyChanged() { this.#onEventsChanged(); }\n terminate() { this.#terminator.terminate(); }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get numOwners() { return this.#box.owners.pointerHub.filter(Pointers.NoteEventCollection).length; }\n get events() {\n if (!this.#computedExtremas) {\n this.#computeExtremas();\n }\n return this.#events;\n }\n get minPitch() {\n if (!this.#computedExtremas) {\n this.#computeExtremas();\n }\n return this.#minPitch;\n }\n get maxPitch() {\n if (!this.#computedExtremas) {\n this.#computeExtremas();\n }\n return this.#maxPitch;\n }\n get maxDuration() {\n if (!this.#computedExtremas) {\n this.#computeExtremas();\n }\n return this.#maxDuration;\n }\n toString() { return `{NoteEventCollectionBox ${UUID.toString(this.#box.address.uuid)}}`; }\n #onEventsChanged() {\n this.#computedExtremas = false;\n this.#changeNotifier.notify(this);\n }\n #computeExtremas() {\n let min = 127 | 0;\n let max = 0 | 0;\n let maxDuration = 0;\n this.#events.asArray().forEach(({ pitch, duration }) => {\n min = Math.min(min, pitch);\n max = Math.max(max, pitch);\n maxDuration = Math.max(maxDuration, duration);\n });\n this.#minPitch = min;\n this.#maxPitch = max;\n this.#maxDuration = maxDuration;\n this.#computedExtremas = true;\n }\n}\n", "import { DefaultObservableValue, Notifier, Option, safeExecute, Terminable, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { PPQN } from \"@opendaw/lib-dsp\";\nimport { Propagation } from \"@opendaw/lib-box\";\nimport { NoteClipBox } from \"@opendaw/studio-boxes\";\nimport { NoteEventCollectionBoxAdapter } from \"../collection/NoteEventCollectionBoxAdapter\";\nimport { TrackBoxAdapter } from \"../TrackBoxAdapter\";\nexport class NoteClipBoxAdapter {\n type = \"note-clip\";\n #terminator = new Terminator();\n #context;\n #box;\n #selectedValue;\n #changeNotifier;\n #isConstructing; // Prevents stack overflow due to infinite adapter queries\n #eventCollectionSubscription = Terminable.Empty;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#isConstructing = true;\n this.#selectedValue = this.#terminator.own(new DefaultObservableValue(false));\n this.#changeNotifier = this.#terminator.own(new Notifier());\n this.#terminator.ownAll(this.#box.pointerHub.subscribeImmediate({\n onAdd: () => this.#dispatchChange(),\n onRemove: () => this.#dispatchChange()\n }), this.#box.subscribe(Propagation.Children, (_update) => this.#dispatchChange()), this.#box.events.catchupAndSubscribe(({ targetVertex }) => {\n this.#eventCollectionSubscription.terminate();\n this.#eventCollectionSubscription = targetVertex.match({\n none: () => Terminable.Empty,\n some: ({ box }) => this.#context.boxAdapters\n .adapterFor(box, NoteEventCollectionBoxAdapter)\n .subscribeChange(() => this.#dispatchChange())\n });\n this.#dispatchChange();\n }));\n this.#isConstructing = false;\n }\n catchupAndSubscribeSelected(observer) {\n return this.#selectedValue.catchupAndSubscribe(observer);\n }\n subscribeChange(observer) { return this.#changeNotifier.subscribe(observer); }\n accept(visitor) { return safeExecute(visitor.visitNoteClipBoxAdapter, this); }\n consolidate() { this.#box.events.refer(this.optCollection.unwrap().copy().box.owners); }\n clone(consolidate) {\n const events = consolidate ? this.optCollection.unwrap().copy().box.owners : this.#box.events.targetVertex.unwrap();\n NoteClipBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.index.setValue(this.indexField.getValue());\n box.label.setValue(this.label);\n box.hue.setValue(this.hue);\n box.duration.setValue(this.duration);\n box.mute.setValue(this.mute);\n box.clips.refer(this.#box.clips.targetVertex.unwrap());\n box.events.refer(events);\n });\n }\n onSelected() { this.#selectedValue.setValue(true); }\n onDeselected() { this.#selectedValue.setValue(false); }\n get isSelected() { return this.#selectedValue.getValue(); }\n terminate() {\n this.#eventCollectionSubscription.terminate();\n this.#terminator.terminate();\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get duration() { return this.#box.duration.getValue(); }\n get mute() { return this.#box.mute.getValue(); }\n get hue() { return this.#box.hue.getValue(); }\n get events() {\n return this.optCollection.map(collection => collection.events);\n }\n get hasCollection() { return !this.optCollection.isEmpty(); }\n get optCollection() {\n return this.#box.events.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, NoteEventCollectionBoxAdapter));\n }\n get label() { return this.#box.label.getValue(); }\n get trackBoxAdapter() {\n if (this.#isConstructing) {\n return Option.None;\n }\n return this.#box.clips.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, TrackBoxAdapter));\n }\n get isMirrowed() { return this.optCollection.mapOr(adapter => adapter.numOwners > 1, false); }\n get canMirror() { return true; }\n toString() { return `{NoteClipBoxAdapter ${UUID.toString(this.#box.address.uuid)} d: ${PPQN.toString(this.duration)}}`; }\n #dispatchChange() {\n this.#changeNotifier.notify();\n this.trackBoxAdapter.unwrapOrNull()?.clips?.dispatchChange();\n }\n}\n", "import { asDefined } from \"@opendaw/lib-std\";\nimport { ValueClipBoxAdapter } from \"./clip/ValueClipBoxAdapter\";\nimport { AudioClipBoxAdapter } from \"./clip/AudioClipBoxAdapter\";\nimport { NoteClipBoxAdapter } from \"./clip/NoteClipBoxAdapter\";\nexport const ClipAdapters = {\n for: (boxAdapters, box) => asDefined(box.accept({\n visitNoteClipBox: (box) => boxAdapters.adapterFor(box, NoteClipBoxAdapter),\n visitValueClipBox: (box) => boxAdapters.adapterFor(box, ValueClipBoxAdapter),\n visitAudioClipBox: (box) => boxAdapters.adapterFor(box, AudioClipBoxAdapter)\n }), \"\")\n};\n", "import { Pointers } from \"@opendaw/studio-enums\";\nimport { Notifier, Terminator } from \"@opendaw/lib-std\";\nimport { SortedBoxAdapterCollection } from \"../SortedBoxAdapterCollection\";\nimport { ClipAdapters } from \"./ClipBoxAdapter\";\nexport class TrackClips {\n #trackBoxAdapter;\n #terminator;\n #changeNotifier;\n #collection;\n constructor(adapter, boxAdapters) {\n this.#trackBoxAdapter = adapter;\n this.#terminator = new Terminator();\n this.#changeNotifier = this.#terminator.own(new Notifier());\n this.#collection = this.#terminator.own(SortedBoxAdapterCollection.create(adapter.box.clips, box => ClipAdapters.for(boxAdapters, box), Pointers.ClipCollection));\n this.#collection.subscribe({\n onAdd: () => this.dispatchChange(),\n onRemove: () => this.dispatchChange(),\n onReorder: () => this.dispatchChange()\n });\n }\n get trackBoxAdapter() { return this.#trackBoxAdapter; }\n get collection() { return this.#collection; }\n dispatchChange() { this.#changeNotifier.notify(); }\n subscribeChanges(observer) { return this.#changeNotifier.subscribe(observer); }\n terminate() { this.#terminator.terminate(); }\n}\n", "import { AudioRegionBox } from \"@opendaw/studio-boxes\";\nimport { Notifier, Option, safeExecute, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { Propagation } from \"@opendaw/lib-box\";\nimport { PPQN } from \"@opendaw/lib-dsp\";\nimport { TrackBoxAdapter } from \"../TrackBoxAdapter\";\nimport { AudioFileBoxAdapter } from \"../../audio/AudioFileBoxAdapter\";\nexport class AudioRegionBoxAdapter {\n type = \"audio-region\";\n #terminator;\n #context;\n #box;\n #changeNotifier;\n #fileAdapter = Option.None;\n #fileSubscription = Option.None;\n #isSelected;\n #constructing;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#terminator = new Terminator();\n this.#changeNotifier = new Notifier();\n this.#isSelected = false;\n this.#constructing = true;\n // TODO For unsyned audio samples\n // this.#terminator.own(this.#project.timelineBox.bpm.subscribe(() => this.trackAdapter.unwrapOrNull()?.dispatchChange()))\n this.#terminator.ownAll(this.#box.pointerHub.subscribeImmediate({\n onAdd: () => this.#dispatchChange(),\n onRemove: () => this.#dispatchChange()\n }), this.#box.file.catchupAndSubscribe((pointerField) => {\n this.#fileAdapter = pointerField.targetVertex.map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, AudioFileBoxAdapter));\n this.#fileSubscription.ifSome(subscription => subscription.terminate());\n this.#fileSubscription = this.#fileAdapter.map(adapter => adapter.getOrCreateLoader().subscribe(() => this.#dispatchChange()));\n }), this.#box.subscribe(Propagation.Children, (update) => {\n if (this.trackBoxAdapter.isEmpty()) {\n return;\n }\n if (update.type === \"primitive\" || update.type === \"pointer\") {\n const track = this.trackBoxAdapter.unwrap();\n if (this.#box.position.address.equals(update.address)) {\n track.regions.onIndexingChanged();\n this.#dispatchChange();\n }\n else {\n this.#dispatchChange();\n }\n }\n }), {\n terminate: () => {\n this.#fileSubscription.ifSome(subscription => subscription.terminate());\n this.#fileSubscription = Option.None;\n }\n });\n this.#constructing = false;\n }\n subscribeChange(observer) { return this.#changeNotifier.subscribe(observer); }\n accept(visitor) {\n return safeExecute(visitor.visitAudioRegionBoxAdapter, this);\n }\n onSelected() {\n this.#isSelected = true;\n this.#dispatchChange();\n }\n onDeselected() {\n this.#isSelected = false;\n this.#dispatchChange();\n }\n get isSelected() { return this.#isSelected; }\n terminate() { this.#terminator.terminate(); }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get position() { return this.#box.position.getValue(); }\n get duration() {\n const duration = this.#box.duration.getValue();\n if (duration === 0) { // signals no synchronization with track bpm\n const fileBoxAdapter = this.#fileAdapter.unwrap(\"Cannot compute duration without file\");\n const startInSeconds = fileBoxAdapter.startInSeconds;\n const endInSeconds = fileBoxAdapter.endInSeconds;\n const totalInSeconds = endInSeconds - startInSeconds;\n return PPQN.secondsToPulses(totalInSeconds, this.#context.bpm);\n }\n return duration;\n }\n get complete() { return this.position + this.duration; }\n get loopOffset() { return this.#box.loopOffset.getValue(); }\n get loopDuration() { return this.#box.loopDuration.getValue(); }\n get offset() { return this.position - this.loopOffset; }\n get mute() { return this.#box.mute.getValue(); }\n get hue() { return this.#box.hue.getValue(); }\n get gain() { return this.#box.gain.getValue(); }\n get file() { return this.#fileAdapter.unwrap(\"Cannot access file.\"); }\n get hasCollection() { return this.#fileAdapter.nonEmpty(); }\n get optCollection() { return Option.None; }\n get label() {\n if (this.#fileAdapter.isEmpty()) {\n return \"No Audio File\";\n }\n const state = this.#fileAdapter.unwrap().getOrCreateLoader().state;\n if (state.type === \"progress\") {\n return `${Math.round(state.progress * 100)}%`;\n }\n if (state.type === \"error\") {\n return String(state.reason);\n }\n return this.#box.label.getValue();\n }\n get isMirrowed() { return false; }\n get canMirror() { return false; }\n get trackBoxAdapter() {\n return this.#box.regions.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, TrackBoxAdapter));\n }\n copyTo(params) {\n return this.#context.boxAdapters.adapterFor(AudioRegionBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.position.setValue(params?.position ?? this.position);\n box.duration.setValue(params?.duration ?? this.duration);\n box.loopOffset.setValue(params?.loopOffset ?? this.loopOffset);\n box.loopDuration.setValue(params?.loopDuration ?? this.loopDuration);\n box.regions.refer(params?.track ?? this.#box.regions.targetVertex.unwrap());\n box.file.refer(this.#box.file.targetVertex.unwrap());\n box.mute.setValue(this.mute);\n box.hue.setValue(this.hue);\n box.label.setValue(this.label);\n box.gain.setValue(this.gain);\n }), AudioRegionBoxAdapter);\n }\n consolidate() {\n // TODO This needs to done by creating a new audio file\n }\n canFlatten(_regions) { return false; }\n flatten(_regions) {\n // TODO This needs to done by creating a new audio file\n return Option.None;\n }\n toString() { return `{AudioRegionBoxAdapter ${UUID.toString(this.#box.address.uuid)}}`; }\n #dispatchChange() {\n if (this.#constructing) {\n return;\n }\n this.#changeNotifier.notify();\n this.trackBoxAdapter.unwrapOrNull()?.regions?.dispatchChange();\n }\n}\n", "import { LoopableRegion, PPQN, RegionCollection } from \"@opendaw/lib-dsp\";\nimport { Arrays, Notifier, Option, safeExecute, Terminable, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { Propagation } from \"@opendaw/lib-box\";\nimport { NoteEventCollectionBox, NoteRegionBox } from \"@opendaw/studio-boxes\";\nimport { TrackBoxAdapter } from \"../TrackBoxAdapter\";\nimport { NoteEventCollectionBoxAdapter } from \"../collection/NoteEventCollectionBoxAdapter\";\nexport class NoteRegionBoxAdapter {\n type = \"note-region\";\n #terminator = new Terminator();\n #context;\n #box;\n #changeNotifier;\n #isConstructing; // Prevents stack overflow due to infinite adapter queries\n #isSelected;\n #eventCollectionSubscription = Terminable.Empty;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#changeNotifier = new Notifier();\n this.#isSelected = false;\n this.#isConstructing = true;\n this.#terminator.ownAll(this.#box.pointerHub.subscribeImmediate({\n onAdd: () => this.#dispatchChange(),\n onRemove: () => this.#dispatchChange()\n }), this.#box.subscribe(Propagation.Children, (update) => {\n if (this.trackBoxAdapter.isEmpty()) {\n return;\n }\n if (update.type === \"primitive\" || update.type === \"pointer\") {\n const track = this.trackBoxAdapter.unwrap();\n if (this.#box.position.address.equals(update.address)) {\n track.regions.onIndexingChanged();\n this.#dispatchChange();\n }\n else {\n this.#dispatchChange();\n }\n }\n }), this.#box.events.catchupAndSubscribe(({ targetVertex }) => {\n this.#eventCollectionSubscription.terminate();\n this.#eventCollectionSubscription = targetVertex.match({\n none: () => Terminable.Empty,\n some: ({ box }) => this.#context.boxAdapters\n .adapterFor(box, NoteEventCollectionBoxAdapter)\n .subscribeChange(() => this.#dispatchChange())\n });\n this.#dispatchChange();\n }));\n this.#isConstructing = false;\n }\n subscribeChange(observer) { return this.#changeNotifier.subscribe(observer); }\n accept(visitor) { return safeExecute(visitor.visitNoteRegionBoxAdapter, this); }\n onSelected() {\n this.#isSelected = true;\n this.#dispatchChange();\n }\n onDeselected() {\n this.#isSelected = false;\n this.#dispatchChange();\n }\n get isSelected() { return this.#isSelected; }\n *iterateActiveNotesAt(position) {\n const optContent = this.optCollection;\n if (optContent.isEmpty()) {\n return;\n }\n const content = optContent.unwrap();\n const local = LoopableRegion.globalToLocal(this, position);\n for (const event of content.events.iterateFrom(local - content.maxDuration)) {\n if (local < event.position) {\n return;\n }\n if (local < event.complete) {\n yield event.copyAsNoteEvent();\n }\n }\n }\n terminate() {\n this.#eventCollectionSubscription.terminate();\n this.#terminator.terminate();\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get position() { return this.#box.position.getValue(); }\n get duration() { return this.#box.duration.getValue(); }\n get loopOffset() { return this.#box.loopOffset.getValue(); }\n get loopDuration() { return this.#box.loopDuration.getValue(); }\n get offset() { return this.position - this.loopOffset; }\n get complete() { return this.position + this.duration; }\n get mute() { return this.#box.mute.getValue(); }\n get hue() { return this.#box.hue.getValue(); }\n get hasCollection() { return this.optCollection.nonEmpty(); }\n get optCollection() {\n return this.#box.events.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, NoteEventCollectionBoxAdapter));\n }\n get label() { return this.#box.label.getValue(); }\n get trackBoxAdapter() {\n if (this.#isConstructing) {\n return Option.None;\n }\n return this.#box.regions.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, TrackBoxAdapter));\n }\n get isMirrowed() { return this.optCollection.mapOr(adapter => adapter.numOwners > 1, false); }\n get canMirror() { return true; }\n copyTo(params) {\n const eventCollection = this.optCollection.unwrap(\"Cannot make copy without event-collection\");\n const eventTarget = params?.consolidate === true\n ? eventCollection.copy().box.owners\n : eventCollection.box.owners;\n return this.#context.boxAdapters.adapterFor(NoteRegionBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.position.setValue(params?.position ?? this.position);\n box.duration.setValue(params?.duration ?? this.duration);\n box.loopOffset.setValue(params?.loopOffset ?? this.loopOffset);\n box.loopDuration.setValue(params?.loopDuration ?? this.loopDuration);\n box.hue.setValue(this.hue);\n box.label.setValue(this.label);\n box.mute.setValue(this.mute);\n box.events.refer(eventTarget);\n box.regions.refer(params?.track ?? this.#box.regions.targetVertex.unwrap());\n }), NoteRegionBoxAdapter);\n }\n consolidate() {\n if (!this.isMirrowed) {\n return;\n }\n this.optCollection.ifSome(source => {\n const graph = this.#context.boxGraph;\n const target = NoteEventCollectionBox.create(graph, UUID.generate());\n source.events.asArray().forEach(adapter => adapter.copyTo({ events: target.events }));\n this.#box.events.refer(target.owners);\n });\n }\n canFlatten(regions) {\n return regions.length > 0 && Arrays.satisfy(regions, (a, b) => a.trackBoxAdapter.contains(b.trackBoxAdapter.unwrap()))\n && regions.every(region => region.isSelected && region instanceof NoteRegionBoxAdapter);\n }\n flatten(regions) {\n if (!this.canFlatten(regions)) {\n return Option.None;\n }\n const graph = this.#context.boxGraph;\n const sorted = regions.toSorted(RegionCollection.Comparator);\n const first = Arrays.getFirst(sorted, \"Internal error (no first)\");\n const last = Arrays.getLast(sorted, \"Internal error (no last)\");\n const rangeMin = first.position;\n const rangeMax = last.position + last.duration;\n const trackBoxAdapter = first.trackBoxAdapter.unwrap();\n const collectionBox = NoteEventCollectionBox.create(graph, UUID.generate());\n const overlapping = Array.from(trackBoxAdapter.regions.collection.iterateRange(rangeMin, rangeMax));\n overlapping\n .filter(region => region.isSelected)\n .forEach(anyRegion => {\n const region = anyRegion; // we made that sure in canFlatten\n for (const { resultStart, resultEnd, rawStart } of LoopableRegion.locateLoops(region, region.position, region.complete)) {\n const searchStart = Math.floor(resultStart - rawStart);\n const searchEnd = Math.floor(resultEnd - rawStart);\n for (const event of region.optCollection.unwrap().events.iterateRange(searchStart, searchEnd)) {\n event.copyTo({\n position: event.position + rawStart - first.position,\n events: collectionBox.events\n });\n }\n }\n });\n overlapping.forEach(({ box }) => box.delete());\n return Option.wrap(NoteRegionBox.create(graph, UUID.generate(), box => {\n box.position.setValue(rangeMin);\n box.duration.setValue(rangeMax - rangeMin);\n box.loopDuration.setValue(rangeMax - rangeMin);\n box.loopOffset.setValue(0);\n box.hue.setValue(this.hue);\n box.mute.setValue(this.mute);\n box.label.setValue(this.label);\n box.events.refer(collectionBox.owners);\n box.regions.refer(trackBoxAdapter.box.regions);\n }));\n }\n toString() { return `{NoteRegionBoxAdapter ${UUID.toString(this.#box.address.uuid)} p: ${PPQN.toString(this.position)}, c: ${PPQN.toString(this.complete)}}`; }\n #dispatchChange() {\n this.#changeNotifier.notify();\n this.trackBoxAdapter.unwrapOrNull()?.regions?.dispatchChange();\n }\n}\n", "import { LoopableRegion, PPQN, RegionCollection } from \"@opendaw/lib-dsp\";\nimport { Arrays, Notifier, Option, safeExecute, Terminable, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { Propagation } from \"@opendaw/lib-box\";\nimport { TrackBoxAdapter } from \"../TrackBoxAdapter\";\nimport { ValueEventCollectionBoxAdapter } from \"../collection/ValueEventCollectionBoxAdapter\";\nimport { ValueEventCollectionBox, ValueRegionBox } from \"@opendaw/studio-boxes\";\nexport class ValueRegionBoxAdapter {\n type = \"value-region\";\n #terminator = new Terminator();\n #context;\n #box;\n #changeNotifier;\n #isSelected;\n #isConstructing; // Prevents stack overflow due to infinite adapter queries\n #eventCollectionSubscription = Terminable.Empty;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#isConstructing = true;\n this.#changeNotifier = new Notifier();\n this.#isSelected = false;\n this.#terminator.own(this.#box.pointerHub.subscribeImmediate({\n onAdd: () => this.#dispatchChange(),\n onRemove: () => this.#dispatchChange()\n }));\n this.#terminator.own(this.#box.subscribe(Propagation.Children, (update) => {\n if (this.trackBoxAdapter.isEmpty()) {\n return;\n }\n if (update.type === \"primitive\" || update.type === \"pointer\") {\n const track = this.trackBoxAdapter.unwrap();\n if (this.#box.position.address.equals(update.address)) {\n track.regions.onIndexingChanged();\n this.#dispatchChange();\n }\n else {\n this.#dispatchChange();\n }\n }\n }));\n this.#terminator.own(this.#box.events.catchupAndSubscribe(({ targetVertex }) => {\n this.#eventCollectionSubscription.terminate();\n this.#eventCollectionSubscription = targetVertex.match({\n none: () => Terminable.Empty,\n some: ({ box }) => this.#context.boxAdapters\n .adapterFor(box, ValueEventCollectionBoxAdapter)\n .subscribeChange(() => this.#dispatchChange())\n });\n this.#dispatchChange();\n }));\n this.#isConstructing = false;\n }\n valueAt(position, fallback) {\n const content = this.optCollection;\n return content.isEmpty() ? fallback : content.unwrap().valueAt(LoopableRegion.globalToLocal(this, position), fallback);\n }\n incomingValue(fallback) { return this.valueAt(this.position, fallback); }\n outgoingValue(fallback) {\n const optContent = this.optCollection;\n if (optContent.isEmpty()) {\n return fallback;\n }\n const content = optContent.unwrap();\n const endsOnLoopPass = (this.complete - this.offset) % this.loopDuration === 0;\n return endsOnLoopPass\n ? content.valueAt(this.loopDuration, fallback)\n : content.valueAt(LoopableRegion.globalToLocal(this, this.complete), fallback);\n }\n subscribeChange(observer) { return this.#changeNotifier.subscribe(observer); }\n accept(visitor) {\n return safeExecute(visitor.visitValueRegionBoxAdapter, this);\n }\n onSelected() {\n this.#isSelected = true;\n this.#dispatchChange();\n }\n onDeselected() {\n this.#isSelected = false;\n this.#dispatchChange();\n }\n get isSelected() { return this.#isSelected; }\n onValuesPropertyChanged() { this.#dispatchChange(); }\n onValuesSortingChanged() { this.onValuesPropertyChanged(); }\n terminate() {\n this.#eventCollectionSubscription.terminate();\n this.#terminator.terminate();\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get position() { return this.#box.position.getValue(); }\n get duration() { return this.#box.duration.getValue(); }\n get loopOffset() { return this.#box.loopOffset.getValue(); }\n get loopDuration() { return this.#box.loopDuration.getValue(); }\n get offset() { return this.position - this.loopOffset; }\n get complete() { return this.position + this.duration; }\n get mute() { return this.#box.mute.getValue(); }\n get hue() { return this.#box.hue.getValue(); }\n get hasCollection() { return !this.optCollection.isEmpty(); }\n get events() {\n return this.optCollection.map(collection => collection.events);\n }\n get optCollection() {\n return this.#box.events.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, ValueEventCollectionBoxAdapter));\n }\n get label() { return this.#box.label.getValue(); }\n get trackBoxAdapter() {\n if (this.#isConstructing) {\n return Option.None;\n }\n return this.#box.regions.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, TrackBoxAdapter));\n }\n get isMirrowed() { return this.optCollection.mapOr(adapter => adapter.numOwners > 1, false); }\n get canMirror() { return true; }\n copyTo(params) {\n const eventCollection = this.optCollection.unwrap(\"Cannot make copy without event-collection\");\n const eventTarget = params?.consolidate === true\n ? eventCollection.copy().box.owners\n : eventCollection.box.owners;\n return this.#context.boxAdapters.adapterFor(ValueRegionBox.create(this.#context.boxGraph, UUID.generate(), box => {\n box.position.setValue(params?.position ?? this.position);\n box.duration.setValue(params?.duration ?? this.duration);\n box.loopOffset.setValue(params?.loopOffset ?? this.loopOffset);\n box.loopDuration.setValue(params?.loopDuration ?? this.loopDuration);\n box.hue.setValue(this.hue);\n box.label.setValue(this.label);\n box.mute.setValue(this.mute);\n box.events.refer(eventTarget);\n box.regions.refer(params?.track ?? this.#box.regions.targetVertex.unwrap());\n }), ValueRegionBoxAdapter);\n }\n consolidate() {\n if (!this.isMirrowed) {\n return;\n }\n this.events.ifSome(events => {\n const graph = this.#context.boxGraph;\n const collectionBox = ValueEventCollectionBox.create(graph, UUID.generate());\n events.asArray().forEach(adapter => adapter.copyTo({ events: collectionBox.events }));\n this.#box.events.refer(collectionBox.owners);\n });\n }\n canFlatten(_regions) {\n return false;\n /*return regions.length > 0 && Arrays.satisfy(regions, (a, b) => a.trackAdapter.contains(b.trackAdapter.unwrap()))\n && regions.every(region => region.isSelected && region instanceof ValueRegionBoxAdapter)*/\n }\n flatten(regions) {\n if (!this.canFlatten(regions)) {\n return Option.None;\n }\n const graph = this.#context.boxGraph;\n const sorted = regions.toSorted(RegionCollection.Comparator);\n const first = Arrays.getFirst(sorted, \"Internal error (no first)\");\n const last = Arrays.getLast(sorted, \"Internal error (no last)\");\n const rangeMin = first.position;\n const rangeMax = last.position + last.duration;\n const trackBoxAdapter = first.trackBoxAdapter.unwrap();\n const collectionBox = ValueEventCollectionBox.create(graph, UUID.generate());\n const overlapping = Array.from(trackBoxAdapter.regions.collection.iterateRange(rangeMin, rangeMax));\n overlapping\n .filter(region => region.isSelected)\n .forEach(anyRegion => {\n const region = anyRegion; // we made that sure in canFlatten\n for (const { resultStart, resultEnd, rawStart } of LoopableRegion.locateLoops(region, region.position, region.complete)) {\n const searchStart = Math.floor(resultStart - rawStart);\n const searchEnd = Math.floor(resultEnd - rawStart);\n for (const _event of region.events.unwrap().iterateRange(searchStart, searchEnd)) {\n // TODO Flatten\n }\n }\n });\n overlapping.forEach(({ box }) => box.delete());\n return Option.wrap(ValueRegionBox.create(graph, UUID.generate(), box => {\n box.position.setValue(rangeMin);\n box.duration.setValue(rangeMax - rangeMin);\n box.loopDuration.setValue(rangeMax - rangeMin);\n box.loopOffset.setValue(0);\n box.hue.setValue(this.hue);\n box.mute.setValue(this.mute);\n box.label.setValue(this.label);\n box.events.refer(collectionBox.owners);\n box.regions.refer(trackBoxAdapter.box.regions);\n }));\n }\n toString() { return `{ValueRegionBoxAdapter ${UUID.toString(this.#box.address.uuid)} p: ${PPQN.toString(this.position)}, c: ${PPQN.toString(this.complete)}}`; }\n #dispatchChange() {\n this.#changeNotifier.notify();\n this.trackBoxAdapter.unwrapOrNull()?.regions?.dispatchChange();\n }\n}\n", "import { asDefined } from \"@opendaw/lib-std\";\nimport { AudioRegionBoxAdapter } from \"./region/AudioRegionBoxAdapter\";\nimport { NoteRegionBoxAdapter } from \"./region/NoteRegionBoxAdapter\";\nimport { ValueRegionBoxAdapter } from \"./region/ValueRegionBoxAdapter\";\nexport const RegionComparator = (a, b) => a.position - b.position;\nexport const RegionAdapters = {\n for: (boxAdapters, box) => asDefined(box.accept({\n visitNoteRegionBox: (box) => boxAdapters.adapterFor(box, NoteRegionBoxAdapter),\n visitAudioRegionBox: (box) => boxAdapters.adapterFor(box, AudioRegionBoxAdapter),\n visitValueRegionBox: (box) => boxAdapters.adapterFor(box, ValueRegionBoxAdapter)\n }), \"\")\n};\n", "import { RegionCollection } from \"@opendaw/lib-dsp\";\nimport { assert, Notifier, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { RegionAdapters, RegionComparator } from \"./RegionBoxAdapter\";\nexport class TrackRegions {\n #trackBoxAdapter;\n #terminator;\n #changeNotifier;\n #collection;\n #adapters;\n constructor(adapter, boxAdapters) {\n this.#trackBoxAdapter = adapter;\n this.#terminator = new Terminator();\n this.#changeNotifier = this.#terminator.own(new Notifier());\n this.#collection = RegionCollection.create(RegionComparator);\n this.#adapters = UUID.newSet(adapter => adapter.uuid);\n this.#terminator.ownAll(this.#trackBoxAdapter.box.regions.pointerHub.catchupAndSubscribeTransactual({\n onAdd: ({ box }) => {\n const adapter = RegionAdapters.for(boxAdapters, box);\n const added = this.#adapters.add(adapter);\n assert(added, `Cannot add ${box}`);\n this.#collection.add(adapter);\n this.dispatchChange();\n },\n onRemove: ({ box: { address: { uuid } } }) => {\n this.#collection.remove(this.#adapters.removeByKey(uuid));\n this.dispatchChange();\n }\n }, Pointers.RegionCollection));\n }\n get trackBoxAdapter() { return this.#trackBoxAdapter; }\n get collection() { return this.#collection; }\n get adapters() { return this.#adapters; }\n onIndexingChanged() {\n this.#collection.onIndexingChanged();\n this.dispatchChange();\n }\n subscribeChanges(observer) { return this.#changeNotifier.subscribe(observer); }\n dispatchChange() { this.#changeNotifier.notify(); }\n terminate() { this.#terminator.terminate(); }\n}\n", "export var IconSymbol;\n(function (IconSymbol) {\n IconSymbol[IconSymbol[\"Rectangle\"] = 0] = \"Rectangle\";\n IconSymbol[IconSymbol[\"Checkbox\"] = 1] = \"Checkbox\";\n IconSymbol[IconSymbol[\"Panel\"] = 2] = \"Panel\";\n IconSymbol[IconSymbol[\"MainMenu\"] = 3] = \"MainMenu\";\n IconSymbol[IconSymbol[\"Dropdown\"] = 4] = \"Dropdown\";\n IconSymbol[IconSymbol[\"AudioDevice\"] = 5] = \"AudioDevice\";\n IconSymbol[IconSymbol[\"GuitarTab\"] = 6] = \"GuitarTab\";\n IconSymbol[IconSymbol[\"Effects\"] = 7] = \"Effects\";\n IconSymbol[IconSymbol[\"Flask\"] = 8] = \"Flask\";\n IconSymbol[IconSymbol[\"Robot\"] = 9] = \"Robot\";\n IconSymbol[IconSymbol[\"NotePad\"] = 10] = \"NotePad\";\n IconSymbol[IconSymbol[\"Pencil\"] = 11] = \"Pencil\";\n IconSymbol[IconSymbol[\"Waveform\"] = 12] = \"Waveform\";\n IconSymbol[IconSymbol[\"Mix\"] = 13] = \"Mix\";\n IconSymbol[IconSymbol[\"Adsr\"] = 14] = \"Adsr\";\n IconSymbol[IconSymbol[\"Dial\"] = 15] = \"Dial\";\n IconSymbol[IconSymbol[\"Record\"] = 16] = \"Record\";\n IconSymbol[IconSymbol[\"Play\"] = 17] = \"Play\";\n IconSymbol[IconSymbol[\"Stop\"] = 18] = \"Stop\";\n IconSymbol[IconSymbol[\"Loop\"] = 19] = \"Loop\";\n IconSymbol[IconSymbol[\"Timeline\"] = 20] = \"Timeline\";\n IconSymbol[IconSymbol[\"Region\"] = 21] = \"Region\";\n IconSymbol[IconSymbol[\"Box\"] = 22] = \"Box\";\n IconSymbol[IconSymbol[\"Mixing\"] = 23] = \"Mixing\";\n IconSymbol[IconSymbol[\"Vinyl\"] = 24] = \"Vinyl\";\n IconSymbol[IconSymbol[\"Help\"] = 25] = \"Help\";\n IconSymbol[IconSymbol[\"Metronome\"] = 26] = \"Metronome\";\n IconSymbol[IconSymbol[\"System\"] = 27] = \"System\";\n IconSymbol[IconSymbol[\"Add\"] = 28] = \"Add\";\n IconSymbol[IconSymbol[\"Subtract\"] = 29] = \"Subtract\";\n IconSymbol[IconSymbol[\"Peak\"] = 30] = \"Peak\";\n IconSymbol[IconSymbol[\"LowPass\"] = 31] = \"LowPass\";\n IconSymbol[IconSymbol[\"HighPass\"] = 32] = \"HighPass\";\n IconSymbol[IconSymbol[\"LowShelf\"] = 33] = \"LowShelf\";\n IconSymbol[IconSymbol[\"HighShelf\"] = 34] = \"HighShelf\";\n IconSymbol[IconSymbol[\"RoundUp\"] = 35] = \"RoundUp\";\n IconSymbol[IconSymbol[\"RoundDown\"] = 36] = \"RoundDown\";\n IconSymbol[IconSymbol[\"Mute\"] = 37] = \"Mute\";\n IconSymbol[IconSymbol[\"Solo\"] = 38] = \"Solo\";\n IconSymbol[IconSymbol[\"Exclude\"] = 39] = \"Exclude\";\n IconSymbol[IconSymbol[\"Menu\"] = 40] = \"Menu\";\n IconSymbol[IconSymbol[\"Pointer\"] = 41] = \"Pointer\";\n IconSymbol[IconSymbol[\"Eraser\"] = 42] = \"Eraser\";\n IconSymbol[IconSymbol[\"Scissors\"] = 43] = \"Scissors\";\n IconSymbol[IconSymbol[\"Tape\"] = 44] = \"Tape\";\n IconSymbol[IconSymbol[\"CollapseDown\"] = 45] = \"CollapseDown\";\n IconSymbol[IconSymbol[\"FileList\"] = 46] = \"FileList\";\n IconSymbol[IconSymbol[\"Close\"] = 47] = \"Close\";\n IconSymbol[IconSymbol[\"DragConnections\"] = 48] = \"DragConnections\";\n IconSymbol[IconSymbol[\"Heart\"] = 49] = \"Heart\";\n IconSymbol[IconSymbol[\"Merge\"] = 50] = \"Merge\";\n IconSymbol[IconSymbol[\"SpeakerHeadphone\"] = 51] = \"SpeakerHeadphone\";\n IconSymbol[IconSymbol[\"AudioBus\"] = 52] = \"AudioBus\";\n IconSymbol[IconSymbol[\"DrumSet\"] = 53] = \"DrumSet\";\n IconSymbol[IconSymbol[\"BassGuitar\"] = 54] = \"BassGuitar\";\n IconSymbol[IconSymbol[\"Guitar\"] = 55] = \"Guitar\";\n IconSymbol[IconSymbol[\"Saxophone\"] = 56] = \"Saxophone\";\n IconSymbol[IconSymbol[\"Microphone\"] = 57] = \"Microphone\";\n IconSymbol[IconSymbol[\"New\"] = 58] = \"New\";\n IconSymbol[IconSymbol[\"Piano\"] = 59] = \"Piano\";\n IconSymbol[IconSymbol[\"ExpandWidth\"] = 60] = \"ExpandWidth\";\n IconSymbol[IconSymbol[\"OpenDAW\"] = 61] = \"OpenDAW\";\n IconSymbol[IconSymbol[\"Automation\"] = 62] = \"Automation\";\n IconSymbol[IconSymbol[\"Embed\"] = 63] = \"Embed\";\n IconSymbol[IconSymbol[\"Popout\"] = 64] = \"Popout\";\n IconSymbol[IconSymbol[\"Minimized\"] = 65] = \"Minimized\";\n IconSymbol[IconSymbol[\"Maximized\"] = 66] = \"Maximized\";\n IconSymbol[IconSymbol[\"Search\"] = 67] = \"Search\";\n IconSymbol[IconSymbol[\"Generator\"] = 68] = \"Generator\";\n IconSymbol[IconSymbol[\"Groove\"] = 69] = \"Groove\";\n IconSymbol[IconSymbol[\"Table\"] = 70] = \"Table\";\n IconSymbol[IconSymbol[\"Note\"] = 71] = \"Note\";\n IconSymbol[IconSymbol[\"Exit\"] = 72] = \"Exit\";\n IconSymbol[IconSymbol[\"Start\"] = 73] = \"Start\";\n IconSymbol[IconSymbol[\"Duration\"] = 74] = \"Duration\";\n IconSymbol[IconSymbol[\"Velocity\"] = 75] = \"Velocity\";\n IconSymbol[IconSymbol[\"Random\"] = 76] = \"Random\";\n IconSymbol[IconSymbol[\"Divide\"] = 77] = \"Divide\";\n IconSymbol[IconSymbol[\"Curve\"] = 78] = \"Curve\";\n IconSymbol[IconSymbol[\"Primary\"] = 79] = \"Primary\";\n IconSymbol[IconSymbol[\"Clips\"] = 80] = \"Clips\";\n IconSymbol[IconSymbol[\"NoAudio\"] = 81] = \"NoAudio\";\n IconSymbol[IconSymbol[\"Unknown\"] = 82] = \"Unknown\";\n IconSymbol[IconSymbol[\"UserFolder\"] = 83] = \"UserFolder\";\n IconSymbol[IconSymbol[\"CloudFolder\"] = 84] = \"CloudFolder\";\n IconSymbol[IconSymbol[\"Run\"] = 85] = \"Run\";\n IconSymbol[IconSymbol[\"Insert\"] = 86] = \"Insert\";\n IconSymbol[IconSymbol[\"ArrayDown\"] = 87] = \"ArrayDown\";\n IconSymbol[IconSymbol[\"Sun\"] = 88] = \"Sun\";\n IconSymbol[IconSymbol[\"Book\"] = 89] = \"Book\";\n IconSymbol[IconSymbol[\"Stack\"] = 90] = \"Stack\";\n IconSymbol[IconSymbol[\"EditBox\"] = 91] = \"EditBox\";\n IconSymbol[IconSymbol[\"Delete\"] = 92] = \"Delete\";\n IconSymbol[IconSymbol[\"Time\"] = 93] = \"Time\";\n IconSymbol[IconSymbol[\"EQ\"] = 94] = \"EQ\";\n IconSymbol[IconSymbol[\"Cube\"] = 95] = \"Cube\";\n IconSymbol[IconSymbol[\"NanoWave\"] = 96] = \"NanoWave\";\n IconSymbol[IconSymbol[\"Midi\"] = 97] = \"Midi\";\n IconSymbol[IconSymbol[\"DinSlot\"] = 98] = \"DinSlot\";\n IconSymbol[IconSymbol[\"VUMeter\"] = 99] = \"VUMeter\";\n IconSymbol[IconSymbol[\"Playfield\"] = 100] = \"Playfield\";\n IconSymbol[IconSymbol[\"Invert\"] = 101] = \"Invert\";\n IconSymbol[IconSymbol[\"Headphone\"] = 102] = \"Headphone\";\n IconSymbol[IconSymbol[\"Stereo\"] = 103] = \"Stereo\";\n IconSymbol[IconSymbol[\"AutoGain\"] = 104] = \"AutoGain\";\n IconSymbol[IconSymbol[\"AudioFile\"] = 105] = \"AudioFile\";\n IconSymbol[IconSymbol[\"Tool\"] = 106] = \"Tool\";\n IconSymbol[IconSymbol[\"Focus\"] = 107] = \"Focus\";\n IconSymbol[IconSymbol[\"Swap\"] = 108] = \"Swap\";\n IconSymbol[IconSymbol[\"Connected\"] = 109] = \"Connected\";\n IconSymbol[IconSymbol[\"Disconnected\"] = 110] = \"Disconnected\";\n IconSymbol[IconSymbol[\"Zeitgeist\"] = 111] = \"Zeitgeist\";\n})(IconSymbol || (IconSymbol = {}));\n(function (IconSymbol) {\n IconSymbol.toName = (symbol) => IconSymbol[symbol];\n IconSymbol.fromName = (name) => IconSymbol[name] ?? IconSymbol.Rectangle;\n})(IconSymbol || (IconSymbol = {}));\n", "import { IconSymbol } from \"../IconSymbol\";\nexport var TrackType;\n(function (TrackType) {\n TrackType[TrackType[\"Undefined\"] = 0] = \"Undefined\";\n TrackType[TrackType[\"Notes\"] = 1] = \"Notes\";\n TrackType[TrackType[\"Audio\"] = 2] = \"Audio\";\n TrackType[TrackType[\"Value\"] = 3] = \"Value\";\n})(TrackType || (TrackType = {}));\n(function (TrackType) {\n TrackType.toLabelString = (type) => {\n switch (type) {\n case TrackType.Audio:\n return \"Audio\";\n case TrackType.Notes:\n return \"Notes\";\n case TrackType.Value:\n return \"Automation\";\n case TrackType.Undefined:\n default:\n return \"N/A\";\n }\n };\n TrackType.toIconSymbol = (type) => {\n switch (type) {\n case TrackType.Audio:\n return IconSymbol.Waveform;\n case TrackType.Notes:\n return IconSymbol.Piano;\n case TrackType.Value:\n return IconSymbol.Automation;\n case TrackType.Undefined:\n return IconSymbol.AudioBus;\n default:\n return IconSymbol.Unknown;\n }\n };\n})(TrackType || (TrackType = {}));\n", "import { Arrays, asDefined, assert, panic, UUID } from \"@opendaw/lib-std\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { TrackType } from \"./timeline/TrackType\";\nexport var DeviceAccepts;\n(function (DeviceAccepts) {\n DeviceAccepts.toTrackType = (type) => {\n switch (type) {\n case \"midi\":\n return TrackType.Notes;\n case \"audio\":\n return TrackType.Audio;\n default:\n return panic();\n }\n };\n})(DeviceAccepts || (DeviceAccepts = {}));\nexport var Devices;\n(function (Devices) {\n Devices.isAny = (adapter) => adapter !== null && typeof adapter === \"object\" && \"type\" in adapter\n && (adapter.type === \"midi-effect\" || adapter.type === \"bus\"\n || adapter.type === \"instrument\" || adapter.type === \"audio-effect\");\n Devices.isEffect = (adapter) => adapter !== null && typeof adapter === \"object\" && \"type\" in adapter\n && (adapter.type === \"midi-effect\" || adapter.type === \"audio-effect\");\n Devices.isInstrument = (adapter) => adapter !== null && typeof adapter === \"object\" && \"type\" in adapter && adapter.type === \"instrument\";\n Devices.isMidiEffect = (adapter) => adapter !== null && typeof adapter === \"object\" && \"type\" in adapter && adapter.type === \"midi-effect\";\n Devices.isAudioEffect = (adapter) => adapter !== null && typeof adapter === \"object\" && \"type\" in adapter && adapter.type === \"audio-effect\";\n Devices.isHost = (value) => value !== null && typeof value === \"object\" && \"class\" in value && value.class === \"device-host\";\n Devices.fetchEffectIndex = (box) => asDefined(box.accept({\n visitArpeggioDeviceBox: (box) => box.index,\n visitPitchDeviceBox: (box) => box.index,\n visitStereoToolDeviceBox: (box) => box.index,\n visitDelayDeviceBox: (box) => box.index,\n visitModularDeviceBox: (box) => box.index,\n visitRevampDeviceBox: (box) => box.index,\n visitReverbDeviceBox: (box) => box.index,\n visitZeitgeistDeviceBox: (box) => box.index\n }), `No index-field found for ${box}`);\n Devices.deleteEffectDevices = (devices) => {\n if (devices.length === 0) {\n return;\n }\n assert(Arrays.satisfy(devices, (a, b) => a.deviceHost().address.equals(b.deviceHost().address)), \"Devices are not connected to the same host\");\n const device = devices[0];\n const targets = device.accepts === \"audio\"\n ? device.deviceHost().audioEffects.field().pointerHub.filter(Pointers.AudioEffectHost)\n : device.accepts === \"midi\"\n ? device.deviceHost().midiEffects.field().pointerHub.filter(Pointers.MidiEffectHost)\n : panic(\"unknown type\");\n targets.map(({ box }) => Devices.fetchEffectIndex(box))\n .filter(index => devices.some(device => UUID.Comparator(device.uuid, index.address.uuid) !== 0))\n .sort((a, b) => a.getValue() - b.getValue())\n .forEach((indexField, index) => indexField.setValue(index));\n devices.forEach(device => device.box.delete());\n };\n})(Devices || (Devices = {}));\n", "import { Notifier, Option, panic, UUID } from \"@opendaw/lib-std\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { TrackBox } from \"@opendaw/studio-boxes\";\nimport { SortedBoxAdapterCollection } from \"../SortedBoxAdapterCollection\";\nimport { TrackBoxAdapter } from \"../timeline/TrackBoxAdapter\";\nexport class AudioUnitTracks {\n #adapter;\n #regionNotifier = new Notifier();\n #collection;\n #subscriptions;\n #subscription;\n constructor(adapter, boxAdapters) {\n this.#adapter = adapter;\n this.#collection = SortedBoxAdapterCollection.create(adapter.box.tracks, box => boxAdapters.adapterFor(box, TrackBoxAdapter), Pointers.TrackCollection);\n this.#subscriptions = UUID.newSet(({ uuid }) => uuid);\n this.#subscription = this.#collection.catchupAndSubscribe({\n onAdd: (adapter) => this.#subscriptions.add({\n uuid: adapter.uuid,\n subscription: adapter.regions.subscribeChanges(() => this.#regionNotifier.notify())\n }),\n onRemove: ({ uuid }) => this.#subscriptions.removeByKey(uuid).subscription.terminate(),\n onReorder: (_adapter) => { }\n });\n }\n create(type, target, index) {\n const graph = this.#adapter.box.graph;\n const tracks = this.#adapter.box.tracks;\n TrackBox.create(graph, UUID.generate(), box => {\n box.index.setValue(index ?? this.#collection.getMinFreeIndex());\n box.type.setValue(type);\n box.tracks.refer(tracks);\n box.target.refer(target);\n });\n }\n controls(target) {\n return Option.wrap(this.#collection.adapters()\n .find(adapter => adapter.target.targetVertex.contains(target), false));\n }\n delete(adapter) {\n const adapters = this.#collection.adapters();\n const deleteIndex = adapters.indexOf(adapter);\n if (deleteIndex === -1) {\n return panic(`Cannot delete ${adapter}. Does not exist.`);\n }\n for (let index = deleteIndex + 1; index < adapters.length; index++) {\n adapters[index].indexField.setValue(index - 1);\n }\n adapter.box.delete();\n }\n get collection() { return this.#collection; }\n values() { return this.#collection.adapters(); }\n catchupAndSubscribe(listener) {\n return this.#collection.catchupAndSubscribe(listener);\n }\n subscribeAnyChange(observer) { return this.#regionNotifier.subscribe(observer); }\n terminate() {\n this.#collection.terminate();\n this.#subscription.terminate();\n this.#subscriptions.forEach(({ subscription }) => subscription.terminate());\n this.#subscriptions.clear();\n }\n}\n", "import { Propagation } from \"@opendaw/lib-box\";\nimport { Devices } from \"../devices\";\nimport { IconSymbol } from \"../IconSymbol\";\nexport class AudioBusBoxAdapter {\n type = \"bus\";\n accepts = \"audio\";\n #context;\n #box;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n }\n catchupAndSubscribe(observer) {\n observer(this);\n return this.#box.subscribe(Propagation.Children, () => observer(this));\n }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get box() { return this.#box; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get iconField() { return this.#box.icon; }\n get labelField() { return this.#box.label; }\n get colorField() { return this.#box.color; }\n get iconSymbol() { return IconSymbol.fromName(this.iconField.getValue() ?? \"audio-bus\"); }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.output.targetVertex.unwrap(\"No AudioUnitBox found\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n terminate() { }\n toString() { return `{${this.constructor.name}}`; }\n}\n", "import { assert, DefaultObservableValue, Notifier, Option, Terminable, Terminator } from \"@opendaw/lib-std\";\nimport { AudioBusBox } from \"@opendaw/studio-boxes\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { IconSymbol } from \"../IconSymbol\";\nimport { AudioBusBoxAdapter } from \"./AudioBusBoxAdapter\";\nimport { Devices } from \"../devices\";\nexport class AudioUnitInput {\n #terminator;\n #labelNotifier;\n #iconValue;\n #observable;\n #subscription = Terminable.Empty;\n constructor(pointerHub, boxAdapters) {\n this.#terminator = new Terminator();\n this.#labelNotifier = this.#terminator.own(new Notifier());\n this.#iconValue = this.#terminator.own(new DefaultObservableValue(IconSymbol.Unknown));\n this.#observable = this.#terminator.own(new DefaultObservableValue(Option.None));\n this.#terminator.own(this.#observable.subscribe(owner => {\n this.#subscription.terminate();\n this.#subscription = owner.getValue().match({\n none: () => {\n this.#labelNotifier.notify(Option.None);\n return Terminable.Empty;\n },\n some: ({ labelField, iconField }) => Terminable.many(iconField.catchupAndSubscribe(field => this.#iconValue.setValue(IconSymbol.fromName(field.getValue()))), labelField.catchupAndSubscribe(field => this.#labelNotifier.notify(Option.wrap(field.getValue()))))\n });\n }));\n this.#terminator.own(pointerHub.catchupAndSubscribeTransactual({\n onAdd: ({ box }) => {\n assert(this.#observable.getValue().isEmpty(), \"Already set\");\n const input = box instanceof AudioBusBox\n ? boxAdapters.adapterFor(box, AudioBusBoxAdapter)\n : boxAdapters.adapterFor(box, Devices.isInstrument);\n if (this.#observable.getValue().unwrapOrNull() !== input) {\n this.#observable.setValue(Option.wrap(input));\n }\n },\n onRemove: ({ box }) => {\n assert(this.#observable.getValue().unwrap(\"Cannot remove\").box.address\n .equals(box.address), \"Unexpected value to remove\");\n this.#observable.setValue(Option.None);\n }\n }, Pointers.InstrumentHost, Pointers.AudioOutput));\n }\n getValue() { return this.#observable.getValue(); }\n subscribe(observer) {\n return this.#observable.subscribe(observer);\n }\n catchupAndSubscribe(observer) {\n observer(this.#observable);\n return this.subscribe(observer);\n }\n catchupAndSubscribeLabelChange(observer) {\n observer(this.label);\n return this.#labelNotifier.subscribe(observer);\n }\n catchupAndSubscribeIconChange(observer) {\n return this.#iconValue.catchupAndSubscribe(observer);\n }\n set label(value) { this.getValue().ifSome(input => input.labelField.setValue(value)); }\n get label() { return this.getValue().map(input => input.labelField.getValue()); }\n set icon(value) { this.getValue().ifSome(input => input.iconField.setValue(IconSymbol.toName(value))); }\n get icon() {\n return this.getValue().match({\n none: () => IconSymbol.Unknown,\n some: input => IconSymbol.fromName(input.iconField.getValue())\n });\n }\n get iconValue() { return this.#iconValue; }\n terminate() {\n this.#terminator.terminate();\n this.#subscription.terminate();\n }\n}\n", "import { assert, NumberArrayComparator, SortedSet } from \"@opendaw/lib-std\";\nimport { AutomatableParameterFieldAdapter } from \"./AutomatableParameterFieldAdapter\";\nexport class ParameterAdapterSet {\n #context;\n #parameters;\n constructor(context) {\n this.#context = context;\n this.#parameters = new SortedSet(adapter => adapter.address.fieldKeys, NumberArrayComparator);\n }\n terminate() {\n this.#parameters.forEach(parameter => parameter.terminate());\n this.#parameters.clear();\n }\n parameters() { return this.#parameters.values(); }\n parameterAt(fieldIndices) {\n return this.#parameters.getOrThrow(fieldIndices, () => new Error(`No ParameterAdapter found at [${fieldIndices}]`));\n }\n createParameter(field, valueMapping, stringMapping, name, anchor) {\n const adapter = new AutomatableParameterFieldAdapter(this.#context, field, valueMapping, stringMapping, name, anchor);\n const added = this.#parameters.add(adapter);\n assert(added, `Could not add adapter for ${field}`);\n return adapter;\n }\n removeParameter(parameter) {\n this.#parameters.removeByValue(parameter);\n }\n}\n", "import { Notifier, Option, StringMapping, Terminable, Terminator, ValueMapping } from \"@opendaw/lib-std\";\nimport { AudioBusBoxAdapter } from \"./AudioBusBoxAdapter\";\nimport { AutomatableParameterFieldAdapter } from \"../AutomatableParameterFieldAdapter\";\nexport class AuxSendBoxAdapter {\n #context;\n #box;\n #terminator;\n #busChangeNotifier;\n #sendPan;\n #sendGain;\n #subscription = Terminable.Empty;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#terminator = new Terminator();\n this.#busChangeNotifier = this.#terminator.own(new Notifier());\n this.#terminator.own(box.targetBus.catchupAndSubscribe(() => {\n this.#subscription.terminate();\n this.#subscription = this.optTargetBus.match({\n none: () => {\n this.#busChangeNotifier.notify(Option.None);\n return Terminable.Empty;\n },\n some: adapter => adapter.catchupAndSubscribe(adapter => this.#busChangeNotifier.notify(Option.wrap(adapter)))\n });\n }));\n this.#sendPan = this.#terminator.own(new AutomatableParameterFieldAdapter(this.#context, this.#box.sendPan, ValueMapping.bipolar(), StringMapping.percent({ unit: \"%\", fractionDigits: 0 }), \"panning\"));\n this.#sendGain = this.#terminator.own(new AutomatableParameterFieldAdapter(this.#context, this.#box.sendGain, ValueMapping.DefaultDecibel, StringMapping.numeric({\n unit: \"dB\",\n fractionDigits: 1\n }), \"gain\"));\n }\n catchupAndSubscribeBusChanges(observer) {\n observer(this.optTargetBus);\n return this.#busChangeNotifier.subscribe(observer);\n }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get box() { return this.#box; }\n get indexField() { return this.#box.index; }\n get sendPan() { return this.#sendPan; }\n get sendGain() { return this.#sendGain; }\n get targetBus() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.targetBus.targetVertex.unwrap(\"no audioUnit\").box, AudioBusBoxAdapter);\n }\n get optTargetBus() {\n return this.#box.targetBus.targetVertex\n .flatMap(target => Option.wrap(target.box.accept({\n visitAudioBusBox: (box) => this.#context.boxAdapters.adapterFor(box, AudioBusBoxAdapter)\n })));\n }\n delete() { this.#box.delete(); }\n terminate() {\n this.#terminator.terminate();\n this.#subscription.terminate();\n }\n}\n", "import { Notifier, Option, Terminable, Terminator } from \"@opendaw/lib-std\";\nimport { AudioBusBoxAdapter } from \"./AudioBusBoxAdapter\";\nexport class AudioUnitOutput {\n #pointerField;\n #boxAdapters;\n #terminator;\n #busChangeNotifier;\n #subscription = Terminable.Empty;\n constructor(pointerField, boxAdapters) {\n this.#pointerField = pointerField;\n this.#boxAdapters = boxAdapters;\n this.#terminator = new Terminator();\n this.#busChangeNotifier = this.#terminator.own(new Notifier());\n this.#terminator.own(pointerField.catchupAndSubscribe(() => {\n this.#subscription.terminate();\n this.#subscription = this.adapter.match({\n none: () => {\n this.#busChangeNotifier.notify(Option.None);\n return Terminable.Empty;\n },\n some: adapter => adapter.catchupAndSubscribe(adapter => this.#busChangeNotifier.notify(Option.wrap(adapter)))\n });\n }));\n }\n subscribe(observer) {\n return this.#busChangeNotifier.subscribe(observer);\n }\n catchupAndSubscribe(observer) {\n observer(this.adapter);\n return this.subscribe(observer);\n }\n get adapter() {\n return this.#pointerField.targetVertex\n .flatMap(target => Option.wrap(target.box.accept({\n visitAudioBusBox: (box) => this.#boxAdapters.adapterFor(box, AudioBusBoxAdapter)\n })));\n }\n terminate() {\n this.#terminator.terminate();\n this.#subscription.terminate();\n }\n}\n", "import { StringMapping, Terminator, ValueMapping } from \"@opendaw/lib-std\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { Devices } from \"../devices\";\nimport { AudioUnitTracks } from \"./AudioUnitTracks\";\nimport { AudioUnitInput } from \"./AudioUnitInput\";\nimport { SortedBoxAdapterCollection } from \"../SortedBoxAdapterCollection\";\nimport { ParameterAdapterSet } from \"../ParameterAdapterSet\";\nimport { AuxSendBoxAdapter } from \"./AuxSendBoxAdapter\";\nimport { AudioUnitOutput } from \"./AudioUnitOutput\";\nexport class AudioUnitBoxAdapter {\n \"class\" = \"device-host\";\n #terminator = new Terminator();\n #context;\n #box;\n #parametric;\n #tracks;\n #input;\n #midiEffects;\n #audioEffects;\n #auxSends;\n #output;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = this.#terminator.own(new ParameterAdapterSet(this.#context));\n this.#tracks = this.#terminator.own(new AudioUnitTracks(this, this.#context.boxAdapters));\n this.#input = this.#terminator.own(new AudioUnitInput(this.#box.input.pointerHub, this.#context.boxAdapters));\n this.#midiEffects = this.#terminator.own(SortedBoxAdapterCollection.create(this.#box.midiEffects, box => this.#context.boxAdapters.adapterFor(box, Devices.isMidiEffect), Pointers.MidiEffectHost));\n this.#audioEffects = this.#terminator.own(SortedBoxAdapterCollection.create(this.#box.audioEffects, box => this.#context.boxAdapters.adapterFor(box, Devices.isAudioEffect), Pointers.AudioEffectHost));\n this.#auxSends = this.#terminator.own(SortedBoxAdapterCollection.create(this.#box.auxSends, box => this.#context.boxAdapters.adapterFor(box, AuxSendBoxAdapter), Pointers.AuxSend));\n this.#output = this.#terminator.own(new AudioUnitOutput(this.#box.output, this.#context.boxAdapters));\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get type() { return this.#box.type.getValue(); }\n get tracks() { return this.#tracks; }\n get input() { return this.#input; }\n get midiEffects() { return this.#midiEffects; }\n get audioEffects() { return this.#audioEffects; }\n get inputAdapter() { return this.#input.getValue(); }\n get auxSends() { return this.#auxSends; }\n get output() { return this.#output; }\n get isBus() { return this.input.getValue().mapOr(adapter => adapter.type === \"bus\", false); }\n get isInstrument() { return this.input.getValue().mapOr(adapter => adapter.type === \"instrument\", false); }\n get isOutput() {\n return this.#box.output.targetVertex.mapOr(output => output.box.address.equals(this.#context.rootBoxAdapter.address), false);\n }\n get midiEffectsField() { return this.#box.midiEffects; }\n get inputField() { return this.#box.input; }\n get audioEffectsField() { return this.#box.audioEffects; }\n get tracksField() { return this.#box.tracks; }\n get minimizedField() { return this.#input.getValue().unwrap().minimizedField; }\n get isAudioUnit() { return true; }\n get label() { return this.#input.getValue().mapOr(input => input.labelField.getValue(), \"\"); }\n audioUnitBoxAdapter() { return this; }\n indicesLimit() {\n const adapters = this.#context.rootBoxAdapter.audioUnits.adapters();\n const startIndex = this.indexField.getValue();\n const unitType = this.type;\n let min = startIndex;\n let max = startIndex;\n while (min > 0) {\n if (adapters[min - 1].type === unitType) {\n min--;\n }\n else {\n break;\n }\n }\n while (max < adapters.length - 1) {\n if (adapters[max + 1].type === unitType) {\n max++;\n }\n else {\n break;\n }\n }\n return [min, max + 1];\n }\n move(delta) { this.#context.rootBoxAdapter.audioUnits.move(this, delta); }\n moveTrack(adapter, delta) { this.#tracks.collection.move(adapter, delta); }\n deleteTrack(adapter) { this.#tracks.delete(adapter); }\n toString() { return `{${this.constructor.name}}`; }\n terminate() { this.#terminator.terminate(); }\n #wrapParameters(box) {\n return {\n volume: this.#parametric.createParameter(box.volume, ValueMapping.decibel(-96.0, -9.0, +6.0), StringMapping.decible, \"volume\"),\n panning: this.#parametric.createParameter(box.panning, ValueMapping.bipolar(), StringMapping.panning, \"panning\", 0.5),\n mute: this.#parametric.createParameter(box.mute, ValueMapping.bool, StringMapping.bool, \"mute\"),\n solo: this.#parametric.createParameter(box.solo, ValueMapping.bool, StringMapping.bool, \"solo\")\n };\n }\n}\n", "import { PPQN } from \"@opendaw/lib-dsp\";\nexport const UpdateClockRate = PPQN.fromSignature(1, 384);\n", "import { asInstanceOf, DefaultObservableValue, isInstanceOf, Option, panic, Terminable, Terminator } from \"@opendaw/lib-std\";\nimport { StringField } from \"@opendaw/lib-box\";\nimport { TrackClips } from \"./TrackClips\";\nimport { TrackRegions } from \"./TrackRegions\";\nimport { AudioUnitBoxAdapter } from \"../audio-unit/AudioUnitBoxAdapter\";\nimport { TrackType } from \"./TrackType\";\nimport { UpdateClockRate } from \"../UpdateClockRate\";\nimport { ValueClipBoxAdapter } from \"./clip/ValueClipBoxAdapter\";\nimport { ValueRegionBoxAdapter } from \"./region/ValueRegionBoxAdapter\";\nimport { AudioUnitBox } from \"@opendaw/studio-boxes\";\nexport class TrackBoxAdapter {\n #context;\n #box;\n #terminator;\n #clips;\n #regions;\n #listIndex;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#terminator = new Terminator();\n this.#clips = this.#terminator.own(new TrackClips(this, context.boxAdapters));\n this.#regions = this.#terminator.own(new TrackRegions(this, context.boxAdapters));\n this.#listIndex = this.#terminator.own(new DefaultObservableValue(-1));\n }\n catchupAndSubscribePath(observer) {\n const path = [Option.None, Option.None];\n const updater = () => {\n if (path.every(option => option.nonEmpty())) {\n observer(Option.wrap(path.map(option => option.unwrap())));\n }\n else {\n observer(Option.None);\n }\n };\n return Terminable.many(this.#catchupAndSubscribeTargetDeviceName(option => {\n if (path[0].equals(option)) {\n return;\n }\n path[0] = option;\n updater();\n }), this.#catchupAndSubscribeTargetControlName(option => {\n if (path[1].equals(option)) {\n return;\n }\n path[1] = option;\n updater();\n }));\n }\n #catchupAndSubscribeTargetDeviceName(observer) {\n const targetVertex = this.#box.target.targetVertex;\n if (targetVertex.nonEmpty()) {\n const vertex = targetVertex.unwrap().box;\n if (vertex instanceof AudioUnitBox) {\n const adapter = this.#context.boxAdapters.adapterFor(vertex, AudioUnitBoxAdapter);\n return adapter.input.catchupAndSubscribeLabelChange(option => observer(option));\n }\n else if (\"label\" in vertex && vertex.label instanceof StringField) {\n return vertex.label.catchupAndSubscribe(owner => observer(Option.wrap(owner.getValue())));\n }\n else {\n // TODO This is a workaround. We need to find a way to dig into the box for a name\n observer(Option.wrap(vertex.name));\n return Terminable.Empty;\n }\n }\n observer(Option.None);\n return Terminable.Empty;\n }\n #catchupAndSubscribeTargetControlName(observer) {\n const type = this.type;\n switch (type) {\n case TrackType.Audio:\n case TrackType.Notes: {\n observer(Option.wrap(TrackType[type]));\n return Terminable.Empty;\n }\n case TrackType.Value: {\n const target = this.#box.target.targetVertex.unwrap();\n if (target.isField()) {\n observer(this.#context.parameterFieldAdapters.opt(target.address).map(vertex => vertex.name));\n }\n else if (target.isBox()) {\n // I cannot think of a scenario where target is a box, but at least the UI shows the box's name\n observer(Option.wrap(target.name));\n }\n else {\n return panic(\"Illegal State. Vertex is not a field nor box.\");\n }\n return Terminable.Empty;\n }\n case TrackType.Undefined: {\n observer(Option.wrap(\"\"));\n return Terminable.Empty;\n }\n default: {\n observer(Option.None);\n return Terminable.Empty;\n }\n }\n }\n terminate() { this.#terminator.terminate(); }\n get audioUnit() { return asInstanceOf(this.#box.tracks.targetVertex.unwrap().box, AudioUnitBox); }\n get target() { return this.#box.target; }\n get clips() { return this.#clips; }\n get regions() { return this.#regions; }\n get enabled() { return this.#box.enabled; }\n get indexField() { return this.#box.index; }\n get type() { return this.#box.type.getValue(); }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get listIndex() { return this.#listIndex.getValue(); }\n set listIndex(value) { this.#listIndex.setValue(value); }\n accepts(subject) {\n switch (subject.type) {\n case \"audio-clip\":\n return this.type === TrackType.Audio;\n case \"note-clip\":\n return this.type === TrackType.Notes;\n case \"value-clip\":\n return this.type === TrackType.Value;\n case \"audio-region\":\n return this.type === TrackType.Audio;\n case \"note-region\":\n return this.type === TrackType.Notes;\n case \"value-region\":\n return this.type === TrackType.Value;\n }\n }\n valueAt(position, fallback) {\n if (!this.enabled.getValue()) {\n return fallback;\n }\n let value = fallback;\n const intervals = this.#context.clipSequencing.iterate(this.uuid, position, position + UpdateClockRate);\n for (const { optClip, sectionFrom } of intervals) {\n value = optClip.match({\n none: () => {\n const region = this.regions.collection.lowerEqual(position, region => !region.mute);\n if (region === null) {\n const firstRegion = this.regions.collection.optAt(0);\n return isInstanceOf(firstRegion, ValueRegionBoxAdapter) ? firstRegion.incomingValue(fallback) : fallback;\n }\n else if (isInstanceOf(region, ValueRegionBoxAdapter)) {\n if (position < region.complete) {\n return region.valueAt(position, fallback);\n }\n else {\n return region.outgoingValue(fallback);\n }\n }\n return fallback;\n },\n some: clip => {\n if (sectionFrom === position) {\n if (isInstanceOf(clip, ValueClipBoxAdapter)) {\n return clip.valueAt(position, fallback);\n }\n }\n return fallback;\n }\n });\n }\n return value;\n }\n}\n", "import { assert, clamp, Listeners, Notifier, Option, panic, Terminator } from \"@opendaw/lib-std\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { TrackBoxAdapter } from \"./timeline/TrackBoxAdapter\";\nconst ExternalControlTypes = [\n Pointers.Automation,\n Pointers.Modulation,\n Pointers.MidiControl,\n Pointers.ParameterController\n];\nexport class AutomatableParameterFieldAdapter {\n #context;\n #field;\n #valueMapping;\n #stringMapping;\n #name;\n #anchor;\n #terminator = new Terminator();\n #valueChangeNotifier;\n #controlSource;\n #trackBoxAdapter = Option.None;\n #automationHandle = Option.None;\n #controlledValue = null;\n #midiControlled = false;\n constructor(context, field, valueMapping, stringMapping, name, anchor) {\n this.#context = context;\n this.#field = field;\n this.#valueMapping = valueMapping;\n this.#stringMapping = stringMapping;\n this.#name = name;\n this.#anchor = anchor ?? 0.0;\n this.#terminator.own(this.#context.parameterFieldAdapters.register(this));\n this.#valueChangeNotifier = this.#terminator.own(new Notifier());\n this.#controlSource = new Listeners();\n this.#terminator.own(this.#field.subscribe(() => this.#valueChangeNotifier.notify(this)));\n this.#terminator.own(this.#field.pointerHub.catchupAndSubscribeTransactual({\n onAdd: (pointer) => {\n this.#controlSource.proxy.onControlSourceAdd(mapPointerToControlSource(pointer.pointerType));\n pointer.box.accept({\n visitTrackBox: (box) => {\n assert(this.#trackBoxAdapter.isEmpty(), \"Already assigned\");\n const adapter = this.#context.boxAdapters.adapterFor(box, TrackBoxAdapter);\n this.#trackBoxAdapter = Option.wrap(adapter);\n if (this.#context.isMainThread) {\n this.#automationHandle = Option.wrap(this.#context.liveStreamReceiver\n .subscribeFloat(this.#field.address, value => {\n if (this.#controlledValue === value) {\n return;\n }\n this.#controlledValue = value;\n this.#valueChangeNotifier.notify(this);\n }));\n }\n }\n });\n },\n onRemove: (pointer) => {\n this.#controlSource.proxy.onControlSourceRemove(mapPointerToControlSource(pointer.pointerType));\n pointer.box.accept({\n visitTrackBox: (box) => {\n assert(this.#trackBoxAdapter.unwrapOrNull()?.address?.equals(box.address) === true, `Unknown ${box}`);\n this.#trackBoxAdapter = Option.None;\n if (this.#context.isMainThread) {\n this.#automationHandle.ifSome(handle => handle.terminate());\n this.#automationHandle = Option.None;\n this.#controlledValue = null;\n this.#valueChangeNotifier.notify(this);\n }\n }\n });\n }\n }, ...ExternalControlTypes));\n /*\n For debugging: It's not live because floating errors expose false positives,\n and I am too lazy to implement this in the mappings itself.\n */\n if (field.getValue() !== valueMapping.clamp(field.getValue())) {\n console.warn(`${name} (${field.getValue()}) is out of bounds`, valueMapping);\n }\n }\n registerMidiControl() {\n this.#controlSource.proxy.onControlSourceAdd(\"midi\");\n this.#midiControlled = true;\n return {\n terminate: () => {\n this.#midiControlled = false;\n this.#controlSource.proxy.onControlSourceRemove(\"midi\");\n }\n };\n }\n get field() { return this.#field; }\n get valueMapping() { return this.#valueMapping; }\n get stringMapping() { return this.#stringMapping; }\n get name() { return this.#name; }\n get anchor() { return this.#anchor; }\n get type() { return this.#field.type; }\n get address() { return this.#field.address; }\n get track() { return this.#trackBoxAdapter; }\n valueAt(position) {\n const optTrack = this.#trackBoxAdapter;\n if (optTrack.nonEmpty()) {\n const track = optTrack.unwrap();\n if (track.enabled) {\n return this.valueMapping.y(track.valueAt(position, this.getUnitValue()));\n }\n }\n return this.getValue();\n }\n subscribe(observer) { return this.#valueChangeNotifier.subscribe(observer); }\n catchupAndSubscribe(observer) {\n observer(this);\n return this.subscribe(observer);\n }\n catchupAndSubscribeControlSources(observer) {\n if (this.#midiControlled) {\n observer.onControlSourceAdd(\"midi\");\n }\n this.#field.pointerHub.filter(...ExternalControlTypes)\n .forEach(pointer => observer.onControlSourceAdd(mapPointerToControlSource(pointer.pointerType)));\n return this.#controlSource.subscribe(observer);\n }\n getValue() { return this.#field.getValue(); }\n setValue(value) { this.#field.setValue(value); }\n setUnitValue(value) { this.setValue(this.#valueMapping.y(value)); }\n getUnitValue() { return this.#valueMapping.x(this.getValue()); }\n getControlledValue() { return this.#valueMapping.y(this.getControlledUnitValue()); }\n getControlledUnitValue() { return this.#controlledValue ?? this.getUnitValue(); }\n getControlledPrintValue() { return this.#stringMapping.x(this.getControlledValue()); }\n getPrintValue() { return this.#stringMapping.x(this.getValue()); }\n setPrintValue(text) {\n const result = this.#stringMapping.y(text);\n if (result.type === \"unitValue\") {\n this.setUnitValue(clamp(result.value, 0.0, 1.0));\n }\n else if (result.type === \"explicit\") {\n this.setValue(this.valueMapping.clamp(result.value));\n }\n else {\n console.debug(`Unknown text input: '${result.value}'`);\n }\n }\n reset() { this.setValue(this.#valueMapping.clamp(this.#field.initValue)); }\n terminate() {\n this.#automationHandle.ifSome(handle => handle.terminate());\n this.#automationHandle = Option.None;\n this.#terminator.terminate();\n }\n}\nconst mapPointerToControlSource = (pointer) => {\n switch (pointer) {\n case Pointers.Automation:\n return \"automated\";\n case Pointers.Modulation:\n return \"modulated\";\n case Pointers.MidiControl:\n return \"midi\";\n case Pointers.ParameterController:\n return \"external\";\n default:\n return panic(`${pointer.toString()} is an unknown pointer type`);\n }\n};\n", "import { assert, Listeners, UUID } from \"@opendaw/lib-std\";\nexport class BoxAdapterCollection {\n #entries;\n #listeners;\n #subscription;\n constructor(pointerHub, provider, pointers) {\n this.#entries = UUID.newSet(adapter => adapter.uuid);\n this.#listeners = new Listeners();\n this.#subscription = pointerHub.catchupAndSubscribeTransactual({\n onAdd: (pointer) => {\n const adapter = provider(pointer.box);\n const added = this.#entries.add(adapter);\n assert(added, `Could not add ${adapter}`);\n this.#listeners.proxy.onAdd(adapter);\n },\n onRemove: (pointer) => {\n const uuid = pointer.box.address.uuid;\n this.#listeners.proxy.onRemove(this.#entries.removeByKey(uuid));\n }\n }, pointers);\n }\n subscribe(listener) { return this.#listeners.subscribe(listener); }\n catchupAndSubscribe(listener) {\n this.#entries.forEach(adapter => listener.onAdd(adapter));\n return this.subscribe(listener);\n }\n adapters() { return this.#entries.values(); }\n size() { return this.#entries.size(); }\n isEmpty() { return this.size() === 0; }\n terminate() {\n this.#entries.clear();\n this.#listeners.terminate();\n this.#subscription.terminate();\n }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { Fraction } from \"@opendaw/lib-dsp\";\nimport { Devices } from \"../../devices\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nexport class DelayDeviceBoxAdapter {\n static OffsetFractions = Fraction.builder()\n .add([1, 1]).add([1, 2]).add([1, 3]).add([1, 4])\n .add([3, 16]).add([1, 6]).add([1, 8]).add([3, 32])\n .add([1, 12]).add([1, 16]).add([3, 64]).add([1, 24])\n .add([1, 32]).add([1, 48]).add([1, 64])\n .add([1, 96]).add([1, 128])\n .asDescendingArray();\n static OffsetStringMapping = StringMapping.indices(\"\", this.OffsetFractions.map(([n, d]) => `${n}/${d}`));\n type = \"audio-effect\";\n accepts = \"audio\";\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = new ParameterAdapterSet(this.#context);\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get labelField() { return this.#box.label; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get host() { return this.#box.host; }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n terminate() { this.#parametric.terminate(); }\n #wrapParameters(box) {\n return {\n delay: this.#parametric.createParameter(box.delay, ValueMapping.linearInteger(0, DelayDeviceBoxAdapter.OffsetFractions.length - 1), DelayDeviceBoxAdapter.OffsetStringMapping, \"delay\"),\n feedback: this.#parametric.createParameter(box.feedback, ValueMapping.unipolar(), StringMapping.numeric({ unit: \"%\", fractionDigits: 0 }), \"feedback\"),\n cross: this.#parametric.createParameter(box.cross, ValueMapping.unipolar(), StringMapping.numeric({ unit: \"%\", fractionDigits: 0 }), \"cross\"),\n filter: this.#parametric.createParameter(box.filter, ValueMapping.bipolar(), StringMapping.numeric({ unit: \"%\", fractionDigits: 0 }), \"filter\", 0.5),\n dry: this.#parametric.createParameter(box.dry, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: \"db\", fractionDigits: 1 }), \"dry\"),\n wet: this.#parametric.createParameter(box.wet, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: \"db\", fractionDigits: 1 }), \"wet\")\n };\n }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { Devices } from \"../../devices\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nexport class ReverbDeviceBoxAdapter {\n type = \"audio-effect\";\n accepts = \"audio\";\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = new ParameterAdapterSet(this.#context);\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get labelField() { return this.#box.label; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get host() { return this.#box.host; }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n parameterAt(fieldIndices) { return this.#parametric.parameterAt(fieldIndices); }\n terminate() { this.#parametric.terminate(); }\n #wrapParameters(box) {\n return {\n decay: this.#parametric.createParameter(box.decay, ValueMapping.unipolar(), StringMapping.numeric({ unit: \"%\", fractionDigits: 0 }), \"Room-Size\"),\n preDelay: this.#parametric.createParameter(box.preDelay, ValueMapping.exponential(0.001, 0.500), StringMapping.numeric({\n unit: \"s\", fractionDigits: 1, unitPrefix: true\n }), \"Pre-Delay\"),\n damp: this.#parametric.createParameter(box.damp, ValueMapping.unipolar(), StringMapping.numeric({ unit: \"%\", fractionDigits: 0 }), \"damping\"),\n filter: this.#parametric.createParameter(box.filter, ValueMapping.bipolar(), StringMapping.numeric({ unit: \"%\", fractionDigits: 0 }), \"filter\"),\n dry: this.#parametric.createParameter(box.dry, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: \"db\", fractionDigits: 1 }), \"dry\"),\n wet: this.#parametric.createParameter(box.wet, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: \"db\", fractionDigits: 1 }), \"wet\")\n };\n }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { Devices } from \"../../devices\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nexport class RevampDeviceBoxAdapter {\n type = \"audio-effect\";\n accepts = \"audio\";\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = new ParameterAdapterSet(this.#context);\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get labelField() { return this.#box.label; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get host() { return this.#box.host; }\n get spectrum() { return this.#box.address.append(0xFFF); }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n parameterAt(fieldIndices) { return this.#parametric.parameterAt(fieldIndices); }\n terminate() { this.#parametric.terminate(); }\n #wrapParameters(box) {\n return {\n highPass: createPass(this.#parametric, box.highPass, \"High-Pass\"),\n lowShelf: createShelf(this.#parametric, box.lowShelf, \"Low-Shelf\"),\n lowBell: createBell(this.#parametric, box.lowBell, \"Low-Bell\"),\n midBell: createBell(this.#parametric, box.midBell, \"Mid-Bell\"),\n highBell: createBell(this.#parametric, box.highBell, \"High-Bell\"),\n highShelf: createShelf(this.#parametric, box.highShelf, \"High-Shelf\"),\n lowPass: createPass(this.#parametric, box.lowPass, \"Low-Pass\")\n };\n }\n}\nconst FrequencyMapping = ValueMapping.exponential(20.0, 20_000.0);\nconst GainMapping = ValueMapping.linear(-24.0, 24.0);\nconst QMapping = ValueMapping.exponential(0.01, 10.0);\nconst createPass = (parametric, pass, name) => {\n return ({\n enabled: parametric.createParameter(pass.enabled, ValueMapping.bool, StringMapping.bool, \"enabled\"),\n frequency: parametric.createParameter(pass.frequency, FrequencyMapping, StringMapping.numeric({ unit: \"Hz\", fractionDigits: 0 }), `${name} Freq`),\n order: parametric.createParameter(pass.order, ValueMapping.linearInteger(1, 4), StringMapping.indices(\"db\", [\"12\", \"24\", \"36\", \"48\"]), `${name} Order`),\n q: parametric.createParameter(pass.q, QMapping, StringMapping.numeric({ unit: \"\", fractionDigits: 3 }), `${name} Q`)\n });\n};\nconst createShelf = (parametric, shelf, name) => ({\n enabled: parametric.createParameter(shelf.enabled, ValueMapping.bool, StringMapping.bool, \"enabled\"),\n frequency: parametric.createParameter(shelf.frequency, FrequencyMapping, StringMapping.numeric({ unit: \"Hz\", fractionDigits: 0 }), `${name} Freq`),\n gain: parametric.createParameter(shelf.gain, GainMapping, StringMapping.numeric({ unit: \"db\", fractionDigits: 1, bipolar: true }), `${name} Gain`, 0.5)\n});\nconst createBell = (parametric, bell, name) => ({\n enabled: parametric.createParameter(bell.enabled, ValueMapping.bool, StringMapping.bool, \"enabled\"),\n frequency: parametric.createParameter(bell.frequency, FrequencyMapping, StringMapping.numeric({ unit: \"Hz\", fractionDigits: 0 }), `${name} Freq`),\n gain: parametric.createParameter(bell.gain, GainMapping, StringMapping.numeric({ unit: \"db\", fractionDigits: 1, bipolar: true }), `${name} Gain`, 0.5),\n q: parametric.createParameter(bell.q, QMapping, StringMapping.numeric({ unit: \"\", fractionDigits: 3 }), `${name} Q`)\n});\n", "import { Terminator, UUID } from \"@opendaw/lib-std\";\nimport { Propagation } from \"@opendaw/lib-box\";\nimport { TimelineBoxAdapter } from \"./TimelineBoxAdapter\";\nexport class MarkerBoxAdapter {\n static Comparator = (a, b) => a.position - b.position;\n type = \"marker-event\";\n #terminator = new Terminator();\n #context;\n #box;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#terminator.own(this.#box.subscribe(Propagation.Children, (update) => {\n if (this.trackAdapter.isEmpty()) {\n return;\n }\n if (update.type === \"primitive\" || update.type === \"pointer\") {\n const track = this.trackAdapter.unwrap();\n if (this.#box.position.address.equals(update.address)) {\n track.onSortingChanged();\n }\n else {\n track.dispatchChange();\n }\n }\n }));\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get position() { return this.#box.position.getValue(); }\n get plays() { return this.#box.plays.getValue(); }\n get hue() { return this.#box.hue.getValue(); }\n get label() { return this.#box.label.getValue(); }\n get trackAdapter() {\n return this.#box.track.targetVertex\n .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, TimelineBoxAdapter).markerTrack);\n }\n terminate() { this.#terminator.terminate(); }\n toString() { return `{MarkerBoxAdapter ${UUID.toString(this.#box.address.uuid).substring(0, 4)}, plays: ${this.plays}`; }\n}\n", "import { assert, Notifier, UUID } from \"@opendaw/lib-std\";\nimport { EventCollection } from \"@opendaw/lib-dsp\";\nimport { MarkerBoxAdapter } from \"./MarkerBoxAdapter\";\nimport { MarkerBox } from \"@opendaw/studio-boxes\";\nexport class MarkerTrackAdapter {\n #context;\n #object;\n changeNotifier;\n #adapters;\n #events;\n #subscription;\n constructor(context, object) {\n this.#context = context;\n this.#object = object;\n this.changeNotifier = new Notifier();\n this.#adapters = UUID.newSet(adapter => adapter.uuid);\n this.#events = EventCollection.create(MarkerBoxAdapter.Comparator);\n this.#subscription = this.#object.markers.pointerHub.catchupAndSubscribeTransactual({\n onAdd: ({ box }) => {\n if (box instanceof MarkerBox) {\n const adapter = this.#context.boxAdapters.adapterFor(box, MarkerBoxAdapter);\n const added = this.#adapters.add(adapter);\n assert(added, \"Could not add adapter\");\n this.#events.add(adapter);\n this.dispatchChange();\n }\n },\n onRemove: ({ box: { address: { uuid } } }) => {\n this.#events.remove(this.#adapters.removeByKey(uuid));\n this.dispatchChange();\n }\n });\n }\n subscribe(observer) { return this.changeNotifier.subscribe(observer); }\n get context() { return this.#context; }\n get enabled() { return this.#object.enabled.getValue(); }\n get events() { return this.#events; }\n get object() { return this.#object; }\n dispatchChange() { this.changeNotifier.notify(); }\n onSortingChanged() {\n this.#events.onIndexingChanged();\n this.dispatchChange();\n }\n terminate() { this.#subscription.terminate(); }\n}\n", "import { MarkerTrackAdapter } from \"./MarkerTrackAdapter\";\nexport class TimelineBoxAdapter {\n #box;\n #markerTrack;\n constructor(context, box) {\n this.#box = box;\n this.#markerTrack = new MarkerTrackAdapter(context, this.#box.markerTrack);\n }\n terminate() { }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get markerTrack() { return this.#markerTrack; }\n}\n", "export class ModuleConnectionAdapter {\n #box;\n constructor(_context, box) {\n this.#box = box;\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get source() { return this.#box.source.targetVertex.unwrap(\"Insufficient Vertex\"); }\n get target() { return this.#box.target.targetVertex.unwrap(\"Insufficient Vertex\"); }\n terminate() { }\n}\n", "import { Terminator } from \"@opendaw/lib-std\";\nimport { ParameterAdapterSet } from \"../ParameterAdapterSet\";\nimport { ModularAdapter } from \"./modular\";\nexport class AbstractModuleAdapter {\n #context;\n #box;\n #terminator;\n #attributes;\n #parameters;\n #selected = false;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#terminator = new Terminator();\n this.#attributes = box.attributes;\n this.#parameters = this.#terminator.own(new ParameterAdapterSet(context));\n }\n get inputs() {\n throw new Error(\"Method not implemented.\");\n }\n get outputs() {\n throw new Error(\"Method not implemented.\");\n }\n own(terminable) { return this.#terminator.own(terminable); }\n ownAll(...terminables) { this.#terminator.ownAll(...terminables); }\n onSelected() { this.#selected = true; }\n onDeselected() { this.#selected = false; }\n isSelected() { return this.#selected; }\n get box() { return this.#box; }\n get attributes() { return this.#attributes; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get parameters() { return this.#parameters; }\n get modular() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.attributes.collection.targetVertex.unwrap().box, ModularAdapter);\n }\n terminate() { this.#terminator.terminate(); }\n}\n", "import { Pointers } from \"@opendaw/studio-enums\";\nimport { Arrays } from \"@opendaw/lib-std\";\nimport { ModuleConnectionAdapter } from \"./connection\";\nexport var Direction;\n(function (Direction) {\n Direction[\"Input\"] = \"input\";\n Direction[\"Output\"] = \"output\";\n})(Direction || (Direction = {}));\nexport class ModuleConnectorAdapter {\n static create(boxAdapters, field, direction, name) {\n return new ModuleConnectorAdapter(boxAdapters, field, direction, name ?? field.fieldName);\n }\n #boxAdapters;\n #field;\n #direction;\n #name;\n constructor(boxAdapters, field, direction, name) {\n this.#boxAdapters = boxAdapters;\n this.#field = field;\n this.#direction = direction;\n this.#name = name;\n }\n matches(other) {\n return this.direction !== other.direction && this.field.pointerRules.accepts\n .some(accepts => other.field.pointerRules.accepts\n .some(type => type === accepts));\n }\n get connections() {\n if (this.#field.pointerHub.isEmpty()) {\n return Arrays.empty();\n }\n return this.#field.pointerHub.filter(Pointers.VoltageConnection)\n .map(({ box }) => this.#boxAdapters.adapterFor(box, ModuleConnectionAdapter));\n }\n get field() { return this.#field; }\n get address() { return this.#field.address; }\n get direction() { return this.#direction; }\n get name() { return this.#name; }\n toString() {\n return `{ModuleConnectorAdapter address: ${this.#field.address.toString()}, direction: ${this.#direction}}`;\n }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { AbstractModuleAdapter } from \"../abstract\";\nimport { Direction, ModuleConnectorAdapter } from \"../connector\";\nexport class ModuleDelayAdapter extends AbstractModuleAdapter {\n #parameterTime;\n #voltageInput;\n #voltageOutput;\n constructor(context, box) {\n super(context, box);\n this.#parameterTime = this.parameters.createParameter(box.time, ValueMapping.exponential(1.0, 10000.0), StringMapping.numeric({ unit: \"ms\" }), \"Time\");\n this.#voltageInput = ModuleConnectorAdapter.create(context.boxAdapters, box.voltageInput, Direction.Input, \"Input\");\n this.#voltageOutput = ModuleConnectorAdapter.create(context.boxAdapters, box.voltageOutput, Direction.Output, \"Output\");\n }\n get parameterTime() { return this.#parameterTime; }\n get voltageInput() { return this.#voltageInput; }\n get voltageOutput() { return this.#voltageOutput; }\n get inputs() {\n return [this.#voltageInput];\n }\n get outputs() {\n return [this.#voltageOutput];\n }\n}\n", "import { Arrays } from \"@opendaw/lib-std\";\nimport { AbstractModuleAdapter } from \"../abstract\";\nimport { Direction, ModuleConnectorAdapter } from \"../connector\";\nexport class ModularAudioOutputAdapter extends AbstractModuleAdapter {\n #voltageInput;\n constructor(context, box) {\n super(context, box);\n this.#voltageInput = ModuleConnectorAdapter.create(context.boxAdapters, box.input, Direction.Input, \"Input\");\n }\n get voltageInput() { return this.#voltageInput; }\n get inputs() {\n return [this.#voltageInput];\n }\n get outputs() {\n return Arrays.empty();\n }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { AbstractModuleAdapter } from \"../abstract\";\nimport { Direction, ModuleConnectorAdapter } from \"../connector\";\nexport class ModuleGainAdapter extends AbstractModuleAdapter {\n #parameterGain;\n #voltageInput;\n #voltageOutput;\n constructor(context, box) {\n super(context, box);\n this.#parameterGain = this.parameters.createParameter(box.gain, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: \"db\" }), \"Gain\");\n this.#voltageInput = ModuleConnectorAdapter.create(context.boxAdapters, box.voltageInput, Direction.Input, \"Input\");\n this.#voltageOutput = ModuleConnectorAdapter.create(context.boxAdapters, box.voltageOutput, Direction.Output, \"Output\");\n }\n get parameterGain() { return this.#parameterGain; }\n get voltageInput() { return this.#voltageInput; }\n get voltageOutput() { return this.#voltageOutput; }\n get inputs() {\n return [this.#voltageInput];\n }\n get outputs() {\n return [this.#voltageOutput];\n }\n}\n", "import { AbstractModuleAdapter } from \"../abstract\";\nimport { Direction, ModuleConnectorAdapter } from \"../connector\";\nexport class ModuleMultiplierAdapter extends AbstractModuleAdapter {\n #voltageInputX;\n #voltageInputY;\n #voltageOutput;\n constructor(context, box) {\n super(context, box);\n this.#voltageInputX = ModuleConnectorAdapter.create(context.boxAdapters, box.voltageInputX, Direction.Input, \"X\");\n this.#voltageInputY = ModuleConnectorAdapter.create(context.boxAdapters, box.voltageInputY, Direction.Input, \"Y\");\n this.#voltageOutput = ModuleConnectorAdapter.create(context.boxAdapters, box.voltageOutput, Direction.Output, \"Result\");\n }\n get inputs() {\n return [this.#voltageInputX, this.#voltageInputY];\n }\n get outputs() {\n return [this.#voltageOutput];\n }\n}\n", "import { Arrays } from \"@opendaw/lib-std\";\nimport { AbstractModuleAdapter } from \"../abstract\";\nimport { Direction, ModuleConnectorAdapter } from \"../connector\";\nexport class ModularAudioInputAdapter extends AbstractModuleAdapter {\n #voltageOutput;\n constructor(context, box) {\n super(context, box);\n this.#voltageOutput = ModuleConnectorAdapter.create(context.boxAdapters, box.output, Direction.Output, \"Output\");\n }\n get voltageOutput() { return this.#voltageOutput; }\n get inputs() {\n return Arrays.empty();\n }\n get outputs() {\n return [this.#voltageOutput];\n }\n}\n", "import { asDefined } from \"@opendaw/lib-std\";\nimport { ModuleDelayAdapter } from \"./modules/delay\";\nimport { ModularAudioOutputAdapter } from \"./modules/audio-output\";\nimport { ModuleGainAdapter } from \"./modules/gain\";\nimport { ModuleMultiplierAdapter } from \"./modules/multiplier\";\nimport { ModularAudioInputAdapter } from \"./modules/audio-input\";\nexport var Modules;\n(function (Modules) {\n Modules.isVertexOfModule = (vertex) => vertex.box.accept({\n visitModuleGainBox: () => true,\n visitModuleDelayBox: () => true,\n visitModuleMultiplierBox: () => true,\n visitModularAudioInputBox: () => true,\n visitModularAudioOutputBox: () => true\n }) ?? false;\n Modules.adapterFor = (adapters, box) => asDefined(box.accept({\n visitModuleGainBox: (box) => adapters.adapterFor(box, ModuleGainAdapter),\n visitModuleDelayBox: (box) => adapters.adapterFor(box, ModuleDelayAdapter),\n visitModuleMultiplierBox: (box) => adapters.adapterFor(box, ModuleMultiplierAdapter),\n visitModularAudioInputBox: (box) => adapters.adapterFor(box, ModularAudioInputAdapter),\n visitModularAudioOutputBox: (box) => adapters.adapterFor(box, ModularAudioOutputAdapter)\n }), `Could not find ModuleAdapter for ${box.name}`);\n})(Modules || (Modules = {}));\n", "import { Modules } from \"./module\";\nexport class DeviceInterfaceKnobAdapter {\n #context;\n #box;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get moduleAdapter() {\n return Modules.adapterFor(this.#context.boxAdapters, this.#parameterTarget.box);\n }\n get parameterAdapter() {\n return this.moduleAdapter.parameters.parameterAt(this.#parameterTarget.address.fieldKeys);\n }\n get #parameterTarget() {\n return this.#box.parameter.targetVertex.unwrap(\"Parameter not assigned\");\n }\n terminate() {\n }\n}\n", "import { panic } from \"@opendaw/lib-std\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { Devices } from \"../../devices\";\nimport { ModularAdapter } from \"../../modular/modular\";\nimport { DeviceInterfaceKnobAdapter } from \"../../modular/user-interface\";\nexport class ModularDeviceBoxAdapter {\n type = \"audio-effect\";\n accepts = \"audio\";\n #context;\n #box;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get labelField() { return this.#box.label; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get host() { return this.#box.host; }\n parameterAt(_fieldIndices) { return panic(\"Not yet implemented\"); }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n modular() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.modularSetup.targetVertex.unwrap(\"No Modular found\").box, ModularAdapter);\n }\n elements() {\n return this.#box.userInterface.elements.pointerHub.filter(Pointers.DeviceUserInterface)\n .map(pointer => this.#context.boxAdapters.adapterFor(pointer.box, DeviceInterfaceKnobAdapter));\n }\n terminate() { }\n}\n", "import { asDefined, ifDefined, Listeners, Terminator, UUID } from \"@opendaw/lib-std\";\nimport { ModuleConnectionAdapter } from \"./connection\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { Modules } from \"./module\";\nimport { ModularDeviceBoxAdapter } from \"../devices/audio-effects/ModularDeviceBoxAdapter\";\nexport class ModularAdapter {\n #terminator = new Terminator();\n #listeners;\n #context;\n #box;\n #modules;\n #connections;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#listeners = this.#terminator.own(new Listeners());\n this.#modules = UUID.newSet(adapter => adapter.uuid);\n this.#connections = UUID.newSet(adapter => adapter.uuid);\n const addModule = (pointer) => {\n const adapter = Modules.adapterFor(this.#context.boxAdapters, pointer.box);\n const added = this.#modules.add(adapter);\n // assert(added, `Could not add ${pointer}`)\n // TODO Implement catchupAndSubscribeTransactual that deals with that situation\n if (!added) {\n return;\n }\n this.#listeners.proxy.onModuleAdded(adapter);\n };\n const removeModule = (pointer) => this.#listeners.proxy.onModuleRemoved(this.#modules.removeByKey(pointer.address.uuid));\n const addConnection = (pointer) => {\n const adapter = this.#context.boxAdapters.adapterFor(pointer.box, ModuleConnectionAdapter);\n const added = this.#connections.add(adapter);\n // assert(added, `Could not add ${pointer}`)\n // TODO Implement catchupAndSubscribeTransactual that deals with that situation\n if (!added) {\n return;\n }\n this.#listeners.proxy.onConnectionAdded(adapter);\n };\n const removeConnection = (pointer) => this.#listeners.proxy.onConnectionRemoved(this.#connections.removeByKey(pointer.address.uuid));\n this.#box.modules.pointerHub.filter(Pointers.ModuleCollection).forEach(addModule);\n this.#box.connections.pointerHub.filter(Pointers.ConnectionCollection).forEach(addConnection);\n this.#terminator.own(this.#box.modules.pointerHub\n .subscribeTransactual({ onAdd: addModule, onRemove: removeModule }, Pointers.ModuleCollection));\n this.#terminator.own(this.#box.connections.pointerHub\n .subscribeTransactual({ onAdd: addConnection, onRemove: removeConnection }, Pointers.ConnectionCollection));\n }\n catchupAndSubscribe(listener) {\n ifDefined(listener.onModuleAdded, fn => this.#modules.forEach(adapter => fn(adapter)));\n ifDefined(listener.onConnectionAdded, fn => this.#connections.forEach(adapter => fn(adapter)));\n return this.#listeners.subscribe(listener);\n }\n get box() { return this.#box; }\n get address() { return this.#box.address; }\n get uuid() { return this.#box.address.uuid; }\n get editingField() { return this.#box.editing; }\n get labelField() { return this.#box.label; }\n get modules() { return this.#modules.values(); }\n get connections() { return this.#connections.values(); }\n get device() {\n return this.#context.boxAdapters\n .adapterFor(asDefined(this.#box.device.pointerHub.incoming().at(0), \"No device found\").box, ModularDeviceBoxAdapter);\n }\n terminate() {\n console.debug(`terminate ${this}`);\n this.#terminator.terminate();\n }\n}\n", "import { moebiusEase, squashUnit, StringMapping, Terminator, ValueMapping } from \"@opendaw/lib-std\";\nimport { GroovePattern, PPQN } from \"@opendaw/lib-dsp\";\nimport { ParameterAdapterSet } from \"../ParameterAdapterSet\";\nexport class GrooveShuffleBoxAdapter {\n static Durations = [\n [1, 8], [1, 4], [1, 4], [1, 2], [1, 1], [2, 1], [4, 1], [8, 1], [16, 1]\n ];\n static DurationPPQNs = GrooveShuffleBoxAdapter.Durations.map(([n, d]) => PPQN.fromSignature(n, d));\n static DurationStrings = GrooveShuffleBoxAdapter.Durations.map(([n, d]) => (`${n}/${d}`));\n type = \"groove-adapter\";\n #terminator = new Terminator();\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n #groove = new GroovePattern({\n duration: () => this.#duration,\n fx: x => moebiusEase(x, this.#amount),\n fy: y => moebiusEase(y, 1.0 - this.#amount)\n });\n #amount = 0.0;\n #duration = PPQN.SemiQuaver * 2;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = this.#terminator.own(new ParameterAdapterSet(this.#context));\n this.namedParameter = this.#wrapParameters(box);\n this.#terminator.ownAll(this.namedParameter.duration.catchupAndSubscribe(owner => this.#duration = owner.getValue()), this.namedParameter.amount.catchupAndSubscribe(owner => this.#amount = squashUnit(owner.getValue(), 0.01)));\n }\n unwarp(position) { return this.#groove.unwarp(position); }\n warp(position) { return this.#groove.warp(position); }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n parameterAt(fieldIndices) { return this.#parametric.parameterAt(fieldIndices); }\n terminate() { this.#terminator.terminate(); }\n #wrapParameters(box) {\n return {\n duration: this.#parametric.createParameter(box.duration, ValueMapping.values(GrooveShuffleBoxAdapter.DurationPPQNs), StringMapping.values(\"\", GrooveShuffleBoxAdapter.DurationPPQNs, GrooveShuffleBoxAdapter.DurationStrings), \"duration\"),\n amount: this.#parametric.createParameter(box.amount, ValueMapping.unipolar(), StringMapping.percent({ fractionDigits: 0 }), \"amount\")\n };\n }\n}\n", "import { clamp, Notifier, Option, Terminator } from \"@opendaw/lib-std\";\nexport class FieldAdapter {\n #field;\n #valueMapping;\n #stringMapping;\n #name;\n #anchor;\n #terminator = new Terminator();\n #valueChangeNotifier;\n #trackBoxAdapter = Option.None;\n constructor(field, valueMapping, stringMapping, name, anchor) {\n this.#field = field;\n this.#valueMapping = valueMapping;\n this.#stringMapping = stringMapping;\n this.#name = name;\n this.#anchor = anchor ?? 0.0;\n this.#valueChangeNotifier = this.#terminator.own(new Notifier());\n this.#terminator.own(this.#field.subscribe(() => this.#valueChangeNotifier.notify(this)));\n /*\n For debugging: It's not live because floating errors expose false positives,\n and I am too lazy to implement this in the mappings itself.\n */\n if (field.getValue() !== valueMapping.clamp(field.getValue())) {\n console.warn(`${name} (${field.getValue()}) is out of bounds`, valueMapping);\n }\n }\n get field() { return this.#field; }\n get valueMapping() { return this.#valueMapping; }\n get stringMapping() { return this.#stringMapping; }\n get name() { return this.#name; }\n get anchor() { return this.#anchor; }\n get type() { return this.#field.type; }\n get address() { return this.#field.address; }\n get track() { return this.#trackBoxAdapter; }\n subscribe(observer) { return this.#valueChangeNotifier.subscribe(observer); }\n catchupAndSubscribe(observer) {\n observer(this);\n return this.subscribe(observer);\n }\n getValue() { return this.#field.getValue(); }\n setValue(value) { this.#field.setValue(this.#valueMapping.clamp(value)); }\n setUnitValue(value) { this.setValue(this.#valueMapping.y(value)); }\n getUnitValue() { return this.#valueMapping.x(this.getValue()); }\n getPrintValue() { return this.#stringMapping.x(this.getValue()); }\n setPrintValue(text) {\n const result = this.#stringMapping.y(text);\n if (result.type === \"unitValue\") {\n this.setUnitValue(clamp(result.value, 0.0, 1.0));\n }\n else if (result.type === \"explicit\") {\n this.setValue(this.valueMapping.clamp(result.value));\n }\n else {\n console.debug(`Unknown text input: '${result.value}'`);\n }\n }\n reset() { this.setValue(this.#valueMapping.clamp(this.#field.initValue)); }\n terminate() { this.#terminator.terminate(); }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { FieldAdapter } from \"./FieldAdapter\";\nimport { Propagation } from \"@opendaw/lib-box\";\nexport class PianoModeAdapter {\n #object;\n #keyboard;\n #timeRangeInQuarters;\n #noteScale;\n #noteLabels;\n #transpose;\n constructor(object) {\n this.#object = object;\n this.#keyboard = new FieldAdapter(this.#object.keyboard, ValueMapping.values([88, 76, 61, 49]), StringMapping.numeric({ fractionDigits: 1 }), \"Keyboard Type\");\n this.#timeRangeInQuarters = new FieldAdapter(this.#object.timeRangeInQuarters, ValueMapping.exponential(1, 64), StringMapping.numeric({ fractionDigits: 1 }), \"Time-Range\");\n this.#noteScale = new FieldAdapter(this.#object.noteScale, ValueMapping.exponential(0.5, 2.0), StringMapping.numeric({ fractionDigits: 1 }), \"Note Scale\");\n this.#noteLabels = new FieldAdapter(this.#object.noteLabels, ValueMapping.bool, StringMapping.bool, \"Note Labels\");\n this.#transpose = new FieldAdapter(this.#object.transpose, ValueMapping.linearInteger(-48, 48), StringMapping.numeric({ fractionDigits: 0 }), \"Transpose\");\n }\n subscribe(observer) {\n return this.#object.box.subscribe(Propagation.Children, () => observer(this));\n }\n get object() { return this.#object; }\n get keyboard() { return this.#keyboard; }\n get timeRangeInQuarters() { return this.#timeRangeInQuarters; }\n get noteScale() { return this.#noteScale; }\n get noteLabels() { return this.#noteLabels; }\n get transpose() { return this.#transpose; }\n}\n", "import { AudioBusBoxAdapter } from \"./audio-unit/AudioBusBoxAdapter\";\nimport { Pointers } from \"@opendaw/studio-enums\";\nimport { SortedBoxAdapterCollection } from \"./SortedBoxAdapterCollection\";\nimport { AudioUnitBoxAdapter } from \"./audio-unit/AudioUnitBoxAdapter\";\nimport { BoxAdapterCollection } from \"./BoxAdapterCollection\";\nimport { TimelineBoxAdapter } from \"./timeline/TimelineBoxAdapter\";\nimport { GrooveShuffleBoxAdapter } from \"./grooves/GrooveShuffleBoxAdapter\";\nimport { PianoModeAdapter } from \"./PianoModeAdapter\";\nexport class RootBoxAdapter {\n #context;\n #box;\n #audioUnits;\n #audioBusses;\n #pianoMode;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#audioUnits = SortedBoxAdapterCollection.create(this.#box.audioUnits, box => this.#context.boxAdapters.adapterFor(box, AudioUnitBoxAdapter), Pointers.AudioUnits);\n this.#audioBusses = new BoxAdapterCollection(this.#box.audioBusses.pointerHub, box => this.#context.boxAdapters.adapterFor(box, AudioBusBoxAdapter), Pointers.AudioBusses);\n this.#pianoMode = new PianoModeAdapter(this.#box.pianoMode);\n }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get box() { return this.#box; }\n get audioBusses() { return this.#audioBusses; }\n get audioUnits() { return this.#audioUnits; }\n get clips() {\n return this.#audioUnits.adapters()\n .flatMap(adapter => adapter.tracks.collection.adapters())\n .flatMap(track => track.clips.collection.adapters());\n }\n get groove() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.groove.targetVertex.unwrap(\"no groove\").box, GrooveShuffleBoxAdapter);\n }\n get timeline() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.timeline.targetVertex.unwrap(\"no timeline\").box, TimelineBoxAdapter);\n }\n get pianoMode() { return this.#pianoMode; }\n get created() { return new Date(this.#box.created.getValue()); }\n terminate() { this.#audioUnits.terminate(); }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { Devices } from \"../../devices\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nimport { TrackType } from \"../../timeline/TrackType\";\nexport class TapeDeviceBoxAdapter {\n type = \"instrument\";\n accepts = \"audio\";\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = new ParameterAdapterSet(this.#context);\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get labelField() { return this.#box.label; }\n get iconField() { return this.#box.icon; }\n get defaultTrackType() { return TrackType.Audio; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get acceptsMidiEvents() { return false; }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n parameterAt(fieldIndices) { return this.#parametric.parameterAt(fieldIndices); }\n terminate() { this.#parametric.terminate(); }\n #wrapParameters(box) {\n return {\n flutter: this.#parametric.createParameter(box.flutter, ValueMapping.unipolar(), StringMapping.percent(), \"flutter\"),\n wow: this.#parametric.createParameter(box.wow, ValueMapping.unipolar(), StringMapping.percent(), \"wow\"),\n noise: this.#parametric.createParameter(box.noise, ValueMapping.unipolar(), StringMapping.percent(), \"noise\"),\n saturation: this.#parametric.createParameter(box.saturation, ValueMapping.unipolar(), StringMapping.percent(), \"saturation\")\n };\n }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { Devices } from \"../../devices\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nimport { TrackType } from \"../../timeline/TrackType\";\nexport class VaporisateurDeviceBoxAdapter {\n type = \"instrument\";\n accepts = \"midi\";\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = new ParameterAdapterSet(this.#context);\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get labelField() { return this.#box.label; }\n get iconField() { return this.#box.icon; }\n get defaultTrackType() { return TrackType.Notes; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get acceptsMidiEvents() { return true; }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n parameterAt(fieldIndices) { return this.#parametric.parameterAt(fieldIndices); }\n terminate() { this.#parametric.terminate(); }\n #wrapParameters(box) {\n return {\n volume: this.#parametric.createParameter(box.volume, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: \"db\", fractionDigits: 1 }), \"volume\"),\n octave: this.#parametric.createParameter(box.octave, ValueMapping.linearInteger(-3, 3), StringMapping.numeric(), \"octave\", 0.5),\n tune: this.#parametric.createParameter(box.tune, ValueMapping.linear(-1200.0, +1200.0), StringMapping.numeric({ unit: \"cent\", fractionDigits: 0 }), \"tune\", 0.5),\n waveform: this.#parametric.createParameter(box.waveform, ValueMapping.linearInteger(0, 3), StringMapping.indices(\"\", [\"sine\", \"triangle\", \"sawtooth\", \"square\"]), \"waveform\"),\n cutoff: this.#parametric.createParameter(box.cutoff, ValueMapping.exponential(20.0, 18_000.0), StringMapping.numeric({ unit: \"Hz\" }), \"cutoff\"),\n resonance: this.#parametric.createParameter(box.resonance, ValueMapping.exponential(0.1, 20.0), StringMapping.numeric({ unit: \"q\", fractionDigits: 1 }), \"resonance\"),\n attack: this.#parametric.createParameter(box.attack, ValueMapping.exponential(0.001, 1.0), StringMapping.numeric({ unit: \"s\", fractionDigits: 3 }), \"attack\"),\n release: this.#parametric.createParameter(box.release, ValueMapping.exponential(0.001, 1.0), StringMapping.numeric({ unit: \"s\", fractionDigits: 3 }), \"release\"),\n filterEnvelope: this.#parametric.createParameter(box.filterEnvelope, ValueMapping.linear(-0.1, 0.1), StringMapping.percent(), \"filter env\", 0.5)\n };\n }\n}\n", "import { Fraction } from \"@opendaw/lib-dsp\";\nimport { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { Devices } from \"../../devices\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nexport class ArpeggioDeviceBoxAdapter {\n static RateFractions = Fraction.builder()\n .add([1, 1]).add([1, 2]).add([1, 3]).add([1, 4])\n .add([3, 16]).add([1, 6]).add([1, 8]).add([3, 32])\n .add([1, 12]).add([1, 16]).add([3, 64]).add([1, 24])\n .add([1, 32]).add([1, 48]).add([1, 64])\n .add([1, 96]).add([1, 128])\n .asDescendingArray();\n static RateStringMapping = StringMapping.indices(\"\", this.RateFractions.map(([n, d]) => `${n}/${d}`));\n type = \"midi-effect\";\n accepts = \"midi\";\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = new ParameterAdapterSet(this.#context);\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get labelField() { return this.#box.label; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get host() { return this.#box.host; }\n parameterAt(fieldIndices) { return this.#parametric.parameterAt(fieldIndices); }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n terminate() { this.#parametric.terminate(); }\n #wrapParameters(box) {\n return {\n modeIndex: this.#parametric.createParameter(box.modeIndex, ValueMapping.linearInteger(0, 2), StringMapping.indices(\"\", [\"Up\", \"Down\", \"UpDown\"]), \"mode\"),\n numOctaves: this.#parametric.createParameter(box.numOctaves, ValueMapping.linearInteger(1, 5), StringMapping.numeric({ unit: \"\", fractionDigits: 0 }), \"Octaves\"),\n rate: this.#parametric.createParameter(box.rateIndex, ValueMapping.linearInteger(0, ArpeggioDeviceBoxAdapter.RateFractions.length - 1), ArpeggioDeviceBoxAdapter.RateStringMapping, \"Rate\"),\n gate: this.#parametric.createParameter(box.gate, ValueMapping.linear(0.0, 2.0), StringMapping.percent({ fractionDigits: 0 }), \"Gate\"),\n repeat: this.#parametric.createParameter(box.repeat, ValueMapping.linearInteger(1, 16), StringMapping.numeric({ fractionDigits: 0 }), \"Repeat\"),\n velocity: this.#parametric.createParameter(box.velocity, ValueMapping.bipolar(), StringMapping.percent({ fractionDigits: 0, bipolar: false }), \"Velocity\")\n };\n }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { Devices } from \"../../devices\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nexport class PitchDeviceBoxAdapter {\n type = \"midi-effect\";\n accepts = \"midi\";\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = new ParameterAdapterSet(this.#context);\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get labelField() { return this.#box.label; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get host() { return this.#box.host; }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n parameterAt(fieldIndices) { return this.#parametric.parameterAt(fieldIndices); }\n terminate() { this.#parametric.terminate(); }\n #wrapParameters(box) {\n return {\n octaves: this.#parametric.createParameter(box.octaves, ValueMapping.linearInteger(-7, 7), StringMapping.numeric({ unit: \"oct\", fractionDigits: 0 }), \"octaves\"),\n semiTones: this.#parametric.createParameter(box.semiTones, ValueMapping.linearInteger(-36, 36), StringMapping.numeric({ unit: \"st\", fractionDigits: 0 }), \"semi-tones\"),\n cent: this.#parametric.createParameter(box.cents, ValueMapping.linear(-50.0, 50.0), StringMapping.numeric({ unit: \"cents\", fractionDigits: 1 }), \"cents\")\n };\n }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { Devices } from \"../../devices\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nimport { TrackType } from \"../../timeline/TrackType\";\nexport class NanoDeviceBoxAdapter {\n type = \"instrument\";\n accepts = \"midi\";\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = new ParameterAdapterSet(this.#context);\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get labelField() { return this.#box.label; }\n get iconField() { return this.#box.icon; }\n get defaultTrackType() { return TrackType.Notes; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get acceptsMidiEvents() { return true; }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n parameterAt(fieldIndices) { return this.#parametric.parameterAt(fieldIndices); }\n terminate() { this.#parametric.terminate(); }\n #wrapParameters(box) {\n return {\n volume: this.#parametric.createParameter(box.volume, ValueMapping.DefaultDecibel, StringMapping.numeric({ unit: \"db\", fractionDigits: 1 }), \"volume\"),\n release: this.#parametric.createParameter(box.release, ValueMapping.exponential(0.001, 8.0), StringMapping.numeric({ unit: \"s\", fractionDigits: 3 }), \"release\")\n };\n }\n}\n", "import { Pointers } from \"@opendaw/studio-enums\";\nimport { PlayfieldSampleBox } from \"@opendaw/studio-boxes\";\nimport { Option, StringMapping, Terminator, UUID, ValueMapping } from \"@opendaw/lib-std\";\nimport { Devices } from \"../../../devices\";\nimport { SortedBoxAdapterCollection } from \"../../../SortedBoxAdapterCollection\";\nimport { ParameterAdapterSet } from \"../../../ParameterAdapterSet\";\nimport { AudioFileBoxAdapter } from \"../../../audio/AudioFileBoxAdapter\";\nimport { TrackType } from \"../../../timeline/TrackType\";\nimport { PlayfieldDeviceBoxAdapter } from \"../PlayfieldDeviceBoxAdapter\";\nexport class PlayfieldSampleBoxAdapter {\n class = \"device-host\";\n accepts = false;\n type = \"instrument\";\n #terminator = new Terminator();\n #context;\n #box;\n #midiEffects;\n #audioEffects;\n #parametric;\n namedParameter; // let typescript infer the type\n #file = Option.None;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#midiEffects = this.#terminator.own(SortedBoxAdapterCollection.create(this.#box.midiEffects, box => this.#context.boxAdapters.adapterFor(box, Devices.isMidiEffect), Pointers.MidiEffectHost));\n this.#audioEffects = this.#terminator.own(SortedBoxAdapterCollection.create(this.#box.audioEffects, box => this.#context.boxAdapters.adapterFor(box, Devices.isAudioEffect), Pointers.AudioEffectHost));\n this.#parametric = this.#terminator.own(new ParameterAdapterSet(this.#context));\n this.namedParameter = this.#wrapParameters(box);\n this.#terminator.own(this.#box.file.catchupAndSubscribe(pointer => {\n this.#file = pointer.targetVertex.map(({ box }) => this.#context.boxAdapters.adapterFor(box, AudioFileBoxAdapter));\n this.#file.unwrapOrNull()?.getOrCreateLoader(); // triggers preloading file if available\n }));\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get peakAddress() { return this.#box.address.append(1001); }\n get indexField() { return this.#box.index; }\n get gate() { return this.#box.gate.getValue(); }\n get exclude() { return this.#box.exclude.getValue(); }\n get label() {\n return `${this.device().labelField.getValue()} > ${this.#file.mapOr(file => file.box.fileName.getValue(), \"No file\")}`;\n }\n get iconField() { return this.#box.icon; }\n get defaultTrackType() { return TrackType.Notes; }\n get acceptsMidiEvents() { return true; }\n get midiEffectsField() { return this.#box.midiEffects; }\n get inputField() { return this.audioUnitBoxAdapter().box.input; }\n get audioEffectsField() { return this.#box.audioEffects; }\n get tracksField() { return this.audioUnitBoxAdapter().box.tracks; }\n get isAudioUnit() { return false; }\n file() { return this.#file; }\n fileUUID() { return this.#box.file.targetAddress.unwrap().uuid; }\n resetParameters() {\n this.#box.mute.reset();\n this.#box.solo.reset();\n this.#box.exclude.reset();\n this.#box.polyphone.reset();\n this.#box.pitch.reset();\n this.#box.attack.reset();\n this.#box.release.reset();\n this.#box.sampleStart.reset();\n this.#box.sampleEnd.reset();\n this.#box.gate.reset();\n }\n copyToIndex(index) {\n PlayfieldSampleBox.create(this.#box.graph, UUID.generate(), box => {\n box.file.refer(this.#box.file.targetVertex.unwrap());\n box.device.refer(this.#box.device.targetVertex.unwrap());\n box.index.setValue(index);\n box.mute.setValue(this.#box.mute.getValue());\n box.solo.setValue(this.#box.solo.getValue());\n box.sampleStart.setValue(this.#box.sampleStart.getValue());\n box.sampleEnd.setValue(this.#box.sampleEnd.getValue());\n box.attack.setValue(this.#box.attack.getValue());\n box.release.setValue(this.#box.release.getValue());\n box.pitch.setValue(this.#box.pitch.getValue());\n box.exclude.setValue(this.#box.exclude.getValue());\n box.gate.setValue(this.#box.gate.getValue());\n // TODO Copy effects?\n });\n }\n get midiEffects() {\n return this.#midiEffects;\n }\n get inputAdapter() {\n return Option.wrap(this);\n }\n get audioEffects() {\n return this.#audioEffects;\n }\n get labelField() { return this.#box.label; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n device() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.device.targetVertex.unwrap().box, PlayfieldDeviceBoxAdapter);\n }\n deviceHost() { return this.device().deviceHost(); }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n terminate() { this.#terminator.terminate(); }\n #wrapParameters(box) {\n return {\n gate: this.#parametric.createParameter(box.gate, ValueMapping.linearInteger(0, 2), StringMapping.indices(\"\", [\"Off\", \"On\", \"Loop\"]), \"Gate\"),\n mute: this.#parametric.createParameter(box.mute, ValueMapping.bool, StringMapping.bool, \"Mute\"),\n solo: this.#parametric.createParameter(box.solo, ValueMapping.bool, StringMapping.bool, \"Solo\"),\n polyphone: this.#parametric.createParameter(box.polyphone, ValueMapping.bool, StringMapping.bool, \"Polyphone\"),\n exclude: this.#parametric.createParameter(box.exclude, ValueMapping.bool, StringMapping.bool, \"Exclude\"),\n pitch: this.#parametric.createParameter(box.pitch, ValueMapping.linear(-1200, 1200), StringMapping.numeric({\n unit: \"cents\",\n bipolar: true,\n fractionDigits: 0\n }), \"Pitch\", 0.0),\n sampleStart: this.#parametric.createParameter(box.sampleStart, ValueMapping.unipolar(), StringMapping.percent(), \"Start\", 0.0),\n sampleEnd: this.#parametric.createParameter(box.sampleEnd, ValueMapping.unipolar(), StringMapping.percent(), \"End\", 1.0),\n attack: this.#parametric.createParameter(box.attack, ValueMapping.exponential(0.001, 5.0), StringMapping.numeric({\n unit: \"s\",\n unitPrefix: true,\n fractionDigits: 1\n }), \"Attack\"),\n release: this.#parametric.createParameter(box.release, ValueMapping.exponential(0.001, 5.0), StringMapping.numeric({\n unit: \"s\",\n unitPrefix: true,\n fractionDigits: 1\n }), \"Release\")\n };\n }\n}\n", "import { Pointers } from \"@opendaw/studio-enums\";\nimport { Devices } from \"../../devices\";\nimport { SortedBoxAdapterCollection } from \"../../SortedBoxAdapterCollection\";\nimport { PlayfieldSampleBoxAdapter } from \"./Playfield/PlayfieldSampleBoxAdapter\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nimport { TrackType } from \"../../timeline/TrackType\";\nexport class PlayfieldDeviceBoxAdapter {\n type = \"instrument\";\n accepts = \"midi\";\n #context;\n #box;\n #samples;\n #parametric;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#samples = SortedBoxAdapterCollection.create(box.samples, box => context.boxAdapters.adapterFor(box, PlayfieldSampleBoxAdapter), Pointers.Sample);\n this.#parametric = new ParameterAdapterSet(this.#context);\n }\n reset() { this.#samples.adapters().forEach(adapter => adapter.box.delete()); }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get notesAddress() { return this.#box.address.append(1000); }\n get labelField() { return this.#box.label; }\n get iconField() { return this.#box.icon; }\n get defaultTrackType() { return TrackType.Notes; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get acceptsMidiEvents() { return true; }\n get samples() { return this.#samples; }\n get context() { return this.#context; }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n parameterAt(fieldIndices) { return this.#parametric.parameterAt(fieldIndices); }\n terminate() { this.#parametric.terminate(); }\n}\n", "import { StringMapping, ValueMapping } from \"@opendaw/lib-std\";\nimport { Devices } from \"../../devices\";\nimport { ParameterAdapterSet } from \"../../ParameterAdapterSet\";\nexport class StereoToolDeviceBoxAdapter {\n type = \"audio-effect\";\n accepts = \"audio\";\n #context;\n #box;\n #parametric;\n namedParameter; // let typescript infer the type\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.#parametric = new ParameterAdapterSet(this.#context);\n this.namedParameter = this.#wrapParameters(box);\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get labelField() { return this.#box.label; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get host() { return this.#box.host; }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n terminate() { this.#parametric.terminate(); }\n #wrapParameters(box) {\n return {\n volume: this.#parametric.createParameter(box.volume, ValueMapping.decibel(-72.0, 0.0, 12.0), StringMapping.numeric({ unit: \"db\", fractionDigits: 1 }), \"Volume\"),\n panning: this.#parametric.createParameter(box.panning, ValueMapping.bipolar(), StringMapping.panning, \"Panning\", 0.5),\n stereo: this.#parametric.createParameter(box.stereo, ValueMapping.bipolar(), StringMapping.numeric({ unit: \"%\", fractionDigits: 0 }), \"stereo\", 0.5),\n invertL: this.#parametric.createParameter(box.invertL, ValueMapping.bool, StringMapping.bool, \"Invert Left\"),\n invertR: this.#parametric.createParameter(box.invertR, ValueMapping.bool, StringMapping.bool, \"Invert Right\"),\n swap: this.#parametric.createParameter(box.swap, ValueMapping.bool, StringMapping.bool, \"Swap\")\n };\n }\n}\n", "export var GrooveAdapter;\n(function (GrooveAdapter) {\n GrooveAdapter.checkType = (adapter) => adapter !== null && typeof adapter === \"object\" && \"type\" in adapter && adapter.type === \"groove-adapter\";\n})(GrooveAdapter || (GrooveAdapter = {}));\n", "import { Devices } from \"../../devices\";\nimport { GrooveAdapter } from \"../../grooves/GrooveBoxAdapter\";\nexport class ZeitgeistDeviceBoxAdapter {\n type = \"midi-effect\";\n accepts = \"midi\";\n #context;\n #box;\n constructor(context, box) {\n this.#context = context;\n this.#box = box;\n this.groove(); // force creation of GrooveAdapter\n }\n get box() { return this.#box; }\n get uuid() { return this.#box.address.uuid; }\n get address() { return this.#box.address; }\n get indexField() { return this.#box.index; }\n get labelField() { return this.#box.label; }\n get enabledField() { return this.#box.enabled; }\n get minimizedField() { return this.#box.minimized; }\n get host() { return this.#box.host; }\n deviceHost() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.host.targetVertex.unwrap(\"no device-host\").box, Devices.isHost);\n }\n groove() {\n return this.#context.boxAdapters\n .adapterFor(this.#box.groove.targetVertex.unwrap(\"no groove\").box, GrooveAdapter.checkType);\n }\n catchupAndSubscribeGroove(observer) {\n return this.#box.groove.catchupAndSubscribe(pointer => observer(this.#context.boxAdapters\n .adapterFor(pointer.targetVertex.unwrap(\"No groove found\").box, GrooveAdapter.checkType)));\n }\n audioUnitBoxAdapter() { return this.deviceHost().audioUnitBoxAdapter(); }\n terminate() { }\n}\n", "import { asDefined, assert, isDefined, panic, UUID } from \"@opendaw/lib-std\";\nimport { AudioUnitBoxAdapter } from \"./audio-unit/AudioUnitBoxAdapter\";\nimport { DelayDeviceBoxAdapter } from \"./devices/audio-effects/DelayDeviceBoxAdapter\";\nimport { ReverbDeviceBoxAdapter } from \"./devices/audio-effects/ReverbDeviceBoxAdapter\";\nimport { RevampDeviceBoxAdapter } from \"./devices/audio-effects/RevampDeviceBoxAdapter\";\nimport { AudioFileBoxAdapter } from \"./audio/AudioFileBoxAdapter\";\nimport { AudioRegionBoxAdapter } from \"./timeline/region/AudioRegionBoxAdapter\";\nimport { TimelineBoxAdapter } from \"./timeline/TimelineBoxAdapter\";\nimport { MarkerBoxAdapter } from \"./timeline/MarkerBoxAdapter\";\nimport { ModularAdapter } from \"./modular/modular\";\nimport { ModuleDelayAdapter } from \"./modular/modules/delay\";\nimport { ModuleMultiplierAdapter } from \"./modular/modules/multiplier\";\nimport { ModuleConnectionAdapter } from \"./modular/connection\";\nimport { ModularAudioOutputAdapter } from \"./modular/modules/audio-output\";\nimport { ModularAudioInputAdapter } from \"./modular/modules/audio-input\";\nimport { ModularDeviceBoxAdapter } from \"./devices/audio-effects/ModularDeviceBoxAdapter\";\nimport { DeviceInterfaceKnobAdapter } from \"./modular/user-interface\";\nimport { ModuleGainAdapter } from \"./modular/modules/gain\";\nimport { AudioBusBoxAdapter } from \"./audio-unit/AudioBusBoxAdapter\";\nimport { AuxSendBoxAdapter } from \"./audio-unit/AuxSendBoxAdapter\";\nimport { RootBoxAdapter } from \"./RootBoxAdapter\";\nimport { NoteEventBoxAdapter } from \"./timeline/event/NoteEventBoxAdapter\";\nimport { NoteRegionBoxAdapter } from \"./timeline/region/NoteRegionBoxAdapter\";\nimport { NoteEventCollectionBoxAdapter } from \"./timeline/collection/NoteEventCollectionBoxAdapter\";\nimport { ValueEventBoxAdapter } from \"./timeline/event/ValueEventBoxAdapter\";\nimport { ValueRegionBoxAdapter } from \"./timeline/region/ValueRegionBoxAdapter\";\nimport { ValueEventCollectionBoxAdapter } from \"./timeline/collection/ValueEventCollectionBoxAdapter\";\nimport { NoteClipBoxAdapter } from \"./timeline/clip/NoteClipBoxAdapter\";\nimport { AudioClipBoxAdapter } from \"./timeline/clip/AudioClipBoxAdapter\";\nimport { ValueClipBoxAdapter } from \"./timeline/clip/ValueClipBoxAdapter\";\nimport { TrackBoxAdapter } from \"./timeline/TrackBoxAdapter\";\nimport { TapeDeviceBoxAdapter } from \"./devices/instruments/TapeDeviceBoxAdapter\";\nimport { VaporisateurDeviceBoxAdapter } from \"./devices/instruments/VaporisateurDeviceBoxAdapter\";\nimport { ArpeggioDeviceBoxAdapter } from \"./devices/midi-effects/ArpeggioDeviceBoxAdapter\";\nimport { PitchDeviceBoxAdapter } from \"./devices/midi-effects/PitchDeviceBoxAdapter\";\nimport { NanoDeviceBoxAdapter } from \"./devices/instruments/NanoDeviceBoxAdapter\";\nimport { PlayfieldDeviceBoxAdapter } from \"./devices/instruments/PlayfieldDeviceBoxAdapter\";\nimport { StereoToolDeviceBoxAdapter } from \"./devices/audio-effects/StereoToolDeviceBoxAdapter\";\nimport { PlayfieldSampleBoxAdapter } from \"./devices/instruments/Playfield/PlayfieldSampleBoxAdapter\";\nimport { ZeitgeistDeviceBoxAdapter } from \"./devices/midi-effects/ZeitgeistDeviceBoxAdapter\";\nimport { GrooveShuffleBoxAdapter } from \"./grooves/GrooveShuffleBoxAdapter\";\nexport class BoxAdapters {\n #context;\n #adapters;\n #deleted;\n #terminable;\n constructor(context) {\n this.#context = context;\n this.#adapters = UUID.newSet(adapter => adapter.uuid);\n this.#deleted = new Set();\n this.#terminable = this.#context.boxGraph.subscribeToAllUpdates({\n onUpdate: (update) => {\n if (update.type === \"delete\") {\n const adapter = this.#adapters.getOrNull(update.uuid);\n if (isDefined(adapter)) {\n this.#deleted.add(adapter.box);\n this.#adapters.removeByValue(adapter).terminate();\n }\n }\n }\n });\n }\n terminate() {\n this.#adapters.values().forEach(adapter => adapter.terminate());\n this.#adapters.clear();\n this.#terminable.terminate();\n }\n adapterFor(box, checkType) {\n if (this.#deleted.has(box)) {\n return panic(`Cannot resolve adapter for already deleted box: ${box}`);\n }\n let adapter = this.#adapters.getOrNull(box.address.uuid);\n if (adapter === null) {\n adapter = this.#create(box);\n const added = this.#adapters.add(adapter);\n assert(added, `Could not add adapter for ${box}`);\n }\n if (typeof checkType === \"function\") {\n return Object.hasOwn(checkType, \"prototype\")\n ? adapter instanceof checkType ? adapter : panic(`${adapter} is not instance of ${checkType}`)\n : checkType(adapter) ? adapter : panic(`${adapter} did not pass custom type guard`);\n }\n return panic(\"Unknown checkType method\");\n }\n #create(unknownBox) {\n return asDefined(unknownBox.accept({\n visitRootBox: (box) => new RootBoxAdapter(this.#context, box),\n visitArpeggioDeviceBox: (box) => new ArpeggioDeviceBoxAdapter(this.#context, box),\n visitPitchDeviceBox: (box) => new PitchDeviceBoxAdapter(this.#context, box),\n visitStereoToolDeviceBox: (box) => new StereoToolDeviceBoxAdapter(this.#context, box),\n visitDelayDeviceBox: (box) => new DelayDeviceBoxAdapter(this.#context, box),\n visitReverbDeviceBox: (box) => new ReverbDeviceBoxAdapter(this.#context, box),\n visitRevampDeviceBox: (box) => new RevampDeviceBoxAdapter(this.#context, box),\n visitPlayfieldDeviceBox: (box) => new PlayfieldDeviceBoxAdapter(this.#context, box),\n visitPlayfieldSampleBox: (box) => new PlayfieldSampleBoxAdapter(this.#context, box),\n visitModularDeviceBox: (box) => new ModularDeviceBoxAdapter(this.#context, box),\n visitTapeDeviceBox: (box) => new TapeDeviceBoxAdapter(this.#context, box),\n visitNanoDeviceBox: (box) => new NanoDeviceBoxAdapter(this.#context, box),\n visitVaporisateurDeviceBox: (box) => new VaporisateurDeviceBoxAdapter(this.#context, box),\n visitModularBox: (box) => new ModularAdapter(this.#context, box),\n visitModuleConnectionBox: (box) => new ModuleConnectionAdapter(this.#context, box),\n visitModuleDelayBox: (box) => new ModuleDelayAdapter(this.#context, box),\n visitModuleGainBox: (box) => new ModuleGainAdapter(this.#context, box),\n visitModuleMultiplierBox: (box) => new ModuleMultiplierAdapter(this.#context, box),\n visitModularAudioInputBox: (box) => new ModularAudioInputAdapter(this.#context, box),\n visitModularAudioOutputBox: (box) => new ModularAudioOutputAdapter(this.#context, box),\n visitDeviceInterfaceKnobBox: (box) => new DeviceInterfaceKnobAdapter(this.#context, box),\n visitAudioUnitBox: (box) => new AudioUnitBoxAdapter(this.#context, box),\n visitAudioBusBox: (box) => new AudioBusBoxAdapter(this.#context, box),\n visitAuxSendBox: (box) => new AuxSendBoxAdapter(this.#context, box),\n visitAudioFileBox: (box) => new AudioFileBoxAdapter(this.#context, box),\n visitAudioClipBox: (box) => new AudioClipBoxAdapter(this.#context, box),\n visitAudioRegionBox: (box) => new AudioRegionBoxAdapter(this.#context, box),\n visitNoteEventBox: (box) => new NoteEventBoxAdapter(this.#context, box),\n visitNoteEventCollectionBox: (box) => new NoteEventCollectionBoxAdapter(this.#context, box),\n visitNoteClipBox: (box) => new NoteClipBoxAdapter(this.#context, box),\n visitNoteRegionBox: (box) => new NoteRegionBoxAdapter(this.#context, box),\n visitValueEventBox: (box) => new ValueEventBoxAdapter(this.#context, box),\n visitValueEventCollectionBox: (box) => new ValueEventCollectionBoxAdapter(this.#context, box),\n visitValueClipBox: (box) => new ValueClipBoxAdapter(this.#context, box),\n visitValueRegionBox: (box) => new ValueRegionBoxAdapter(this.#context, box),\n visitTrackBox: (box) => new TrackBoxAdapter(this.#context, box),\n visitTimelineBox: (box) => new TimelineBoxAdapter(this.#context, box),\n visitMarkerBox: (box) => new MarkerBoxAdapter(this.#context, box),\n visitZeitgeistDeviceBox: (box) => new ZeitgeistDeviceBoxAdapter(this.#context, box),\n visitGrooveShuffleBox: (box) => new GrooveShuffleBoxAdapter(this.#context, box)\n }), `Could not find factory for ${unknownBox}`);\n }\n}\n", "export var ExportStemsConfiguration;\n(function (ExportStemsConfiguration) {\n ExportStemsConfiguration.countStems = (config) => config.match({\n none: () => 1,\n some: (configuration) => Object.keys(configuration).length\n });\n ExportStemsConfiguration.sanitizeFileName = (name) => name.replace(/[<>:\"/\\\\|?*\\x00-\\x1F]/g, \"_\").trim();\n ExportStemsConfiguration.sanitizeExportNamesInPlace = (configuration) => {\n const sanitizedNames = new Map();\n const getUniqueName = (baseName) => {\n let count = sanitizedNames.get(baseName) ?? 0;\n let newName = baseName;\n while (sanitizedNames.has(newName)) {\n count++;\n newName = `${baseName} ${count}`;\n }\n sanitizedNames.set(baseName, count);\n sanitizedNames.set(newName, 1);\n return newName;\n };\n Object.keys(configuration).forEach((key) => {\n const entry = configuration[key];\n entry.fileName = getUniqueName(ExportStemsConfiguration.sanitizeFileName(entry.fileName));\n });\n };\n})(ExportStemsConfiguration || (ExportStemsConfiguration = {}));\n", "import { Schema } from \"@opendaw/lib-std\";\nexport const EngineStateSchema = Schema.createBuilder({\n position: Schema.float,\n clipIndex: Schema.int16\n});\n", "import { Bits, EmptyExec, Terminator } from \"@opendaw/lib-std\";\nexport class NoteBroadcaster {\n #terminator = new Terminator();\n #broadcaster;\n #address;\n #bits;\n constructor(broadcaster, address) {\n this.#broadcaster = broadcaster;\n this.#address = address;\n this.#bits = new Bits(128);\n this.#terminator.own(this.#broadcaster.broadcastIntegers(this.#address, new Int32Array(this.#bits.buffer), EmptyExec));\n }\n noteOn(note) { if (note >= 0 && note < 128) {\n this.#bits.setBit(note, true);\n } }\n noteOff(note) { if (note >= 0 && note < 128) {\n this.#bits.setBit(note, false);\n } }\n reset() { }\n clear() { this.#bits.clear(); }\n terminate() { this.#terminator.terminate(); }\n toString() { return `{${this.constructor.name}}`; }\n}\n", "export var NoteSustainer;\n(function (NoteSustainer) {\n NoteSustainer.start = (sender, note, velocity = 1.0) => {\n let playing = true;\n sender.noteOn(note, velocity);\n return {\n terminate: () => {\n if (playing) {\n sender.noteOff(note);\n playing = false;\n }\n }\n };\n };\n})(NoteSustainer || (NoteSustainer = {}));\n", "import { Address } from \"@opendaw/lib-box\";\nexport class ParameterFieldAdapters {\n #set;\n constructor() {\n this.#set = Address.newSet(adapter => adapter.field.address);\n }\n register(adapter) {\n this.#set.add(adapter);\n return { terminate: () => this.#set.removeByValue(adapter) };\n }\n get(address) { return this.#set.get(address); }\n opt(address) { return this.#set.opt(address); }\n}\n", "import { BoxIO } from \"@opendaw/studio-boxes\";\nimport { BoxGraph } from \"@opendaw/lib-box\";\nimport { assert, ByteArrayInput, Option, UUID } from \"@opendaw/lib-std\";\nexport var ProjectDecoder;\n(function (ProjectDecoder) {\n ProjectDecoder.MAGIC_HEADER_OPEN = 0x4F50454E;\n ProjectDecoder.FORMAT_VERSION = 2;\n ProjectDecoder.decode = (arrayBuffer) => {\n const input = new ByteArrayInput(arrayBuffer);\n assert(input.readInt() === ProjectDecoder.MAGIC_HEADER_OPEN, \"Corrupt header. Probably not an openDAW project file.\");\n assert(input.readInt() === ProjectDecoder.FORMAT_VERSION, \"Deprecated Format\");\n const boxGraphChunkLength = input.readInt();\n const boxGraphChunk = new Int8Array(boxGraphChunkLength);\n input.readBytes(boxGraphChunk);\n const boxGraph = new BoxGraph(Option.wrap(BoxIO.create));\n boxGraph.fromArrayBuffer(boxGraphChunk.buffer);\n return { boxGraph, mandatoryBoxes: readMandatoryBoxes(boxGraph, input) };\n };\n const readMandatoryBoxes = (boxGraph, input) => {\n const rootBox = boxGraph.findBox(UUID.fromDataInput(input)).unwrap(\"RootBox not found\");\n const userInterfaceBox = boxGraph.findBox(UUID.fromDataInput(input)).unwrap(\"UserInterfaceBox not found\");\n const masterBusBox = boxGraph.findBox(UUID.fromDataInput(input)).unwrap(\"AudioBusBox not found\");\n const masterAudioUnit = boxGraph.findBox(UUID.fromDataInput(input)).unwrap(\"AudioUnitBox not found\");\n const timelineBox = boxGraph.findBox(UUID.fromDataInput(input)).unwrap(\"TimelineBox not found\");\n return { rootBox, userInterfaceBox, masterBusBox, masterAudioUnit, timelineBox };\n };\n})(ProjectDecoder || (ProjectDecoder = {}));\n", "import { Arrays, assert, panic } from \"@opendaw/lib-std\";\nexport var RingBuffer;\n(function (RingBuffer) {\n RingBuffer.reader = ({ sab, numChunks, numChannels, bufferSize }, append) => {\n let running = true;\n const pointers = new Int32Array(sab, 0, 2);\n const audio = new Float32Array(sab, 8);\n const planarChunk = new Float32Array(numChannels * bufferSize);\n const canBlock = typeof document === \"undefined\"; // for usage in workers\n const step = () => {\n if (!running) {\n return;\n }\n let readPtr = Atomics.load(pointers, 1);\n let writePtr = Atomics.load(pointers, 0);\n if (readPtr === writePtr) {\n if (canBlock) {\n Atomics.wait(pointers, 0, writePtr);\n }\n else {\n setTimeout(step, 1); // non\u2011blocking poll fallback\n return;\n }\n writePtr = Atomics.load(pointers, 0);\n }\n while (readPtr !== writePtr) {\n const offset = readPtr * numChannels * bufferSize;\n planarChunk.set(audio.subarray(offset, offset + numChannels * bufferSize));\n const channels = [];\n for (let channel = 0; channel < numChannels; channel++) {\n const start = channel * bufferSize;\n const end = start + bufferSize;\n channels.push(planarChunk.slice(start, end));\n }\n readPtr = (readPtr + 1) % numChunks;\n Atomics.store(pointers, 1, readPtr);\n if (!running) {\n return;\n }\n append(channels);\n }\n step();\n };\n step();\n return { stop: () => running = false };\n };\n RingBuffer.writer = ({ sab, numChunks, numChannels, bufferSize }) => {\n const pointers = new Int32Array(sab, 0, 2);\n const audio = new Float32Array(sab, 8);\n return Object.freeze({\n write: (channels) => {\n if (channels.length !== numChannels) {\n // We ignore this. This can happen in the worklet setup phase.\n return;\n }\n for (const channel of channels) {\n if (channel.length !== bufferSize) {\n return panic(\"Each channel buffer must contain 'bufferSize' samples\");\n }\n }\n const writePtr = Atomics.load(pointers, 0);\n const offset = writePtr * numChannels * bufferSize;\n channels.forEach((channel, index) => audio.set(channel, offset + index * bufferSize));\n Atomics.store(pointers, 0, (writePtr + 1) % numChunks);\n Atomics.notify(pointers, 0);\n }\n });\n };\n})(RingBuffer || (RingBuffer = {}));\nexport const mergeChunkPlanes = (chunks, bufferSize, maxFrames = Number.MAX_SAFE_INTEGER) => {\n if (chunks.length === 0) {\n return Arrays.empty();\n }\n const numChannels = chunks[0].length;\n const numFrames = Math.min(bufferSize * chunks.length, maxFrames);\n return Arrays.create(channelIndex => {\n const outChannel = new Float32Array(numFrames);\n chunks.forEach((recordedChannels, chunkIndex) => {\n if (recordedChannels.length !== numChannels) {\n return panic();\n }\n const recordedChannel = recordedChannels[channelIndex];\n assert(recordedChannel.length === bufferSize, \"Invalid length\");\n const remaining = numFrames - chunkIndex * bufferSize;\n assert(remaining > 0, \"Invalid remaining\");\n outChannel.set(remaining < bufferSize\n ? recordedChannel.slice(0, remaining)\n : recordedChannel, chunkIndex * bufferSize);\n });\n return outChannel;\n }, numChannels);\n};\n", "export const UnionBoxTypes = {\n isClipBox: (box) => box.accept({\n visitNoteClipBox: (_box) => true,\n visitAudioClipBox: (_box) => true,\n visitValueClipBox: (_box) => true\n }) ?? false,\n isRegionBox: (box) => box.accept({\n visitNoteRegionBox: (_box) => true,\n visitAudioRegionBox: (_box) => true,\n visitValueRegionBox: (_box) => true\n }) ?? false,\n isLoopableRegionBox: (box) => box.accept({\n visitNoteRegionBox: (_box) => true,\n visitAudioRegionBox: (_box) => true,\n visitValueRegionBox: (_box) => true\n }) ?? false\n};\n", "import { UnionBoxTypes } from \"./unions\";\nexport const UnionAdapterTypes = {\n isRegion: (adapter) => UnionBoxTypes.isRegionBox(adapter.box),\n isLoopableRegion: (adapter) => UnionBoxTypes.isLoopableRegionBox(adapter.box)\n};\n", "export var Gate;\n(function (Gate) {\n Gate[Gate[\"Off\"] = 0] = \"Off\";\n Gate[Gate[\"On\"] = 1] = \"On\";\n Gate[Gate[\"Loop\"] = 2] = \"Loop\";\n})(Gate || (Gate = {}));\n", "import { mod, panic } from \"@opendaw/lib-std\";\nimport { UnionAdapterTypes } from \"../UnionAdapterTypes\";\nexport var RegionEditing;\n(function (RegionEditing) {\n RegionEditing.cut = (region, cut, consolidate) => {\n if (region.position >= cut || cut >= region.complete) {\n return;\n }\n if (UnionAdapterTypes.isLoopableRegion(region)) {\n const { position, complete, loopOffset, loopDuration } = region;\n region.box.duration.setValue(cut - position);\n region.copyTo({\n position: cut,\n duration: complete - cut,\n loopOffset: mod(loopOffset + (cut - position), loopDuration),\n consolidate\n });\n }\n else {\n return panic(\"Not yet implemented\");\n }\n };\n RegionEditing.clip = (region, begin, end) => {\n if (UnionAdapterTypes.isLoopableRegion(region)) {\n const { position, complete, loopOffset, loopDuration } = region;\n if (complete - end <= 0) {\n return panic(`duration will zero or negative(${complete - end})`);\n }\n region.box.duration.setValue(begin - position);\n region.copyTo({\n position: end,\n duration: complete - end,\n loopOffset: mod(loopOffset + (end - position), loopDuration)\n });\n }\n else {\n return panic(\"Not yet implemented\");\n }\n };\n})(RegionEditing || (RegionEditing = {}));\n", "import {int, Terminable} from \"@opendaw/lib-std\"\nimport {NoteEvent, ppqn} from \"@opendaw/lib-dsp\"\nimport {EventBuffer} from \"./EventBuffer\"\nimport {AudioBuffer} from \"./AudioBuffer\"\nimport {UpdateEvent} from \"./UpdateClock\"\n\nexport const enum BlockFlag {\n transporting = 1 << 0, // is true if the (main) timeline should not advance\n discontinuous = 1 << 1, // set, if the time has not been advanced naturally (release notes)\n playing = 1 << 2, // set, if arrangement should generate sound\n tempoChanged = 1 << 3 // true if the tempo has been changed\n}\n\nexport namespace BlockFlags {\n export const create = (transporting: boolean, discontinuous: boolean, playing: boolean, tempoChanged: boolean): int => 0\n | (transporting ? BlockFlag.transporting : 0)\n | (discontinuous ? BlockFlag.discontinuous : 0)\n | (playing ? BlockFlag.playing : 0)\n | (tempoChanged ? BlockFlag.tempoChanged : 0)\n}\n\nexport type Block = Readonly<{\n index: int,\n // range in ppqn time\n p0: ppqn\n p1: ppqn\n // range in audio block\n s0: int\n s1: int\n // tempo in this block\n bpm: number\n // BlockFlag\n flags: int\n}>\n\nexport enum ProcessPhase {Before, After}\n\nexport type AnyEvent = UpdateEvent | NoteEvent\n\nexport interface ProcessInfo {\n blocks: ReadonlyArray<Block>\n}\n\nexport interface Processor extends EventReceiver {\n reset(): void\n process(processInfo: ProcessInfo): void\n}\n\nexport interface EventReceiver {\n get eventInput(): EventBuffer\n}\n\nexport interface AudioGenerator {\n get audioOutput(): AudioBuffer\n}\n\nexport interface EventGenerator {\n setEventTarget(target: EventBuffer): Terminable\n}\n\nexport interface AudioInput {\n setAudioSource(source: AudioBuffer): Terminable\n}", "import {Arrays, assert, int} from \"@opendaw/lib-std\"\nimport {RenderQuantum} from \"./constants\"\n\nexport class AudioBuffer {\n static Empty = new AudioBuffer(2)\n\n readonly #channels: ReadonlyArray<Float32Array>\n\n constructor(numberOfChannels: int = 2) {\n this.#channels = Arrays.create(() => new Float32Array(RenderQuantum), numberOfChannels)\n }\n\n clear(start?: int, end?: int): void {this.#channels.forEach(channel => channel.fill(0.0, start, end))}\n numChannels(): int {return this.#channels.length}\n getChannel(channelIndex: int): Float32Array {\n return channelIndex < this.numChannels() ? this.#channels[channelIndex] : this.#channels[this.numChannels() - 1]\n }\n assertSanity(): void {\n assert(!this.#channels.some(channel => channel.some(number => isNaN(number))), \"AudioBuffer is invalid (NaN)\")\n }\n channels(): ReadonlyArray<Float32Array> {return this.#channels}\n replace(output: AudioBuffer): void {this.replaceInto(output.#channels)}\n replaceInto(target: ReadonlyArray<Float32Array>): void {\n // https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Basic_concepts_behind_Web_Audio_API#up-mixing_and_down-mixing\n assert(target.length === 2, \"mixLayout: target.length must be 2\")\n assert(this.#channels.length === 1 || this.#channels.length === 2, \"mixLayout: target.length must be 1 or 2\")\n if (this.#channels.length === 1) {\n target[0].set(this.#channels[0])\n target[1].set(this.#channels[0])\n } else {\n target[0].set(this.#channels[0])\n target[1].set(this.#channels[1])\n }\n }\n mixInto(target: ReadonlyArray<Float32Array>): void {\n assert(target.length === 2, \"mixLayout: target.length must be 2\")\n assert(this.#channels.length === 1 || this.#channels.length === 2, \"mixLayout: target.length must be 1 or 2\")\n const [outL, outR] = target\n if (this.#channels.length === 1) {\n const [inp] = this.#channels\n for (let i = 0; i < RenderQuantum; i++) {\n outL[i] += inp[i]\n outR[i] += inp[i]\n }\n } else {\n const [inpL, inpR] = this.#channels\n for (let i = 0; i < RenderQuantum; i++) {\n outL[i] += inpL[i]\n outR[i] += inpR[i]\n }\n }\n }\n}", "import {Arrays, int, Terminable} from \"@opendaw/lib-std\"\nimport {Address} from \"@opendaw/lib-box\"\nimport {RMS, StereoMatrix} from \"@opendaw/lib-dsp\"\nimport {LiveStreamBroadcaster} from \"@opendaw/lib-fusion\"\nimport {RenderQuantum} from \"./constants\"\n\nexport class PeakBroadcaster implements Terminable {\n static readonly PEAK_DECAY = Math.exp(-1.0 / (sampleRate * 0.250))\n static readonly RMS_WINDOW = Math.floor(sampleRate * 0.100)\n\n readonly #broadcaster: LiveStreamBroadcaster\n readonly #address: Address\n\n readonly #values: Float32Array\n readonly #rms: ReadonlyArray<RMS>\n readonly #terminable: Terminable\n\n #peakL: number = 0.0\n #peakR: number = 0.0\n #rmsL: number = 0.0\n #rmsR: number = 0.0\n\n constructor(broadcaster: LiveStreamBroadcaster, address: Address) {\n this.#broadcaster = broadcaster\n this.#address = address\n\n this.#values = new Float32Array(4)\n this.#rms = Arrays.create(() => new RMS(PeakBroadcaster.RMS_WINDOW), 2)\n this.#terminable = this.#broadcaster.broadcastFloats(this.#address, this.#values, () => {\n this.#values[0] = this.#peakL\n this.#values[1] = this.#peakR\n this.#values[2] = this.#rmsL\n this.#values[3] = this.#rmsR\n })\n }\n\n clear(): void {\n this.#rms[0].clear()\n this.#rms[1].clear()\n this.#peakL = 0.0\n this.#peakR = 0.0\n }\n\n process(outL: Float32Array, outR: Float32Array, fromIndex: int = 0, toIndex: int = RenderQuantum): void {\n const [rmsL, rmsR] = this.#rms\n for (let i = fromIndex; i < toIndex; i++) {\n const l = outL[i]\n const r = outR[i]\n if (this.#peakL < l) {this.#peakL = l} else {this.#peakL *= PeakBroadcaster.PEAK_DECAY}\n if (this.#peakR < r) {this.#peakR = r} else {this.#peakR *= PeakBroadcaster.PEAK_DECAY}\n this.#rmsL = rmsL.pushPop(l)\n this.#rmsR = rmsR.pushPop(r)\n }\n }\n\n processStereo([l, r]: StereoMatrix.Channels, fromIndex: int = 0, toIndex: int = RenderQuantum): void {\n this.process(l, r, fromIndex, toIndex)\n }\n\n terminate(): void {this.#terminable.terminate()}\n}", "import {PrimitiveValues} from \"@opendaw/lib-box\"\nimport {AutomatableParameterFieldAdapter} from \"@opendaw/studio-adapters\"\nimport {assert, Notifier, Observer, Option, Subscription, Terminable, TerminableOwner, Terminator, unitValue} from \"@opendaw/lib-std\"\nimport {ppqn} from \"@opendaw/lib-dsp\"\nimport {EngineContext} from \"./EngineContext\"\n\nexport class AutomatableParameter<T extends PrimitiveValues = any> implements TerminableOwner, Terminable {\n readonly #terminator = new Terminator()\n\n readonly #context: EngineContext\n readonly #adapter: AutomatableParameterFieldAdapter<T>\n readonly #notifier: Notifier<this>\n\n #broadcasting: Option<Subscription> = Option.None\n\n #value: T\n\n constructor(context: EngineContext, adapter: AutomatableParameterFieldAdapter<T>) {\n this.#context = context\n this.#adapter = adapter\n this.#notifier = new Notifier<this>()\n this.#value = this.#adapter.getValue()\n this.#terminator.own(this.#adapter.subscribe(owner => {\n this.#value = owner.getValue()\n this.#notifier.notify(this)\n }))\n }\n\n subscribe(observer: Observer<this>): Subscription {return this.#notifier.subscribe(observer)}\n getValue(): T {return this.#value}\n getUnitValue(): unitValue {return this.#adapter.valueMapping.x(this.#value)}\n\n onStartAutomation(): void {\n assert(this.#broadcasting.isEmpty(), \"Already broadcasting\")\n this.#broadcasting = Option.wrap(this.#context.broadcaster\n .broadcastFloat(this.#adapter.address, () => this.getUnitValue()))\n }\n\n updateAutomation(position: ppqn): boolean {\n const value = this.#adapter.valueAt(position)\n if (this.#value !== value) {\n this.#value = value\n return true\n }\n return false\n }\n\n onStopAutomation(): void {\n assert(this.#broadcasting.nonEmpty(), \"Never started broadcasting\")\n this.#broadcasting.unwrap().terminate()\n this.#broadcasting = Option.None\n this.#value = this.#adapter.getValue()\n }\n\n own<T extends Terminable>(terminable: T): T {return this.#terminator.own<T>(terminable)}\n ownAll<T extends Terminable>(...terminables: T[]): void {this.#terminator.ownAll<T>(...terminables)}\n spawn(): Terminator {return this.#terminator.spawn()}\n terminate(): void {this.#terminator.terminate()}\n}", "import {Event} from \"@opendaw/lib-dsp\"\nimport {ArrayMultimap, Arrays, int} from \"@opendaw/lib-std\"\n\nexport class EventBuffer {\n readonly #events: ArrayMultimap<int, Event>\n\n constructor() {this.#events = new ArrayMultimap(Arrays.empty(), Event.Comparator)}\n\n add(index: int, event: Event): void {this.#events.add(index, event)}\n get(index: int): ReadonlyArray<Event> {return this.#events.get(index)}\n forEach(procedure: (index: int, values: ReadonlyArray<Event>) => void): void {return this.#events.forEach(procedure)}\n clear(): void {this.#events.clear()}\n}", "import {Arrays, Option, panic, Terminable, TerminableOwner, Terminator} from \"@opendaw/lib-std\"\nimport {PointerField, PrimitiveValues} from \"@opendaw/lib-box\"\nimport {Pointers} from \"@opendaw/studio-enums\"\nimport {AutomatableParameterFieldAdapter} from \"@opendaw/studio-adapters\"\nimport {AutomatableParameter} from \"./AutomatableParameter\"\nimport {ProcessInfo, Processor} from \"./processing\"\nimport {EngineContext} from \"./EngineContext\"\nimport {EventBuffer} from \"./EventBuffer\"\n\nexport abstract class AbstractProcessor implements Processor, TerminableOwner, Terminable {\n readonly #terminator = new Terminator()\n readonly #context: EngineContext\n readonly #eventInput: EventBuffer\n readonly #parameters: Array<AutomatableParameter>\n readonly #automatedParameters: Array<AutomatableParameter>\n\n #updateClockConnection: Option<Terminable> = Option.None\n\n constructor(context: EngineContext) {\n this.#context = context\n this.#eventInput = new EventBuffer()\n this.#parameters = []\n this.#automatedParameters = []\n }\n\n abstract reset(): void\n abstract process(processInfo: ProcessInfo): void\n\n parameterChanged(parameter: AutomatableParameter): void {\n return panic(`Got update event for ${parameter}, but has no parameter change method`)\n }\n\n get context(): EngineContext {return this.#context}\n get eventInput(): EventBuffer {return this.#eventInput}\n\n bindParameter<T extends PrimitiveValues>(adapter: AutomatableParameterFieldAdapter<T>): AutomatableParameter<T> {\n const parameter = new AutomatableParameter<T>(this.#context, adapter)\n parameter.ownAll(\n adapter.field.pointerHub.catchupAndSubscribeTransactual({\n onAdd: (_pointer: PointerField) => {\n if (this.#updateClockConnection.isEmpty()) {\n this.#updateClockConnection = Option.wrap(this.#context.updateClock.addEventOutput(this.#eventInput))\n }\n this.#automatedParameters.push(parameter)\n parameter.onStartAutomation()\n },\n onRemove: (_pointer: PointerField) => {\n Arrays.remove(this.#automatedParameters, parameter)\n if (this.#automatedParameters.length === 0) {\n this.#updateClockConnection.ifSome(connection => connection.terminate())\n this.#updateClockConnection = Option.None\n }\n parameter.onStopAutomation()\n }\n }, Pointers.Automation),\n parameter.subscribe(() => this.parameterChanged(parameter))\n )\n this.#parameters.push(parameter)\n return parameter\n }\n\n updateParameter(position: number): void {\n this.#automatedParameters.forEach((parameter: AutomatableParameter) => {\n if (parameter.updateAutomation(position)) {\n this.parameterChanged(parameter)\n }\n })\n }\n\n readAllParameters(): void {this.#parameters.forEach(parameter => this.parameterChanged(parameter))}\n\n own<T extends Terminable>(terminable: T): T {return this.#terminator.own(terminable)}\n ownAll<T extends Terminable>(...terminables: T[]): void {return this.#terminator.ownAll(...terminables)}\n spawn(): Terminator {return this.#terminator.spawn()}\n\n terminate(): void {\n this.#updateClockConnection.ifSome(connection => connection.terminate())\n this.#updateClockConnection = Option.None\n this.#parameters.length = 0\n this.#terminator.terminate()\n }\n\n toString(): string {return `{${this.constructor.name}}`}\n}", "import {BlockFlag, ProcessInfo} from \"./processing\"\nimport {Event} from \"@opendaw/lib-dsp\"\nimport {EngineContext} from \"./EngineContext\"\nimport {Arrays, Bits, int, Terminable} from \"@opendaw/lib-std\"\nimport {AbstractProcessor} from \"./AbstractProcessor\"\nimport {EventBuffer} from \"./EventBuffer\"\nimport {Fragmentor} from \"@opendaw/lib-dsp\"\nimport {UpdateClockRate} from \"@opendaw/studio-adapters\"\n\nexport interface UpdateEvent extends Event {type: \"update-event\"}\n\nexport namespace UpdateEvent {\n export const isOfType = (event: Event): event is UpdateEvent => event.type === \"update-event\"\n}\n\nexport class UpdateClock extends AbstractProcessor {\n readonly #outputs: Array<EventBuffer> = []\n\n constructor(context: EngineContext) {\n super(context)\n\n this.own(this.context.registerProcessor(this))\n }\n\n reset(): void {this.eventInput.clear()}\n\n addEventOutput(output: EventBuffer): Terminable {\n this.#outputs.push(output)\n return {terminate: () => Arrays.remove(this.#outputs, output)}\n }\n\n process({blocks}: ProcessInfo): void {\n blocks.forEach(({p0, p1, flags}, index: int) => {\n if (!Bits.every(flags, BlockFlag.transporting)) {return}\n for (const position of Fragmentor.iterate(p0, p1, UpdateClockRate)) {\n const event: UpdateEvent = {type: \"update-event\", position}\n this.#outputs.forEach(output => output.add(index, event))\n }\n })\n }\n\n toString(): string {return `{${this.constructor.name}}`}\n}", "import {Event, PPQN} from \"@opendaw/lib-dsp\"\nimport {assert, int, Nullish, panic} from \"@opendaw/lib-std\"\nimport {Block, ProcessInfo} from \"./processing\"\nimport {AbstractProcessor} from \"./AbstractProcessor\"\nimport {UpdateEvent} from \"./UpdateClock\"\nimport {EngineContext} from \"./EngineContext\"\n\nexport abstract class AudioProcessor extends AbstractProcessor {\n protected constructor(context: EngineContext) {\n super(context)\n }\n\n process({blocks}: ProcessInfo): void {\n blocks.forEach((block) => {\n this.introduceBlock(block)\n const {index, p0, s0, s1, bpm} = block\n let anyEvents: Nullish<Array<Event>> = null\n let fromIndex = s0\n for (const event of this.eventInput.get(index)) {\n const pulses = event.position - p0\n const toIndex = Math.abs(pulses) < 1.0e-7 ? s0 : s0 + Math.floor(PPQN.pulsesToSamples(pulses, bpm, sampleRate))\n assert(s0 <= toIndex && toIndex <= s1, () => `${toIndex} out of bounds. event: ${event.position} (${event.type}), p0: ${p0}`)\n anyEvents?.forEach(event => this.handleEvent(event))\n anyEvents = null\n if (fromIndex < toIndex) {\n this.processAudio(block, fromIndex, toIndex)\n fromIndex = toIndex\n }\n if (UpdateEvent.isOfType(event)) {\n this.updateParameter(event.position)\n } else {\n (anyEvents ??= []).push(event)\n }\n }\n anyEvents?.forEach(event => this.handleEvent(event))\n anyEvents = null\n if (fromIndex < s1) {\n this.processAudio(block, fromIndex, s1)\n }\n })\n this.eventInput.clear()\n this.finishProcess()\n }\n\n abstract processAudio(block: Block, fromIndex: int, toIndex: int): void\n\n introduceBlock(_block: Block): void {}\n\n handleEvent(_event: Event): void {return panic(`${this} received an event but has no accepting method.`)}\n\n finishProcess(): void {}\n}", "import {assert, int, nextPowOf2, unitValue, ValueMapping} from \"@opendaw/lib-std\"\nimport {BiquadCoeff, BiquadMono, BiquadProcessor, StereoMatrix} from \"@opendaw/lib-dsp\"\n\nexport class DelayDeviceDsp {\n static readonly #FilterMapping: ValueMapping<number> = ValueMapping.exponential(20.0 / sampleRate, 20000.0 / sampleRate)\n\n readonly #delaySize: int\n readonly #delayBuffer: StereoMatrix.Channels\n readonly #biquad: [BiquadProcessor, BiquadProcessor]\n readonly #biquadCoeff: BiquadCoeff\n readonly #interpolationLength: int\n\n feedback: unitValue = 0.7\n cross: unitValue = 0.0\n wet: number = 0.75\n dry: number = 0.75\n\n #deltaOffset = 0.0\n #writePosition: int = 0 | 0\n #currentOffset: int = 0 | 0\n #targetOffset = 0.0\n #alphaPosition = 0 | 0\n #processed = false\n #interpolating = false\n\n constructor(maxFrames: int, interpolationLength: int) {\n const pow2Size = nextPowOf2(maxFrames)\n\n this.#delaySize = pow2Size\n this.#delayBuffer = [new Float32Array(pow2Size), new Float32Array(pow2Size)]\n this.#biquad = [new BiquadMono(), new BiquadMono()]\n this.#biquadCoeff = new BiquadCoeff()\n this.#interpolationLength = interpolationLength\n }\n\n reset(): void {\n this.#writePosition = 0\n if (this.#processed) {\n this.#biquad.forEach(biquad => biquad.reset())\n this.#delayBuffer.forEach(delay => delay.fill(0.0))\n this.#processed = false\n this.#interpolating = false\n }\n this.#initDelayTime()\n }\n\n set offset(value: number) {\n assert(0 <= value && value < this.#delaySize, \"Out of bounds\")\n if (this.#targetOffset === value) {return}\n this.#targetOffset = value\n if (this.#processed) {\n this.#updateDelayTime()\n } else {\n this.#initDelayTime()\n }\n }\n get offset(): number {return this.#targetOffset}\n\n set filter(value: number) {\n if (value === 0.0) {\n this.#biquadCoeff.identity()\n } else if (value > 0.0) {\n this.#biquadCoeff.setHighpassParams(DelayDeviceDsp.#FilterMapping.y(value), 0.001)\n } else if (value < 0.0) {\n this.#biquadCoeff.setLowpassParams(DelayDeviceDsp.#FilterMapping.y(1.0 + value), 0.001)\n }\n }\n\n process(input: StereoMatrix.Channels, output: StereoMatrix.Channels, fromIndex: int, toIndex: int): void {\n if (this.#interpolating) {\n this.#processInterpolate(input, output, fromIndex, toIndex)\n } else {\n this.#processSteady(input, output, fromIndex, toIndex)\n }\n this.#processed = true\n }\n\n #processSteady(input: StereoMatrix.Channels, output: StereoMatrix.Channels, fromIndex: int, toIndex: int): void {\n const delayMask = this.#delaySize - 1\n const delayBuffer = this.#delayBuffer\n const feedback = this.feedback\n const pWetLevel = this.wet\n const pDryLevel = this.dry\n let writePosition = this.#writePosition\n let readPosition: int = writePosition - Math.floor(this.#currentOffset)\n if (readPosition < 0) {readPosition += this.#delaySize}\n const iL = input[0]\n const iR = input[1]\n const oL = output[0]\n const oR = output[1]\n const bL = this.#biquad[0]\n const bR = this.#biquad[1]\n const dL = delayBuffer[0]\n const dR = delayBuffer[1]\n for (let i: int = fromIndex; i < toIndex; ++i) {\n const inpL = iL[i]\n const inpR = iR[i]\n // magic number prevents filter from getting unstable (beginner's fix)\n const dReadL = bL.processFrame(this.#biquadCoeff, dL[readPosition] * 0.96)\n const dReadR = bR.processFrame(this.#biquadCoeff, dR[readPosition] * 0.96)\n // const crossL = this.cross * dReadR + (1.0 - this.cross) * dReadL\n // const crossR = this.cross * dReadL + (1.0 - this.cross) * dReadR\n // simplified to:\n const diff = this.cross * (dReadR - dReadL)\n const crossL = dReadL + diff\n const crossR = dReadR - diff\n dL[writePosition] = (inpL + crossL) * feedback + 1.0e-18 - 1.0e-18\n dR[writePosition] = (inpR + crossR) * feedback + 1.0e-18 - 1.0e-18\n oL[i] = crossL * pWetLevel + inpL * pDryLevel\n oR[i] = crossR * pWetLevel + inpR * pDryLevel\n readPosition = ++readPosition & delayMask\n writePosition = ++writePosition & delayMask\n }\n this.#writePosition = writePosition\n }\n\n #processInterpolate(input: StereoMatrix.Channels, output: StereoMatrix.Channels, fromIndex: int, toIndex: int): void {\n const delayMask = this.#delaySize - 1\n const delayBuffer = this.#delayBuffer\n const feedback = this.feedback\n const pWetLevel = this.wet\n const pDryLevel = this.dry\n let writePosition = this.#writePosition\n for (let i: int = fromIndex; i < toIndex; ++i) {\n if (0 < this.#alphaPosition) {\n this.#currentOffset += this.#deltaOffset\n this.#alphaPosition--\n } else {\n this.#currentOffset = this.#targetOffset\n this.#interpolating = false\n }\n let readPosition: int = writePosition - this.#currentOffset\n if (readPosition < 0) {\n readPosition += this.#delaySize\n }\n const readPositionInt = readPosition | 0\n const alpha = readPosition - readPositionInt\n const inpL = input[0][i]\n const inpR = input[1][i]\n const d00 = delayBuffer[0][readPositionInt]\n const d10 = delayBuffer[0][readPositionInt]\n const d0 = this.#biquad[0].processFrame(this.#biquadCoeff, d00 + alpha * (delayBuffer[0][(readPositionInt + 1) & delayMask] - d00))\n const d1 = this.#biquad[1].processFrame(this.#biquadCoeff, d10 + alpha * (delayBuffer[1][(readPositionInt + 1) & delayMask] - d10))\n delayBuffer[0][writePosition] = inpL + d0 * feedback + 1.0e-18 - 1.0e-18\n delayBuffer[1][writePosition] = inpR + d0 * feedback + 1.0e-18 - 1.0e-18\n output[0][i] = d0 * pWetLevel + inpL * pDryLevel\n output[1][i] = d1 * pWetLevel + inpR * pDryLevel\n writePosition = ++writePosition & delayMask\n }\n this.#writePosition = writePosition\n }\n\n #initDelayTime(): void {\n this.#currentOffset = this.#targetOffset\n this.#alphaPosition = 0\n this.#interpolating = false\n }\n\n #updateDelayTime(): void {\n if (this.#targetOffset !== this.#currentOffset) {\n this.#alphaPosition = this.#interpolationLength\n this.#deltaOffset = (this.#targetOffset - this.#currentOffset) / this.#alphaPosition\n this.#interpolating = true\n }\n }\n}", "import {AudioEffectDeviceBoxAdapter, DelayDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {Bits, int, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {dbToGain, Event, Fraction, PPQN, StereoMatrix} from \"@opendaw/lib-dsp\"\nimport {AudioEffectDeviceProcessor} from \"../../processors\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {Block, BlockFlag, Processor} from \"../../processing\"\nimport {AudioBuffer} from \"../../AudioBuffer\"\nimport {PeakBroadcaster} from \"../../PeakBroadcaster\"\nimport {AudioProcessor} from \"../../AudioProcessor\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {DelayDeviceDsp} from \"./DelayDeviceDsp\"\n\nexport class DelayDeviceProcessor extends AudioProcessor implements AudioEffectDeviceProcessor {\n static ID: int = 0 | 0\n\n readonly #id: int = DelayDeviceProcessor.ID++\n\n readonly #adapter: DelayDeviceBoxAdapter\n\n readonly parameterDelay: AutomatableParameter<number>\n readonly parameterFeedback: AutomatableParameter<number>\n readonly parameterCross: AutomatableParameter<number>\n readonly parameterFilter: AutomatableParameter<number>\n readonly parameterDry: AutomatableParameter<number>\n readonly parameterWet: AutomatableParameter<number>\n\n readonly #output: AudioBuffer\n readonly #peaks: PeakBroadcaster\n readonly #delayLines: DelayDeviceDsp\n\n #source: Option<AudioBuffer> = Option.None\n\n #updateDelayTime: boolean = true\n\n constructor(context: EngineContext, adapter: DelayDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n this.#output = new AudioBuffer()\n this.#peaks = this.own(new PeakBroadcaster(context.broadcaster, adapter.address))\n\n const {delay, feedback, cross, filter, dry, wet} = adapter.namedParameter\n this.parameterDelay = this.own(this.bindParameter(delay))\n this.parameterFeedback = this.own(this.bindParameter(feedback))\n this.parameterCross = this.own(this.bindParameter(cross))\n this.parameterFilter = this.own(this.bindParameter(filter))\n this.parameterDry = this.own(this.bindParameter(dry))\n this.parameterWet = this.own(this.bindParameter(wet))\n\n const maxFrames = PPQN.pulsesToSamples(Fraction.toPPQN(DelayDeviceBoxAdapter.OffsetFractions[0]), 30.0, sampleRate)\n const interpolationDuration = Math.floor(0.5 * sampleRate)\n this.#delayLines = new DelayDeviceDsp(maxFrames, interpolationDuration)\n\n this.own(context.registerProcessor(this))\n this.readAllParameters()\n }\n\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n\n reset(): void {\n this.#output.clear()\n this.#delayLines.reset()\n this.#peaks.clear()\n this.eventInput.clear()\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n get audioOutput(): AudioBuffer {return this.#output}\n\n setAudioSource(source: AudioBuffer): Terminable {\n this.#source = Option.wrap(source)\n return {terminate: () => this.#source = Option.None}\n }\n\n index(): int {return this.#adapter.indexField.getValue()}\n adapter(): AudioEffectDeviceBoxAdapter {return this.#adapter}\n\n handleEvent(_event: Event): void {}\n\n processAudio({bpm, flags}: Block, from: number, to: number): void {\n if (this.#source.isEmpty()) {return}\n if (this.#updateDelayTime || Bits.some(flags, BlockFlag.tempoChanged)) {\n const offsetIndex = this.parameterDelay.getValue()\n const offsetInPulses = Fraction.toPPQN(DelayDeviceBoxAdapter.OffsetFractions[offsetIndex])\n this.#delayLines.offset = PPQN.pulsesToSamples(offsetInPulses, bpm, sampleRate)\n this.#updateDelayTime = false\n }\n const source = this.#source.unwrap()\n this.#delayLines.process(\n source.channels() as StereoMatrix.Channels,\n this.#output.channels() as StereoMatrix.Channels,\n from, to)\n this.#peaks.process(this.#output.getChannel(0), this.#output.getChannel(1), from, to)\n }\n\n parameterChanged(parameter: AutomatableParameter): void {\n if (parameter === this.parameterDelay) {\n this.#updateDelayTime = true\n } else if (parameter === this.parameterFeedback) {\n this.#delayLines.feedback = this.parameterFeedback.getValue()\n } else if (parameter === this.parameterCross) {\n this.#delayLines.cross = this.parameterCross.getValue()\n } else if (parameter === this.parameterFilter) {\n this.#delayLines.filter = this.parameterFilter.getValue()\n } else if (parameter === this.parameterDry) {\n this.#delayLines.dry = dbToGain(this.parameterDry.getValue())\n } else if (parameter === this.parameterWet) {\n this.#delayLines.wet = dbToGain(this.parameterWet.getValue())\n }\n }\n\n toString(): string {return `{${this.constructor.name} (${this.#id})}`}\n}", "import {int, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {AudioEffectDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioEffectDeviceProcessor} from \"../../processors\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {ProcessInfo, Processor} from \"../../processing\"\nimport {RenderQuantum} from \"../../constants\"\nimport {AbstractProcessor} from \"../../AbstractProcessor\"\nimport {AudioBuffer} from \"../../AudioBuffer\"\nimport {PeakBroadcaster} from \"../../PeakBroadcaster\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\n\nexport class NopDeviceProcessor extends AbstractProcessor implements AudioEffectDeviceProcessor {\n static ID: int = 0 | 0\n\n readonly #id: int = NopDeviceProcessor.ID++\n\n readonly #adapter: AudioEffectDeviceBoxAdapter\n readonly #output: AudioBuffer\n readonly #peaks: PeakBroadcaster\n\n #source: Option<AudioBuffer> = Option.None\n\n constructor(context: EngineContext, adapter: AudioEffectDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n this.#output = new AudioBuffer()\n this.#peaks = this.own(new PeakBroadcaster(context.broadcaster, adapter.address))\n\n this.own(context.registerProcessor(this))\n }\n\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n\n reset(): void {\n this.#peaks.clear()\n this.#output.clear()\n this.eventInput.clear()\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n\n get audioOutput(): AudioBuffer {return this.#output}\n\n setAudioSource(source: AudioBuffer): Terminable {\n this.#source = Option.wrap(source)\n return {terminate: () => this.#source = Option.None}\n }\n\n index(): int {return this.#adapter.indexField.getValue()}\n adapter(): AudioEffectDeviceBoxAdapter {return this.#adapter}\n\n process(_processInfo: ProcessInfo): void {\n if (this.#source.isEmpty()) {return}\n const input = this.#source.unwrap()\n const [inpL, inpR] = input.channels()\n const [outL, outR] = this.#output.channels()\n for (let i = 0; i < RenderQuantum; i++) {\n outL[i] = inpL[i]\n outR[i] = inpR[i]\n }\n this.#peaks.process(outL, outR)\n }\n\n parameterChanged(_parameter: AutomatableParameter): void {}\n\n toString(): string {return `{${this.constructor.name} (${this.#id})`}\n}", "import {Arrays, int, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {AbstractProcessor} from \"./AbstractProcessor\"\nimport {DeviceProcessor, InstrumentDeviceProcessor} from \"./processors\"\nimport {AudioBusBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioBuffer} from \"./AudioBuffer\"\nimport {PeakBroadcaster} from \"./PeakBroadcaster\"\nimport {EngineContext} from \"./EngineContext\"\nimport {NoteEventTarget} from \"./NoteEventSource\"\nimport {ProcessInfo, Processor} from \"./processing\"\nimport {RenderQuantum} from \"./constants\"\nimport {AutomatableParameter} from \"./AutomatableParameter\"\n\nexport class AudioBusProcessor extends AbstractProcessor implements InstrumentDeviceProcessor, Terminable {\n static ID: int = 0 | 0\n\n readonly #id: int = AudioBusProcessor.ID++\n\n readonly #adapter: AudioBusBoxAdapter\n\n readonly #audioOutput: AudioBuffer\n readonly #peaks: PeakBroadcaster\n readonly #sources: Array<AudioBuffer>\n\n constructor(context: EngineContext, adapter: AudioBusBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n\n this.#audioOutput = new AudioBuffer()\n this.#peaks = this.own(new PeakBroadcaster(context.broadcaster, adapter.address))\n this.#sources = []\n\n this.own(context.registerProcessor(this))\n }\n\n get noteEventTarget(): Option<NoteEventTarget & DeviceProcessor> {return Option.None}\n\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n get uuid(): UUID.Format {return this.#adapter.uuid}\n\n reset(): void {\n this.#peaks.clear()\n this.#audioOutput.clear()\n }\n\n addAudioSource(output: AudioBuffer): Terminable {\n this.#sources.push(output)\n return {\n terminate: () => {\n Arrays.remove(this.#sources, output)\n this.#audioOutput.clear()\n }\n }\n }\n\n get adapter(): AudioBusBoxAdapter {return this.#adapter}\n get audioOutput(): AudioBuffer {return this.#audioOutput}\n\n process(_processInfo: ProcessInfo): void {\n this.#audioOutput.clear()\n const [outL, outR] = this.#audioOutput.channels()\n for (const source of this.#sources) {\n const [srcL, srcR] = source.channels()\n for (let i = 0; i < RenderQuantum; i++) {\n outL[i] += srcL[i]\n outR[i] += srcR[i]\n }\n }\n this.#audioOutput.assertSanity()\n this.#peaks.process(this.#audioOutput.getChannel(0), this.#audioOutput.getChannel(1))\n }\n\n parameterChanged(_parameter: AutomatableParameter): void {}\n\n toString(): string {\n return `{${this.constructor.name} (${this.#id})}`\n }\n}", "import {Event, NoteEvent, ppqn} from \"@opendaw/lib-dsp\"\nimport {byte, float, Id, int, Terminable} from \"@opendaw/lib-std\"\n\nexport type NoteCompleteEvent = Id<Event & {\n readonly type: \"note-complete-event\"\n readonly pitch: byte\n}>\n\nexport type NoteLifecycleEvent = Id<NoteEvent> | NoteCompleteEvent\n\nexport namespace NoteLifecycleEvent {\n export const start = (position: ppqn, duration: ppqn, pitch: byte, velocity: float, cent: number = 0.0): Id<NoteEvent> =>\n ({type: \"note-event\", position, duration, pitch, velocity, cent, id: ++$id})\n export const startWith = (source: NoteEvent, position?: ppqn, duration?: ppqn): Id<NoteEvent> => ({\n type: \"note-event\",\n position: position ?? source.position,\n duration: duration ?? source.duration,\n pitch: source.pitch,\n cent: source.cent,\n velocity: source.velocity,\n id: ++$id\n })\n export const stop = ({id, pitch}: Id<NoteEvent>, position: ppqn): NoteCompleteEvent =>\n ({type: \"note-complete-event\", position, pitch, id})\n export const isStart = (event: Event): event is Id<NoteEvent> =>\n event.type === \"note-event\" && \"id\" in event && typeof event.id === \"number\"\n export const isStop = (event: Event): event is NoteCompleteEvent =>\n event.type === \"note-complete-event\"\n let $id: int = 0 | 0\n}\n\nexport interface NoteEventSource {\n // find all notes that start in given interval and returns them moved into global time space\n processNotes(from: ppqn, to: ppqn, flags: int /*BlockFlag*/): Generator<NoteLifecycleEvent>\n\n // find all active local notes at given position\n iterateActiveNotesAt(position: ppqn, onlyExternal: boolean): Generator<NoteEvent>\n}\n\nexport interface NoteEventTarget {\n setNoteEventSource(source: NoteEventSource): Terminable\n}", "import {Block, Processor} from \"./processing\"\nimport {Event} from \"@opendaw/lib-dsp\"\nimport {NoteEventSource, NoteLifecycleEvent} from \"./NoteEventSource\"\nimport {assert, Option, Terminable, Terminator} from \"@opendaw/lib-std\"\nimport {NoteBroadcaster} from \"@opendaw/studio-adapters\"\nimport {Address} from \"@opendaw/lib-box\"\nimport {LiveStreamBroadcaster} from \"@opendaw/lib-fusion\"\n\nexport class NoteEventInstrument implements Terminable {\n readonly #terminator = new Terminator()\n readonly #receiver: Processor\n readonly #broadcaster: NoteBroadcaster\n\n #source: Option<NoteEventSource> = Option.None\n\n constructor(receiver: Processor, broadcaster: LiveStreamBroadcaster, address: Address) {\n this.#receiver = receiver\n\n this.#broadcaster = this.#terminator.own(new NoteBroadcaster(broadcaster, address))\n }\n\n setNoteEventSource(source: NoteEventSource): Terminable {\n assert(this.#source.isEmpty(), \"NoteEventSource already set\")\n this.#source = Option.wrap(source)\n this.#receiver.reset() // TODO Hope we find a less intrusive solution later\n return Terminable.create(() => {\n this.#source = Option.None\n this.#receiver.reset()\n })\n }\n\n introduceBlock({index, p0, p1, flags}: Block): void {\n if (this.#source.isEmpty()) {return}\n for (const event of this.#source.unwrap().processNotes(p0, p1, flags)) {\n if (event.pitch >= 0 && event.pitch <= 127) {\n this.#receiver.eventInput.add(index, event)\n this.#showEvent(event)\n }\n }\n }\n\n clear(): void {}\n\n terminate(): void {this.#terminator.terminate()}\n\n #showEvent(event: Event): void {\n if (NoteLifecycleEvent.isStart(event)) {\n this.#broadcaster.noteOn(event.pitch)\n } else if (NoteLifecycleEvent.isStop(event)) {\n this.#broadcaster.noteOff(event.pitch)\n }\n }\n}", "import {clamp, Id, int, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {\n BandLimitedOscillator,\n BiquadCoeff,\n BiquadMono,\n dbToGain,\n Event,\n midiToHz,\n NoteEvent,\n velocityToGain,\n Waveform\n} from \"@opendaw/lib-dsp\"\nimport {VaporisateurDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {RenderQuantum} from \"../../constants\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {DeviceProcessor, InstrumentDeviceProcessor} from \"../../processors\"\nimport {AudioProcessor} from \"../../AudioProcessor\"\nimport {AudioBuffer} from \"../../AudioBuffer\"\nimport {Block, Processor} from \"../../processing\"\nimport {PeakBroadcaster} from \"../../PeakBroadcaster\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {NoteEventSource, NoteEventTarget, NoteLifecycleEvent} from \"../../NoteEventSource\"\nimport {NoteEventInstrument} from \"../../NoteEventInstrument\"\n\nexport class VaporisateurDeviceProcessor extends AudioProcessor implements InstrumentDeviceProcessor, NoteEventTarget {\n readonly #adapter: VaporisateurDeviceBoxAdapter\n\n readonly #voices: Array<Voice>\n readonly #noteEventInstrument: NoteEventInstrument\n readonly #audioOutput: AudioBuffer\n readonly #peakBroadcaster: PeakBroadcaster\n readonly #parameterVolume: AutomatableParameter<number>\n readonly #parameterOctave: AutomatableParameter<number>\n readonly #parameterTune: AutomatableParameter<number>\n readonly #parameterAttack: AutomatableParameter<number>\n readonly #parameterRelease: AutomatableParameter<number>\n readonly #parameterWaveform: AutomatableParameter<number>\n readonly #parameterCutoff: AutomatableParameter<number>\n readonly #parameterResonance: AutomatableParameter<number>\n readonly #parameterFilterEnvelope: AutomatableParameter<number>\n\n gain: number = 1.0\n freqMult: number = 1.0\n attack: number = 1.0\n release: number = 1.0\n waveform: Waveform = Waveform.sine\n cutoff: number = 1.0\n resonance: number = 1.0\n filterEnvelope: number = 0.0\n\n constructor(context: EngineContext, adapter: VaporisateurDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n\n this.#voices = []\n this.#noteEventInstrument = new NoteEventInstrument(this, context.broadcaster, adapter.audioUnitBoxAdapter().address)\n this.#audioOutput = new AudioBuffer()\n this.#peakBroadcaster = this.own(new PeakBroadcaster(context.broadcaster, adapter.address))\n\n this.#parameterVolume = this.own(this.bindParameter(this.#adapter.namedParameter.volume))\n this.#parameterOctave = this.own(this.bindParameter(this.#adapter.namedParameter.octave))\n this.#parameterTune = this.own(this.bindParameter(this.#adapter.namedParameter.tune))\n this.#parameterAttack = this.own(this.bindParameter(this.#adapter.namedParameter.attack))\n this.#parameterRelease = this.own(this.bindParameter(this.#adapter.namedParameter.release))\n this.#parameterWaveform = this.own(this.bindParameter(this.#adapter.namedParameter.waveform))\n this.#parameterCutoff = this.own(this.bindParameter(this.#adapter.namedParameter.cutoff))\n this.#parameterResonance = this.own(this.bindParameter(this.#adapter.namedParameter.resonance))\n this.#parameterFilterEnvelope = this.own(this.bindParameter(this.#adapter.namedParameter.filterEnvelope))\n\n this.own(context.registerProcessor(this))\n this.readAllParameters()\n }\n\n get noteEventTarget(): Option<NoteEventTarget & DeviceProcessor> {return Option.wrap(this)}\n\n introduceBlock(block: Block): void {this.#noteEventInstrument.introduceBlock(block)}\n setNoteEventSource(source: NoteEventSource): Terminable {return this.#noteEventInstrument.setNoteEventSource(source)}\n\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n\n reset(): void {\n this.#noteEventInstrument.clear()\n this.#peakBroadcaster.clear()\n this.#voices.length = 0\n this.#audioOutput.clear()\n this.eventInput.clear()\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n get audioOutput(): AudioBuffer {return this.#audioOutput}\n get adapter(): VaporisateurDeviceBoxAdapter {return this.#adapter}\n\n handleEvent(event: Event): void {\n if (NoteLifecycleEvent.isStart(event)) {\n this.#voices.push(new Voice(this, event))\n } else if (NoteLifecycleEvent.isStop(event)) {\n this.#voices.find(voice => voice.event.id === event.id)?.stop()\n }\n }\n\n processAudio(_block: Block, fromIndex: int, toIndex: int): void {\n this.#audioOutput.clear(fromIndex, toIndex)\n for (let i = this.#voices.length - 1; i >= 0; i--) {\n if (this.#voices[i].processAdd(this.#audioOutput, fromIndex, toIndex)) {\n this.#voices.splice(i, 1)\n }\n }\n }\n\n parameterChanged(parameter: AutomatableParameter): void {\n if (parameter === this.#parameterVolume) {\n this.gain = dbToGain(this.#parameterVolume.getValue())\n } else if (parameter === this.#parameterOctave || parameter === this.#parameterTune) {\n this.freqMult = 2.0 ** (this.#parameterOctave.getValue() + this.#parameterTune.getValue() / 1200.0)\n } else if (parameter === this.#parameterAttack) {\n this.attack = Math.floor(this.#parameterAttack.getValue() * sampleRate)\n } else if (parameter === this.#parameterRelease) {\n this.release = Math.floor(this.#parameterRelease.getValue() * sampleRate)\n } else if (parameter === this.#parameterWaveform) {\n this.waveform = this.#parameterWaveform.getValue() as Waveform\n } else if (parameter === this.#parameterCutoff) {\n this.cutoff = this.#parameterCutoff.getValue()\n } else if (parameter === this.#parameterResonance) {\n this.resonance = this.#parameterResonance.getValue()\n } else if (parameter === this.#parameterFilterEnvelope) {\n this.filterEnvelope = this.#parameterFilterEnvelope.getValue()\n }\n }\n\n finishProcess(): void {\n this.#audioOutput.assertSanity()\n this.#peakBroadcaster.process(this.#audioOutput.getChannel(0), this.#audioOutput.getChannel(1))\n }\n\n toString(): string {return `{VaporisateurDevice}`}\n}\n\nclass Voice {\n readonly device: VaporisateurDeviceProcessor\n readonly event: Id<NoteEvent>\n readonly osc: BandLimitedOscillator\n readonly buffer: Float32Array\n readonly filterCoeff: BiquadCoeff\n readonly filterProcessor: BiquadMono\n\n phase: number = 0.0\n position: int = 0 | 0\n decayPosition: int = Number.POSITIVE_INFINITY\n\n constructor(device: VaporisateurDeviceProcessor, event: Id<NoteEvent>) {\n this.device = device\n this.event = event\n\n this.osc = new BandLimitedOscillator()\n this.buffer = new Float32Array(RenderQuantum)\n this.filterCoeff = new BiquadCoeff()\n this.filterProcessor = new BiquadMono()\n }\n\n stop(): void {this.decayPosition = this.position - this.device.attack}\n\n processAdd(output: AudioBuffer, fromIndex: int, toIndex: int): boolean {\n const frequency = midiToHz(this.event.pitch + this.event.cent / 100.0, 440.0) * this.device.freqMult\n const gain = velocityToGain(this.event.velocity) * this.device.gain * dbToGain(-15)\n const waveform = this.device.waveform\n const attack = this.device.attack\n const release = this.device.release\n const cutoffMapping = this.device.adapter.namedParameter.cutoff.valueMapping\n const cutoff = cutoffMapping.x(this.device.cutoff)\n const resonance = this.device.resonance\n const filterEnvelope = this.device.filterEnvelope\n const l = output.getChannel(0)\n const r = output.getChannel(1)\n this.osc.generate(this.buffer, frequency / sampleRate, waveform, fromIndex, toIndex)\n for (let i = fromIndex; i < toIndex; i++) {\n const env = Math.min(this.position / attack, 1.0 - (this.position - (this.decayPosition + attack)) / release, 1.0) ** 2.0\n this.filterCoeff.setLowpassParams(cutoffMapping.y(clamp(cutoff + env * filterEnvelope, 0.0, 1.0)) / sampleRate, resonance)\n const amp = this.filterProcessor.processFrame(this.filterCoeff, this.buffer[i]) * gain * env\n l[i] += amp\n r[i] += amp\n if (++this.position - this.decayPosition > attack + release) {return true}\n }\n return false\n }\n}", "import {assert, Bits, isInstanceOf, Option, UUID} from \"@opendaw/lib-std\"\nimport {LoopableRegion} from \"@opendaw/lib-dsp\"\nimport {AudioClipBoxAdapter, AudioData, AudioRegionBoxAdapter, TapeDeviceBoxAdapter, TrackType} from \"@opendaw/studio-adapters\"\nimport {RenderQuantum} from \"../../constants\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {DeviceProcessor} from \"../../processors\"\nimport {AudioGenerator, Block, BlockFlag, ProcessInfo, Processor} from \"../../processing\"\nimport {AbstractProcessor} from \"../../AbstractProcessor\"\nimport {AudioBuffer} from \"../../AudioBuffer\"\nimport {PeakBroadcaster} from \"../../PeakBroadcaster\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {NoteEventTarget} from \"../../NoteEventSource\"\n\nexport class TapeDeviceProcessor extends AbstractProcessor implements DeviceProcessor, AudioGenerator {\n readonly #adapter: TapeDeviceBoxAdapter\n\n readonly #audioOutput: AudioBuffer\n readonly #peaks: PeakBroadcaster\n\n constructor(context: EngineContext, adapter: TapeDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n this.#audioOutput = new AudioBuffer(2)\n this.#peaks = this.own(new PeakBroadcaster(context.broadcaster, adapter.address))\n\n this.own(context.registerProcessor(this))\n }\n\n get noteEventTarget(): Option<NoteEventTarget & DeviceProcessor> {return Option.None}\n\n reset(): void {\n this.#peaks.clear()\n this.#audioOutput.clear()\n this.eventInput.clear()\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n get audioOutput(): AudioBuffer {return this.#audioOutput}\n\n process({blocks}: ProcessInfo): void {\n this.#audioOutput.clear(0, RenderQuantum)\n const [outL, outR] = this.#audioOutput.channels()\n this.#adapter.deviceHost().audioUnitBoxAdapter().tracks.collection.adapters()\n .filter(trackBoxAdapter => trackBoxAdapter.type === TrackType.Audio && trackBoxAdapter.enabled.getValue())\n .forEach(trackBoxAdapter => blocks\n .forEach((block) => {\n const {p0, p1, flags} = block\n if (!Bits.every(flags, BlockFlag.transporting | BlockFlag.playing)) {return}\n const intervals = this.context.clipSequencing.iterate(trackBoxAdapter.uuid, p0, p1)\n for (const {optClip, sectionFrom, sectionTo} of intervals) {\n optClip.match({\n none: () => {\n for (const region of trackBoxAdapter.regions.collection.iterateRange(p0, p1)) {\n if (region.mute || !isInstanceOf(region, AudioRegionBoxAdapter)) {continue}\n const optData = region.file.getOrCreateLoader().data\n if (optData.isEmpty()) {return}\n const data = optData.unwrap()\n for (const cycle of LoopableRegion.locateLoops(region, p0, p1)) {\n this.#processPass(this.#audioOutput, data, cycle, block)\n }\n }\n },\n some: clip => {\n if (!isInstanceOf(clip, AudioClipBoxAdapter)) {return}\n const optData = clip.file.getOrCreateLoader().data\n if (optData.isEmpty()) {return}\n const data = optData.unwrap()\n for (const cycle of LoopableRegion.locateLoops({\n position: 0.0,\n loopDuration: clip.duration,\n loopOffset: 0,\n complete: Number.POSITIVE_INFINITY\n }, sectionFrom, sectionTo)) {\n this.#processPass(this.#audioOutput, data, cycle, block)\n }\n }\n })\n }\n }))\n this.#audioOutput.assertSanity()\n this.#peaks.process(outL, outR)\n }\n\n parameterChanged(_parameter: AutomatableParameter): void {}\n\n #processPass(output: AudioBuffer, data: AudioData, cycle: LoopableRegion.LoopCycle, {p0, p1, s0, s1}: Block): void {\n const [outL, outR] = output.channels()\n const {numberOfFrames, frames} = data\n const framesL = frames[0]\n const framesR = frames.length === 1 ? frames[0] : frames[1]\n const sn = s1 - s0\n const pn = p1 - p0\n // read target range\n const wp0 = numberOfFrames * cycle.resultStartValue\n const wp1 = numberOfFrames * cycle.resultEndValue\n // block ratio\n const r0 = (cycle.resultStart - p0) / pn\n const r1 = (cycle.resultEnd - p0) / pn\n // block position\n const bp0 = s0 + sn * r0\n const bp1 = s0 + sn * r1\n const bpn = (bp1 - bp0) | 0\n // read step size\n const step = (wp1 - wp0) / bpn\n assert(s0 <= bp0 && bp1 <= s1, `Out of bounds ${bp0}, ${bp1}`)\n for (let i = 0 | 0, j = bp0 | 0; i < bpn; i++, j++) {\n const read = wp0 + i * step\n const readInt = read | 0\n const readAlpha = read - readInt\n const l0 = framesL[readInt]\n const r0 = framesR[readInt]\n outL[j] += l0 + readAlpha * (framesL[(readInt + 1) % numberOfFrames] - l0)\n outR[j] += r0 + readAlpha * (framesR[(readInt + 1) % numberOfFrames] - r0)\n }\n }\n}", "import {Block, ProcessInfo} from \"./processing\"\nimport {Event, ppqn} from \"@opendaw/lib-dsp\"\nimport {Nullish} from \"@opendaw/lib-std\"\nimport {AbstractProcessor} from \"./AbstractProcessor\"\nimport {UpdateEvent} from \"./UpdateClock\"\n\nexport abstract class EventProcessor extends AbstractProcessor {\n process({blocks}: ProcessInfo): void {\n blocks.forEach((block) => {\n this.introduceBlock(block)\n const {index, p0, p1} = block\n let anyEvents: Nullish<Array<Event>> = null\n let position = p0\n for (const event of this.eventInput.get(index)) {\n anyEvents?.forEach(event => this.handleEvent(block, event))\n anyEvents = null\n if (position < event.position) {\n this.processEvents(block, position, event.position)\n position = event.position\n }\n if (UpdateEvent.isOfType(event)) {\n this.updateParameter(event.position)\n } else {\n (anyEvents ??= []).push(event)\n }\n }\n anyEvents?.forEach(event => this.handleEvent(block, event))\n anyEvents = null\n if (position < p1) {\n this.processEvents(block, position, p1)\n }\n })\n this.eventInput.clear()\n }\n\n abstract handleEvent(block: Block, event: Event): void\n abstract processEvents(block: Block, from: ppqn, to: ppqn): void\n\n introduceBlock(_block: Block): void {}\n}", "import {Id, int, unitValue} from \"@opendaw/lib-std\"\nimport {NoteEvent, ppqn} from \"@opendaw/lib-dsp\"\nimport {NoteLifecycleEvent} from \"../../../NoteEventSource\"\n\nexport type Stack = ReadonlyArray<Omit<NoteEvent, \"position\">>\nexport type VelocityMatrix = { mult: unitValue, add: unitValue }\nexport namespace VelocityMatrix {\n export const create = (): VelocityMatrix => ({mult: 1.0, add: 0.0})\n export const apply = (matrix: VelocityMatrix, velocity: unitValue): unitValue => velocity * matrix.mult + matrix.add\n}\n\nexport interface Mode {\n get name(): string\n run(stack: Stack, octaves: int, stepIndex: int, position: ppqn, duration: ppqn, velocityMatrix: VelocityMatrix): Id<NoteEvent>\n}\n\nexport const ArpeggioModes: ReadonlyArray<Mode> = Object.freeze([{\n name: \"up\",\n run: (stack: Stack,\n octaves: int,\n stepIndex: int,\n position: ppqn,\n duration: ppqn,\n velocityMatrix: VelocityMatrix): Id<NoteEvent> => {\n const count = stack.length\n const amount = count * octaves\n const localIndex = stepIndex % count\n const octave = Math.floor((stepIndex % amount) / count)\n const event = stack[localIndex]\n return NoteLifecycleEvent.start(\n position, duration, event.pitch + octave * 12, VelocityMatrix.apply(velocityMatrix, event.velocity))\n }\n}, {\n name: \"down\",\n run: (stack: Stack,\n octaves: int,\n stepIndex: int,\n position: ppqn,\n duration: ppqn,\n velocityMatrix: VelocityMatrix): Id<NoteEvent> => {\n const count = stack.length\n const amount = count * octaves\n const localIndex = (count - 1) - stepIndex % count\n const octave = (octaves - 1) - Math.floor((stepIndex % amount) / count)\n const event = stack[localIndex]\n return NoteLifecycleEvent.start(\n position, duration, event.pitch + octave * 12, VelocityMatrix.apply(velocityMatrix, event.velocity))\n }\n}, {\n name: \"up-down\",\n run: (stack: Stack,\n octaves: int,\n stepIndex: int,\n position: ppqn,\n duration: ppqn,\n velocityMatrix: VelocityMatrix): Id<NoteEvent> => {\n const count = stack.length\n const processLength = count * octaves\n const sequenceLength = Math.max(1, processLength * 2 - 2)\n const sequenceIndex = stepIndex % sequenceLength\n const processIndex = (sequenceIndex < processLength ? sequenceIndex : sequenceLength - sequenceIndex)\n const localIndex = processIndex % count\n const octave = Math.floor(processIndex / count)\n const event = stack[localIndex]\n return NoteLifecycleEvent.start(\n position, duration, event.pitch + octave * 12, VelocityMatrix.apply(velocityMatrix, event.velocity))\n }\n}])", "import {ArpeggioDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {Event, EventSpanRetainer, Fraction, NoteEvent, ppqn} from \"@opendaw/lib-dsp\"\nimport {assert, Bits, Id, int, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {EventProcessor} from \"../../EventProcessor\"\nimport {MidiEffectProcessor} from \"../../processors\"\nimport {Fragmentor} from \"@opendaw/lib-dsp\"\nimport {Block, BlockFlag, Processor} from \"../../processing\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {NoteEventSource, NoteEventTarget, NoteLifecycleEvent} from \"../../NoteEventSource\"\nimport {ArpeggioModes, Mode, VelocityMatrix} from \"./ArpeggioDevice/ArpeggioModes\"\n\nexport class ArpeggioDeviceProcessor extends EventProcessor implements MidiEffectProcessor {\n readonly #adapter: ArpeggioDeviceBoxAdapter\n\n readonly #stack: Array<NoteEvent>\n readonly #retainer: EventSpanRetainer<Id<NoteEvent>>\n\n readonly #modeIndexParameter: AutomatableParameter<int>\n readonly #rateParameter: AutomatableParameter<int>\n readonly #gateParameter: AutomatableParameter<number>\n readonly #repeatParameter: AutomatableParameter<int>\n readonly #numOctaveParameter: AutomatableParameter<int>\n readonly #velocityParameter: AutomatableParameter<int>\n\n readonly #velocityMatrix: VelocityMatrix = VelocityMatrix.create()\n\n #source: Option<NoteEventSource> = Option.None\n\n #strategy: Mode = ArpeggioModes[0]\n #rate: ppqn = NaN\n #gate: number = 1.0\n #repeat: int = 1\n #numOctaves: int = 1\n\n constructor(context: EngineContext, adapter: ArpeggioDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n\n this.#stack = []\n this.#retainer = new EventSpanRetainer<Id<NoteEvent>>()\n\n this.#modeIndexParameter = this.own(this.bindParameter(adapter.namedParameter.modeIndex))\n this.#rateParameter = this.own(this.bindParameter(adapter.namedParameter.rate))\n this.#gateParameter = this.own(this.bindParameter(adapter.namedParameter.gate))\n this.#repeatParameter = this.own(this.bindParameter(adapter.namedParameter.repeat))\n this.#numOctaveParameter = this.own(this.bindParameter(adapter.namedParameter.numOctaves))\n this.#velocityParameter = this.own(this.bindParameter(adapter.namedParameter.velocity))\n\n this.ownAll(context.registerProcessor(this))\n this.readAllParameters()\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n get noteEventTarget(): Option<NoteEventTarget> {return Option.wrap(this)}\n\n setNoteEventSource(source: NoteEventSource): Terminable {\n assert(this.#source.isEmpty(), \"NoteEventSource already set\")\n this.#source = Option.wrap(source)\n return Terminable.create(() => this.#source = Option.None)\n }\n\n * processNotes(from: ppqn, to: ppqn, flags: int): Generator<NoteLifecycleEvent> {\n if (this.#retainer.nonEmpty()) {\n const releaseAll = Bits.every(flags, BlockFlag.discontinuous)\n if (releaseAll) {\n for (const event of this.#retainer.releaseAll()) {\n yield NoteLifecycleEvent.stop(event, from)\n }\n } else {\n for (const event of this.#retainer.releaseLinearCompleted(to)) {\n yield NoteLifecycleEvent.stop(event, event.position + event.duration)\n }\n }\n }\n if (this.#source.nonEmpty()) {\n const source = this.#source.unwrap()\n for (const _ of source.processNotes(from, to, flags)) {} // advance source\n const onlyExternal = !Bits.every(flags, BlockFlag.transporting)\n for (const {position, index} of Fragmentor.iterateWithIndex(from, to, this.#rate)) {\n const stack = Array.from(source.iterateActiveNotesAt(position, onlyExternal))\n if (stack.length === 0) {continue}\n const stepIndex = Math.floor(index / this.#repeat)\n const duration = Math.max(1, Math.floor(this.#rate * this.#gate))\n const event = this.#strategy.run(stack, this.#numOctaves, stepIndex, position, duration, this.#velocityMatrix)\n this.#retainer.addAndRetain({...event})\n yield event\n }\n for (const event of this.#retainer.releaseLinearCompleted(to)) {\n yield NoteLifecycleEvent.stop(event, event.position + event.duration)\n }\n }\n }\n\n * iterateActiveNotesAt(position: ppqn, onlyExternal: boolean): Generator<NoteEvent> {\n if (this.#source.isEmpty() || onlyExternal) {return}\n yield* this.#retainer.overlapping(position, NoteEvent.Comparator)\n }\n\n reset(): void {\n this.#stack.length = 0\n this.#retainer.clear()\n this.eventInput.clear()\n }\n\n processEvents(_block: Block, _from: ppqn, _to: ppqn): void {}\n\n parameterChanged(parameter: AutomatableParameter): void {\n if (parameter === this.#modeIndexParameter) {\n this.#strategy = ArpeggioModes.at(this.#modeIndexParameter.getValue()) ?? ArpeggioModes[0]\n } else if (parameter === this.#rateParameter) {\n this.#rate = Fraction.toPPQN(ArpeggioDeviceBoxAdapter.RateFractions[this.#rateParameter.getValue()])\n } else if (parameter === this.#gateParameter) {\n this.#gate = this.#gateParameter.getValue()\n } else if (parameter === this.#repeatParameter) {\n this.#repeat = this.#repeatParameter.getValue()\n } else if (parameter === this.#numOctaveParameter) {\n this.#numOctaves = this.#numOctaveParameter.getValue()\n } else if (parameter === this.#velocityParameter) {\n const velocity = this.#velocityParameter.getValue()\n if (velocity <= 0.0) {\n this.#velocityMatrix.add = 1.0 + velocity\n this.#velocityMatrix.mult = 0.0\n } else {\n this.#velocityMatrix.add = 1.0 - velocity\n this.#velocityMatrix.mult = velocity\n }\n }\n }\n\n handleEvent(_block: Block, _event: Event): void {}\n\n index(): number {return this.#adapter.indexField.getValue()}\n adapter(): ArpeggioDeviceBoxAdapter {return this.#adapter}\n}", "import {assert, int, Objects, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {NoteBroadcaster, PitchDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {Event, NoteEvent, ppqn} from \"@opendaw/lib-dsp\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {EventProcessor} from \"../../EventProcessor\"\nimport {MidiEffectProcessor} from \"../../processors\"\nimport {Block, Processor} from \"../../processing\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {NoteEventSource, NoteLifecycleEvent} from \"../../NoteEventSource\"\n\nexport class PitchDeviceProcessor extends EventProcessor implements MidiEffectProcessor {\n readonly #adapter: PitchDeviceBoxAdapter\n\n readonly #noteBroadcaster: NoteBroadcaster\n // TODO We do not need this system in midi-effects, but we cannot remove it without losing ui-updates\n readonly #octavesParameter: AutomatableParameter<int>\n readonly #semiTonesParameter: AutomatableParameter<int>\n readonly #centParameter: AutomatableParameter<number>\n\n #source: Option<NoteEventSource> = Option.None\n\n constructor(context: EngineContext, adapter: PitchDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n\n this.#noteBroadcaster = this.own(new NoteBroadcaster(context.broadcaster, adapter.address))\n this.#octavesParameter = this.own(this.bindParameter(adapter.namedParameter.octaves))\n this.#semiTonesParameter = this.own(this.bindParameter(adapter.namedParameter.semiTones))\n this.#centParameter = this.own(this.bindParameter(adapter.namedParameter.cent))\n this.own(context.registerProcessor(this))\n this.readAllParameters()\n }\n\n setNoteEventSource(source: NoteEventSource): Terminable {\n assert(this.#source.isEmpty(), \"NoteEventSource already set\")\n this.#source = Option.wrap(source)\n return Terminable.create(() => this.#source = Option.None)\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n\n * processNotes(from: ppqn, to: ppqn, flags: int): Generator<NoteLifecycleEvent> {\n if (this.#source.isEmpty()) {return}\n for (const event of this.#source.unwrap().processNotes(from, to, flags)) {\n if (NoteLifecycleEvent.isStart(event)) {\n this.#noteBroadcaster.noteOn(event.pitch)\n const {cent, octaves, semiTones} = this.#adapter.namedParameter\n yield Objects.overwrite(event, {\n pitch: event.pitch + octaves.valueAt(event.position) * 12 + semiTones.valueAt(event.position),\n cent: event.cent + cent.valueAt(event.position)\n })\n } else {\n this.#noteBroadcaster.noteOff(event.pitch)\n yield event\n }\n }\n }\n\n * iterateActiveNotesAt(position: ppqn, onlyExternal: boolean): Generator<NoteEvent> {\n if (this.#source.isEmpty()) {return}\n for (const event of this.#source.unwrap().iterateActiveNotesAt(position, onlyExternal)) {\n if (event.type === \"note-event\") {\n const {cent, octaves, semiTones} = this.#adapter.namedParameter\n yield Objects.overwrite(event, {\n pitch: event.pitch + octaves.valueAt(event.position) * 12 + semiTones.valueAt(event.position),\n cent: event.cent + cent.valueAt(event.position)\n })\n }\n }\n }\n\n reset(): void {\n this.eventInput.clear()\n }\n\n processEvents(_block: Block, _from: ppqn, _to: ppqn): void {}\n\n parameterChanged(parameter: AutomatableParameter): void {}\n\n handleEvent(_block: Block, _event: Event): void {}\n\n index(): number {return this.#adapter.indexField.getValue()}\n adapter(): PitchDeviceBoxAdapter {return this.#adapter}\n}", "import {FFT, Window} from \"@opendaw/lib-dsp\"\nimport {int} from \"@opendaw/lib-std\"\n\nexport class SpectrumAnalyser {\n static readonly DEFAULT_SIZE = 1024\n\n readonly #fftSize: number\n readonly #numBins: number\n readonly #fft: FFT\n readonly #real: Float32Array\n readonly #imag: Float32Array\n readonly #window: Float32Array\n readonly #bins: Float32Array\n\n #index: number = 0\n\n decay: boolean = false\n\n constructor(n: int = SpectrumAnalyser.DEFAULT_SIZE) {\n this.#fftSize = n\n this.#fft = new FFT(this.#fftSize)\n this.#real = new Float32Array(this.#fftSize)\n this.#imag = new Float32Array(this.#fftSize)\n this.#window = Window.create(Window.Type.Blackman, this.#fftSize)\n this.#numBins = this.#fftSize >> 1\n this.#bins = new Float32Array(this.#numBins)\n }\n\n clear(): void {\n this.#bins.fill(0.0)\n this.#index = 0\n }\n\n numBins(): int {return this.#numBins}\n bins(): Float32Array {return this.#bins}\n\n process(left: Float32Array, right: Float32Array, fromIndex: int, toIndex: int): void {\n for (let i = fromIndex; i < toIndex; ++i) {\n this.#real[this.#index] = this.#window[this.#index] * (left[i] + right[i])\n if (++this.#index === this.#fftSize) {\n this.#update()\n }\n }\n }\n\n #update(): void {\n this.#fft.process(this.#real, this.#imag)\n const scale = 1.0 / this.#numBins\n for (let i = 0; i < this.#numBins; ++i) {\n const re = this.#real[i]\n const im = this.#imag[i]\n const energy = Math.sqrt(re * re + im * im) * scale\n if (this.#bins[i] < energy) {\n this.#bins[i] = energy\n } else if (this.decay) {\n this.#bins[i] *= 0.90 // TODO Can we compute a coefficient? (depends on the FPS!)\n }\n }\n this.#index = 0\n this.#imag.fill(0.0)\n this.decay = false\n }\n}\n", "import {Arrays, int, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {BiquadCoeff, BiquadMono, BiquadProcessor, BiquadStack} from \"@opendaw/lib-dsp\"\nimport {AudioEffectDeviceBoxAdapter, RevampDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioEffectDeviceProcessor} from \"../../processors\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {Block, Processor} from \"../../processing\"\nimport {AudioBuffer} from \"../../AudioBuffer\"\nimport {PeakBroadcaster} from \"../../PeakBroadcaster\"\nimport {SpectrumAnalyser} from \"../../SpectrumAnalyser\"\nimport {AudioProcessor} from \"../../AudioProcessor\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\n\nexport class RevampDeviceProcessor extends AudioProcessor implements AudioEffectDeviceProcessor {\n static ID: int = 0 | 0\n\n readonly #id: int = RevampDeviceProcessor.ID++\n\n readonly #adapter: RevampDeviceBoxAdapter\n readonly #output: AudioBuffer\n readonly #peaks: PeakBroadcaster\n readonly #spectrumAnalyser: SpectrumAnalyser\n readonly #spectrum: Float32Array\n\n readonly #biquadCoeff: ReadonlyArray<BiquadCoeff>\n readonly #biquadLowPassProcessors: [BiquadStack, BiquadStack]\n readonly #biquadHighPassProcessors: [BiquadStack, BiquadStack]\n readonly #biquadProcessors: Array<[BiquadProcessor, BiquadProcessor]>\n readonly #enabled: Array<boolean>\n readonly #parameterHighPassEnabled: AutomatableParameter<boolean>\n readonly #parameterHighPassFrequency: AutomatableParameter<number>\n readonly #parameterHighPassQ: AutomatableParameter<number>\n readonly #parameterHighPassOrder: AutomatableParameter<int>\n readonly #parameterLowShelfEnabled: AutomatableParameter<boolean>\n readonly #parameterLowShelfFrequency: AutomatableParameter<number>\n readonly #parameterLowShelfGain: AutomatableParameter<number>\n readonly #parameterLowBellEnabled: AutomatableParameter<boolean>\n readonly #parameterLowBellFrequency: AutomatableParameter<number>\n readonly #parameterLowBellGain: AutomatableParameter<number>\n readonly #parameterLowBellQ: AutomatableParameter<number>\n readonly #parameterMidBellEnabled: AutomatableParameter<boolean>\n readonly #parameterMidBellFrequency: AutomatableParameter<number>\n readonly #parameterMidBellGain: AutomatableParameter<number>\n readonly #parameterMidBellQ: AutomatableParameter<number>\n readonly #parameterHighBellEnabled: AutomatableParameter<boolean>\n readonly #parameterHighBellFrequency: AutomatableParameter<number>\n readonly #parameterHighBellGain: AutomatableParameter<number>\n readonly #parameterHighBellQ: AutomatableParameter<number>\n readonly #parameterHighShelfEnabled: AutomatableParameter<boolean>\n readonly #parameterHighShelfFrequency: AutomatableParameter<int>\n readonly #parameterHighShelfGain: AutomatableParameter<number>\n readonly #parameterLowPassEnabled: AutomatableParameter<boolean>\n readonly #parameterLowPassFrequency: AutomatableParameter<number>\n readonly #parameterLowPassQ: AutomatableParameter<number>\n readonly #parameterLowPassOrder: AutomatableParameter<number>\n\n #source: Option<AudioBuffer> = Option.None\n\n constructor(context: EngineContext, adapter: RevampDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n this.#output = new AudioBuffer()\n this.#peaks = this.own(new PeakBroadcaster(context.broadcaster, adapter.address))\n this.#spectrumAnalyser = new SpectrumAnalyser()\n this.#spectrum = new Float32Array(this.#spectrumAnalyser.numBins())\n\n this.#biquadCoeff = Arrays.create(() => new BiquadCoeff(), 7)\n this.#biquadLowPassProcessors = [new BiquadStack(4), new BiquadStack(4)]\n this.#biquadHighPassProcessors = [new BiquadStack(4), new BiquadStack(4)]\n this.#biquadProcessors = [\n this.#biquadHighPassProcessors,\n [new BiquadMono(), new BiquadMono()],\n [new BiquadMono(), new BiquadMono()],\n [new BiquadMono(), new BiquadMono()],\n [new BiquadMono(), new BiquadMono()],\n [new BiquadMono(), new BiquadMono()],\n this.#biquadLowPassProcessors\n ]\n this.#enabled = Arrays.create(() => true, 7)\n\n const namedParameter = this.#adapter.namedParameter\n this.#parameterHighPassEnabled = this.own(this.bindParameter(namedParameter.highPass.enabled))\n this.#parameterHighPassQ = this.own(this.bindParameter(namedParameter.highPass.q))\n this.#parameterHighPassFrequency = this.own(this.bindParameter(namedParameter.highPass.frequency))\n this.#parameterHighPassOrder = this.own(this.bindParameter(namedParameter.highPass.order))\n this.#parameterLowShelfEnabled = this.own(this.bindParameter(namedParameter.lowShelf.enabled))\n this.#parameterLowShelfFrequency = this.own(this.bindParameter(namedParameter.lowShelf.frequency))\n this.#parameterLowShelfGain = this.own(this.bindParameter(namedParameter.lowShelf.gain))\n this.#parameterLowBellEnabled = this.own(this.bindParameter(namedParameter.lowBell.enabled))\n this.#parameterLowBellFrequency = this.own(this.bindParameter(namedParameter.lowBell.frequency))\n this.#parameterLowBellGain = this.own(this.bindParameter(namedParameter.lowBell.gain))\n this.#parameterLowBellQ = this.own(this.bindParameter(namedParameter.lowBell.q))\n this.#parameterMidBellEnabled = this.own(this.bindParameter(namedParameter.midBell.enabled))\n this.#parameterMidBellFrequency = this.own(this.bindParameter(namedParameter.midBell.frequency))\n this.#parameterMidBellGain = this.own(this.bindParameter(namedParameter.midBell.gain))\n this.#parameterMidBellQ = this.own(this.bindParameter(namedParameter.midBell.q))\n this.#parameterHighBellEnabled = this.own(this.bindParameter(namedParameter.highBell.enabled))\n this.#parameterHighBellFrequency = this.own(this.bindParameter(namedParameter.highBell.frequency))\n this.#parameterHighBellGain = this.own(this.bindParameter(namedParameter.highBell.gain))\n this.#parameterHighBellQ = this.own(this.bindParameter(namedParameter.highBell.q))\n this.#parameterHighShelfEnabled = this.own(this.bindParameter(namedParameter.highShelf.enabled))\n this.#parameterHighShelfFrequency = this.own(this.bindParameter(namedParameter.highShelf.frequency))\n this.#parameterHighShelfGain = this.own(this.bindParameter(namedParameter.highShelf.gain))\n this.#parameterLowPassEnabled = this.own(this.bindParameter(namedParameter.lowPass.enabled))\n this.#parameterLowPassFrequency = this.own(this.bindParameter(namedParameter.lowPass.frequency))\n this.#parameterLowPassQ = this.own(this.bindParameter(namedParameter.lowPass.q))\n this.#parameterLowPassOrder = this.own(this.bindParameter(namedParameter.lowPass.order))\n\n this.own(context.registerProcessor(this))\n context.broadcaster.broadcastFloats(adapter.spectrum, this.#spectrum, () => {\n this.#spectrum.set(this.#spectrumAnalyser.bins())\n this.#spectrumAnalyser.decay = true\n })\n this.readAllParameters()\n }\n\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n\n reset(): void {\n this.#peaks.clear()\n this.#output.clear()\n this.#biquadProcessors.forEach(pair => pair.forEach(processor => processor.reset()))\n this.eventInput.clear()\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n get audioOutput(): AudioBuffer {return this.#output}\n\n setAudioSource(source: AudioBuffer): Terminable {\n this.#source = Option.wrap(source)\n return {terminate: () => this.#source = Option.None}\n }\n\n index(): int {return this.#adapter.indexField.getValue()}\n adapter(): AudioEffectDeviceBoxAdapter {return this.#adapter}\n\n processAudio(_block: Block, fromIndex: int, toIndex: int) {\n if (this.#source.isEmpty()) {return}\n const [outL, outR] = this.#output.channels()\n const input = this.#source.unwrap()\n if (this.#enabled.some(b => b)) {\n let [inpL, inpR] = input.channels()\n this.#biquadCoeff.forEach((coeff, index) => {\n if (this.#enabled[index]) {\n const [fltL, fltR] = this.#biquadProcessors[index]\n fltL.process(coeff, inpL, outL, fromIndex, toIndex)\n fltR.process(coeff, inpR, outR, fromIndex, toIndex)\n inpL = outL\n inpR = outR\n }\n })\n } else {\n const [inpL, inpR] = input.channels()\n for (let i = fromIndex; i < toIndex; i++) {\n outL[i] = inpL[i]\n outR[i] = inpR[i]\n }\n }\n this.#peaks.process(outL, outR, fromIndex, toIndex)\n this.#spectrumAnalyser.process(outL, outR, fromIndex, toIndex)\n }\n\n parameterChanged(parameter: AutomatableParameter): void {\n if (parameter === this.#parameterLowPassOrder) {\n const order = this.#parameterLowPassOrder.getValue()\n this.#biquadLowPassProcessors[0].order = order\n this.#biquadLowPassProcessors[1].order = order\n } else if (parameter === this.#parameterHighPassOrder) {\n const order = this.#parameterHighPassOrder.getValue()\n this.#biquadHighPassProcessors[0].order = order\n this.#biquadHighPassProcessors[1].order = order\n } else if (parameter === this.#parameterHighPassFrequency || parameter === this.#parameterHighPassQ) {\n const frequency = this.#parameterHighPassFrequency.getValue()\n const q = this.#parameterHighPassQ.getValue()\n this.#biquadCoeff[0].setHighpassParams(frequency / sampleRate, q)\n } else if (parameter === this.#parameterLowShelfFrequency || parameter === this.#parameterLowShelfGain) {\n const frequency = this.#parameterLowShelfFrequency.getValue()\n const gain = this.#parameterLowShelfGain.getValue()\n this.#biquadCoeff[1].setLowShelfParams(frequency / sampleRate, gain)\n } else if (parameter === this.#parameterLowBellFrequency || parameter === this.#parameterLowBellGain || parameter === this.#parameterLowBellQ) {\n const frequency = this.#parameterLowBellFrequency.getValue()\n const gain = this.#parameterLowBellGain.getValue()\n const q = this.#parameterLowBellQ.getValue()\n this.#biquadCoeff[2].setPeakingParams(frequency / sampleRate, q, gain)\n } else if (parameter === this.#parameterMidBellFrequency || parameter === this.#parameterMidBellGain || parameter === this.#parameterMidBellQ) {\n const frequency = this.#parameterMidBellFrequency.getValue()\n const gain = this.#parameterMidBellGain.getValue()\n const q = this.#parameterMidBellQ.getValue()\n this.#biquadCoeff[3].setPeakingParams(frequency / sampleRate, q, gain)\n } else if (parameter === this.#parameterHighBellFrequency || parameter === this.#parameterHighBellGain || parameter === this.#parameterHighBellQ) {\n const frequency = this.#parameterHighBellFrequency.getValue()\n const gain = this.#parameterHighBellGain.getValue()\n const q = this.#parameterHighBellQ.getValue()\n this.#biquadCoeff[4].setPeakingParams(frequency / sampleRate, q, gain)\n } else if (parameter === this.#parameterHighShelfFrequency || parameter === this.#parameterHighShelfGain) {\n const frequency = this.#parameterHighShelfFrequency.getValue()\n const gain = this.#parameterHighShelfGain.getValue()\n this.#biquadCoeff[5].setHighShelfParams(frequency / sampleRate, gain)\n } else if (parameter === this.#parameterLowPassFrequency || parameter === this.#parameterLowPassQ) {\n const frequency = this.#parameterLowPassFrequency.getValue()\n const q = this.#parameterLowPassQ.getValue()\n this.#biquadCoeff[6].setLowpassParams(frequency / sampleRate, q)\n } else if (parameter === this.#parameterHighPassEnabled) {\n this.#enabled[0] = this.#parameterHighPassEnabled.getValue()\n } else if (parameter === this.#parameterLowShelfEnabled) {\n this.#enabled[1] = this.#parameterLowShelfEnabled.getValue()\n } else if (parameter === this.#parameterLowBellEnabled) {\n this.#enabled[2] = this.#parameterLowBellEnabled.getValue()\n } else if (parameter === this.#parameterMidBellEnabled) {\n this.#enabled[3] = this.#parameterMidBellEnabled.getValue()\n } else if (parameter === this.#parameterHighBellEnabled) {\n this.#enabled[4] = this.#parameterHighBellEnabled.getValue()\n } else if (parameter === this.#parameterHighShelfEnabled) {\n this.#enabled[5] = this.#parameterHighShelfEnabled.getValue()\n } else if (parameter === this.#parameterLowPassEnabled) {\n this.#enabled[6] = this.#parameterLowPassEnabled.getValue()\n }\n }\n\n toString(): string {return `{${this.constructor.name} (${this.#id})`}\n}", "import {int, nextPowOf2} from \"@opendaw/lib-std\"\nimport {AudioBuffer} from \"./AudioBuffer\"\n\nexport class FreeVerb {\n roomSize: number\n damp: number\n predelayInSamples: int\n wetGain: number\n dryGain: number\n\n readonly #buf0 = new Float32Array(2048)\n readonly #buf1 = new Float32Array(2048)\n readonly #buf2 = new Float32Array(2048)\n readonly #buf3 = new Float32Array(2048)\n readonly #buf4 = new Float32Array(2048)\n readonly #buf5 = new Float32Array(2048)\n readonly #buf6 = new Float32Array(2048)\n readonly #buf7 = new Float32Array(2048)\n readonly #buf8 = new Float32Array(1024)\n readonly #buf9 = new Float32Array(512)\n readonly #buf10 = new Float32Array(512)\n readonly #buf11 = new Float32Array(256)\n readonly #buf12 = new Float32Array(2048)\n readonly #buf13 = new Float32Array(2048)\n readonly #buf14 = new Float32Array(2048)\n readonly #buf15 = new Float32Array(2048)\n readonly #buf16 = new Float32Array(2048)\n readonly #buf17 = new Float32Array(2048)\n readonly #buf18 = new Float32Array(2048)\n readonly #buf19 = new Float32Array(2048)\n readonly #buf20 = new Float32Array(1024)\n readonly #buf21 = new Float32Array(512)\n readonly #buf22 = new Float32Array(512)\n readonly #buf23 = new Float32Array(256)\n\n readonly #delaySize: int\n readonly #delayBuffer: Float32Array\n\n #v9_1: number = 0.0\n #v8_1: number = 0.0\n #v11_1: number = 0.0\n #v10_1: number = 0.0\n #v13_1: number = 0.0\n #v12_1: number = 0.0\n #v15_1: number = 0.0\n #v14_1: number = 0.0\n #v17_1: number = 0.0\n #v16_1: number = 0.0\n #v19_1: number = 0.0\n #v18_1: number = 0.0\n #v21_1: number = 0.0\n #v20_1: number = 0.0\n #v23_1: number = 0.0\n #v22_1: number = 0.0\n #v6_1: number = 0.0\n #v4_1: number = 0.0\n #v2_1: number = 0.0\n #v0_1: number = 0.0\n #v33_1: number = 0.0\n #v32_1: number = 0.0\n #v35_1: number = 0.0\n #v34_1: number = 0.0\n #v37_1: number = 0.0\n #v36_1: number = 0.0\n #v39_1: number = 0.0\n #v38_1: number = 0.0\n #v41_1: number = 0.0\n #v40_1: number = 0.0\n #v43_1: number = 0.0\n #v42_1: number = 0.0\n #v45_1: number = 0.0\n #v44_1: number = 0.0\n #v47_1: number = 0.0\n #v46_1: number = 0.0\n #v30_1: number = 0.0\n #v28_1: number = 0.0\n #v26_1: number = 0.0\n #v24_1: number = 0.0\n\n #index: int = 0\n #delayPosition: int = 0\n\n constructor(MaxPreDelaySec: number = 0.500) {\n this.#delaySize = nextPowOf2(Math.ceil(MaxPreDelaySec * sampleRate))\n this.#delayBuffer = new Float32Array(this.#delaySize << 1)\n\n this.damp = 0.\n this.roomSize = 0.5\n this.wetGain = 0.3333\n this.dryGain = 1.0 - this.wetGain\n this.#index = 0\n this.#delayPosition = 0\n this.predelayInSamples = 0.008 * sampleRate\n\n this.clearHistory()\n }\n\n clear(): void {\n this.#index = 0\n this.#delayPosition = 0\n\n this.clearHistory()\n this.clearBuffers()\n }\n\n process(outBuffer: AudioBuffer, inpBuffer: AudioBuffer, fromIndex: int, toIndex: int): void {\n const [inputL, inputR] = inpBuffer.channels()\n const [outputL, outputR] = outBuffer.channels()\n\n const p0 = (0.4 * this.damp)\n const p1 = (1.0 - p0)\n const p2 = (0.7 + (0.28 * this.roomSize))\n\n for (let i = fromIndex; i < toIndex; ++i) {\n const inpL = inputL[i]\n const inpR = inputR[i]\n\n let delayRead = this.#delayPosition - this.predelayInSamples\n if (delayRead < 0) delayRead += this.#delaySize\n\n let i2\n i2 = delayRead << 1\n const magic_gain = 0.01\n const readL = this.#delayBuffer[i2] * magic_gain\n const readR = this.#delayBuffer[i2 + 1] * magic_gain\n i2 = this.#delayPosition << 1\n this.#delayBuffer[i2] = inpL\n this.#delayBuffer[i2 + 1] = inpR\n this.#delayPosition = (this.#delayPosition + 1) & (this.#delaySize - 1)\n const p = this.#index & 2047\n this.#v9_1 = p1 * this.#v8_1 + p0 * this.#v9_1\n this.#buf0[p] = readL + p2 * this.#v9_1\n this.#v8_1 = this.#buf0[(this.#index - 1617) & 2047]\n this.#v11_1 = p1 * this.#v10_1 + p0 * this.#v11_1\n this.#buf1[p] = (readL + (p2 * this.#v11_1))\n this.#v10_1 = this.#buf1[(this.#index - 1557) & 2047]\n this.#v13_1 = p1 * this.#v12_1 + p0 * this.#v13_1\n this.#buf2[p] = readL + p2 * this.#v13_1\n this.#v12_1 = this.#buf2[(this.#index - 1491) & 2047]\n this.#v15_1 = p1 * this.#v14_1 + p0 * this.#v15_1\n this.#buf3[p] = readL + p2 * this.#v15_1\n this.#v14_1 = this.#buf3[(this.#index - 1422) & 2047]\n this.#v17_1 = p1 * this.#v16_1 + p0 * this.#v17_1\n this.#buf4[p] = readL + p2 * this.#v17_1\n this.#v16_1 = this.#buf4[(this.#index - 1356) & 2047]\n this.#v19_1 = p1 * this.#v18_1 + p0 * this.#v19_1\n this.#buf5[p] = readL + p2 * this.#v19_1\n this.#v18_1 = this.#buf5[(this.#index - 1277) & 2047]\n this.#v21_1 = p1 * this.#v20_1 + p0 * this.#v21_1\n this.#buf6[p] = readL + p2 * this.#v21_1\n this.#v20_1 = this.#buf6[(this.#index - 1188) & 2047]\n this.#v23_1 = p1 * this.#v22_1 + p0 * this.#v23_1\n this.#buf7[p] = readL + p2 * this.#v23_1\n this.#v22_1 = this.#buf7[(this.#index - 1116) & 2047]\n const lt0 = this.#v22_1 + this.#v20_1 + this.#v18_1 + this.#v16_1 + this.#v14_1 + this.#v12_1 + this.#v10_1 + this.#v8_1\n const lt1 = this.#v6_1 - lt0\n const lt2 = this.#v4_1 - lt1\n const lt3 = this.#v2_1 - lt2\n this.#buf8[this.#index & 1023] = lt0 + 0.5 * this.#v6_1\n this.#v6_1 = this.#buf8[(this.#index - 556) & 1023]\n this.#buf9[this.#index & 511] = lt1 + 0.5 * this.#v4_1\n this.#v4_1 = this.#buf9[(this.#index - 441) & 511]\n this.#buf10[this.#index & 511] = lt2 + 0.5 * this.#v2_1\n this.#v2_1 = this.#buf10[(this.#index - 341) & 511]\n this.#buf11[this.#index & 255] = lt3 + 0.5 * this.#v0_1\n this.#v0_1 = this.#buf11[(this.#index - 225) & 255]\n outputL[i] = this.dryGain * inpL + this.wetGain * (this.#v0_1 - lt3)\n this.#v33_1 = p1 * this.#v32_1 + p0 * this.#v33_1\n this.#buf12[p] = readR + p2 * this.#v33_1\n this.#v32_1 = this.#buf12[(this.#index - 1640) & 2047]\n this.#v35_1 = p1 * this.#v34_1 + p0 * this.#v35_1\n this.#buf13[p] = readR + p2 * this.#v35_1\n this.#v34_1 = this.#buf13[(this.#index - 1580) & 2047]\n this.#v37_1 = p1 * this.#v36_1 + p0 * this.#v37_1\n this.#buf14[p] = readR + p2 * this.#v37_1\n this.#v36_1 = this.#buf14[(this.#index - 1514) & 2047]\n this.#v39_1 = p1 * this.#v38_1 + p0 * this.#v39_1\n this.#buf15[p] = readR + p2 * this.#v39_1\n this.#v38_1 = this.#buf15[(this.#index - 1445) & 2047]\n this.#v41_1 = p1 * this.#v40_1 + p0 * this.#v41_1\n this.#buf16[p] = readR + p2 * this.#v41_1\n this.#v40_1 = this.#buf16[(this.#index - 1379) & 2047]\n this.#v43_1 = p1 * this.#v42_1 + p0 * this.#v43_1\n this.#buf17[p] = (readR + (p2 * this.#v43_1))\n this.#v42_1 = this.#buf17[(this.#index - 1300) & 2047]\n this.#v45_1 = p1 * this.#v44_1 + p0 * this.#v45_1\n this.#buf18[p] = readR + p2 * this.#v45_1\n this.#v44_1 = this.#buf18[(this.#index - 1211) & 2047]\n this.#v47_1 = p1 * this.#v46_1 + p0 * this.#v47_1\n this.#buf19[p] = readR + p2 * this.#v47_1\n this.#v46_1 = this.#buf19[(this.#index - 1139) & 2047]\n const rt0 = this.#v46_1 + this.#v44_1 + this.#v42_1 + this.#v40_1 + this.#v38_1 + this.#v36_1 + this.#v34_1 + this.#v32_1\n const rt1 = this.#v30_1 - rt0\n const rt2 = this.#v28_1 - rt1\n const rt3 = this.#v26_1 - rt2\n this.#buf20[this.#index & 1023] = rt0 + 0.5 * this.#v30_1\n this.#v30_1 = this.#buf20[(this.#index - 579) & 1023]\n this.#buf21[this.#index & 511] = rt1 + 0.5 * this.#v28_1\n this.#v28_1 = this.#buf21[(this.#index - 464) & 511]\n this.#buf22[this.#index & 511] = rt2 + 0.5 * this.#v26_1\n this.#v26_1 = this.#buf22[(this.#index - 364) & 511]\n this.#buf23[this.#index & 255] = rt3 + 0.5 * this.#v24_1\n this.#v24_1 = this.#buf23[(this.#index - 248) & 255]\n outputR[i] = this.dryGain * inpR + this.wetGain * (this.#v24_1 - rt3)\n this.#index++\n }\n }\n\n clearBuffers(): void {\n this.#buf0.fill(0.0)\n this.#buf1.fill(0.0)\n this.#buf2.fill(0.0)\n this.#buf3.fill(0.0)\n this.#buf4.fill(0.0)\n this.#buf5.fill(0.0)\n this.#buf6.fill(0.0)\n this.#buf7.fill(0.0)\n this.#buf8.fill(0.0)\n this.#buf9.fill(0.0)\n this.#buf10.fill(0.0)\n this.#buf11.fill(0.0)\n this.#buf12.fill(0.0)\n this.#buf13.fill(0.0)\n this.#buf14.fill(0.0)\n this.#buf15.fill(0.0)\n this.#buf16.fill(0.0)\n this.#buf17.fill(0.0)\n this.#buf18.fill(0.0)\n this.#buf19.fill(0.0)\n this.#buf20.fill(0.0)\n this.#buf21.fill(0.0)\n this.#buf22.fill(0.0)\n this.#buf23.fill(0.0)\n this.#delayBuffer.fill(0.0)\n }\n\n clearHistory() {\n this.#v9_1 = 0.0\n this.#v8_1 = 0.0\n this.#v11_1 = 0.0\n this.#v10_1 = 0.0\n this.#v13_1 = 0.0\n this.#v12_1 = 0.0\n this.#v15_1 = 0.0\n this.#v14_1 = 0.0\n this.#v17_1 = 0.0\n this.#v16_1 = 0.0\n this.#v19_1 = 0.0\n this.#v18_1 = 0.0\n this.#v21_1 = 0.0\n this.#v20_1 = 0.0\n this.#v23_1 = 0.0\n this.#v22_1 = 0.0\n this.#v6_1 = 0.0\n this.#v4_1 = 0.0\n this.#v2_1 = 0.0\n this.#v0_1 = 0.0\n this.#v33_1 = 0.0\n this.#v32_1 = 0.0\n this.#v35_1 = 0.0\n this.#v34_1 = 0.0\n this.#v37_1 = 0.0\n this.#v36_1 = 0.0\n this.#v39_1 = 0.0\n this.#v38_1 = 0.0\n this.#v41_1 = 0.0\n this.#v40_1 = 0.0\n this.#v43_1 = 0.0\n this.#v42_1 = 0.0\n this.#v45_1 = 0.0\n this.#v44_1 = 0.0\n this.#v47_1 = 0.0\n this.#v46_1 = 0.0\n this.#v30_1 = 0.0\n this.#v28_1 = 0.0\n this.#v26_1 = 0.0\n this.#v24_1 = 0.0\n }\n}", "import {int, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {dbToGain} from \"@opendaw/lib-dsp\"\nimport {AudioEffectDeviceBoxAdapter, ReverbDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioEffectDeviceProcessor} from \"../../processors\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {AudioBuffer} from \"../../AudioBuffer\"\nimport {PeakBroadcaster} from \"../../PeakBroadcaster\"\nimport {FreeVerb} from \"../../FreeVerb\"\nimport {AudioProcessor} from \"../../AudioProcessor\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {Processor} from \"../../processing\"\n\nexport class ReverbDeviceProcessor extends AudioProcessor implements AudioEffectDeviceProcessor {\n static ID: int = 0 | 0\n\n readonly #id: int = ReverbDeviceProcessor.ID++\n\n readonly #adapter: ReverbDeviceBoxAdapter\n readonly #output: AudioBuffer\n readonly #peaks: PeakBroadcaster\n readonly #reverb: FreeVerb\n readonly #parameterDecay: AutomatableParameter<number>\n readonly #parameterPreDelay: AutomatableParameter<number>\n readonly #parameterDamp: AutomatableParameter<number>\n readonly #parameterWet: AutomatableParameter<number>\n readonly #parameterDry: AutomatableParameter<number>\n\n #source: Option<AudioBuffer> = Option.None\n\n constructor(context: EngineContext, adapter: ReverbDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n this.#output = new AudioBuffer()\n this.#peaks = this.own(new PeakBroadcaster(context.broadcaster, adapter.address))\n this.#reverb = new FreeVerb()\n\n const {decay, preDelay, damp, wet, dry} = this.#adapter.namedParameter\n this.#parameterDecay = this.own(this.bindParameter(decay))\n this.#parameterPreDelay = this.own(this.bindParameter(preDelay))\n this.#parameterDamp = this.own(this.bindParameter(damp))\n this.#parameterWet = this.own(this.bindParameter(wet))\n this.#parameterDry = this.own(this.bindParameter(dry))\n\n this.own(context.registerProcessor(this))\n this.readAllParameters()\n }\n\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n\n reset(): void {\n this.#peaks.clear()\n this.#reverb.clear()\n this.#output.clear()\n this.eventInput.clear()\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n\n get audioOutput(): AudioBuffer {return this.#output}\n\n setAudioSource(source: AudioBuffer): Terminable {\n this.#source = Option.wrap(source)\n return {terminate: () => this.#source = Option.None}\n }\n\n index(): int {return this.#adapter.indexField.getValue()}\n adapter(): AudioEffectDeviceBoxAdapter {return this.#adapter}\n\n processAudio(_block: Readonly<{}>, fromIndex: number, toIndex: number) {\n if (this.#source.isEmpty()) {return}\n this.#reverb.process(this.#output, this.#source.unwrap(), fromIndex, toIndex)\n const [outL, outR] = this.#output.channels()\n this.#peaks.process(outL, outR, fromIndex, toIndex)\n }\n\n parameterChanged(parameter: AutomatableParameter): void {\n if (this.#parameterDecay === parameter) {\n this.#reverb.roomSize = this.#parameterDecay.getValue()\n } else if (this.#parameterPreDelay === parameter) {\n this.#reverb.predelayInSamples = Math.ceil(this.#parameterPreDelay.getValue() * sampleRate)\n } else if (this.#parameterDamp === parameter) {\n this.#reverb.damp = this.#parameterDamp.getValue()\n } else if (this.#parameterWet === parameter) {\n this.#reverb.wetGain = dbToGain(this.#parameterWet.getValue())\n } else if (this.#parameterDry === parameter) {\n this.#reverb.dryGain = dbToGain(this.#parameterDry.getValue())\n }\n }\n\n toString(): string {return `{${this.constructor.name} (${this.#id})`}\n}", "import {Id, int, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {dbToGain, Event, NoteEvent} from \"@opendaw/lib-dsp\"\nimport {AudioData, SampleLoader, NanoDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {DeviceProcessor, InstrumentDeviceProcessor} from \"../../processors\"\nimport {AudioProcessor} from \"../../AudioProcessor\"\nimport {AudioBuffer} from \"../../AudioBuffer\"\nimport {Block, Processor} from \"../../processing\"\nimport {PeakBroadcaster} from \"../../PeakBroadcaster\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {NoteEventSource, NoteEventTarget, NoteLifecycleEvent} from \"../../NoteEventSource\"\nimport {NoteEventInstrument} from \"../../NoteEventInstrument\"\n\nexport class NanoDeviceProcessor extends AudioProcessor implements InstrumentDeviceProcessor, NoteEventTarget {\n readonly #adapter: NanoDeviceBoxAdapter\n\n readonly #voices: Array<Voice>\n readonly #audioOutput: AudioBuffer\n readonly #noteEventProcessor: NoteEventInstrument\n readonly #peakBroadcaster: PeakBroadcaster\n readonly #parameterVolume: AutomatableParameter<number>\n readonly #parameterRelease: AutomatableParameter<number>\n\n gain: number = 1.0\n release: number = 1.0\n loader: Option<SampleLoader> = Option.None\n\n constructor(context: EngineContext, adapter: NanoDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n\n this.#voices = []\n this.#audioOutput = new AudioBuffer()\n this.#noteEventProcessor = new NoteEventInstrument(this, context.broadcaster, adapter.address)\n this.#peakBroadcaster = this.own(new PeakBroadcaster(context.broadcaster, adapter.address))\n this.#parameterVolume = this.own(this.bindParameter(this.#adapter.namedParameter.volume))\n this.#parameterRelease = this.own(this.bindParameter(this.#adapter.namedParameter.release))\n\n this.ownAll(\n context.registerProcessor(this),\n adapter.box.file.catchupAndSubscribe((pointer) =>\n this.loader = pointer.targetVertex.map(({box}) =>\n context.audioManager.getOrCreate(box.address.uuid)))\n )\n this.readAllParameters()\n }\n\n get noteEventTarget(): Option<NoteEventTarget & DeviceProcessor> {return Option.wrap(this)}\n\n introduceBlock(block: Block): void {\n this.#noteEventProcessor.introduceBlock(block)\n }\n\n setNoteEventSource(source: NoteEventSource): Terminable {\n return this.#noteEventProcessor.setNoteEventSource(source)\n }\n\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n\n reset(): void {\n this.#voices.length = 0\n this.#audioOutput.clear()\n this.eventInput.clear()\n this.#noteEventProcessor.clear()\n this.#peakBroadcaster.clear()\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n get audioOutput(): AudioBuffer {return this.#audioOutput}\n get adapter(): NanoDeviceBoxAdapter {return this.#adapter}\n\n handleEvent(event: Event): void {\n if (NoteLifecycleEvent.isStart(event)) {\n this.#voices.push(new Voice(this, event))\n } else if (NoteLifecycleEvent.isStop(event)) {\n this.#voices.find(voice => voice.event().id === event.id)?.stop()\n }\n }\n\n processAudio(_block: Block, fromIndex: int, toIndex: int): void {\n this.#audioOutput.clear(fromIndex, toIndex)\n for (let i = this.#voices.length - 1; i >= 0; i--) {\n if (this.#voices[i].processAdd(this.#audioOutput, fromIndex, toIndex)) {\n this.#voices.splice(i, 1)\n }\n }\n }\n\n parameterChanged(parameter: AutomatableParameter): void {\n if (parameter === this.#parameterVolume) {\n this.gain = dbToGain(this.#parameterVolume.getValue())\n } else if (parameter === this.#parameterRelease) {\n this.release = this.#parameterRelease.getValue() * sampleRate\n }\n }\n\n finishProcess(): void {\n this.#audioOutput.assertSanity()\n this.#peakBroadcaster.process(this.#audioOutput.getChannel(0), this.#audioOutput.getChannel(1))\n }\n\n toString(): string {return `{NanoDevice}`}\n}\n\nclass Voice {\n readonly #device: NanoDeviceProcessor\n readonly #event: Id<NoteEvent>\n\n readonly #speed: number = 1.0\n\n #position: number = 0.0\n #envPosition: int = 0 | 0\n #decayPosition: int = Number.POSITIVE_INFINITY\n\n constructor(device: NanoDeviceProcessor, event: Id<NoteEvent>) {\n this.#device = device\n this.#event = event\n\n this.#speed = Math.pow(2.0, (event.pitch + event.cent / 100.0) / 12.0 - 5.0)\n }\n\n event(): Id<NoteEvent> {return this.#event}\n\n stop(): void {this.#decayPosition = this.#envPosition}\n\n processAdd(output: AudioBuffer, fromIndex: int, toIndex: int): boolean {\n const optLoader = this.#device.loader\n if (optLoader.isEmpty()) {return true}\n const loader = optLoader.unwrap()\n if (loader.data.isEmpty()) {return true}\n return this.processSimple(output.channels(), loader.data.unwrap(), fromIndex, toIndex)\n }\n\n processSimple(output: ReadonlyArray<Float32Array>, data: AudioData, fromIndex: int, toIndex: int): boolean {\n const [outL, outR] = output\n const inpL = data.frames[0]\n const inpR = data.frames[1] ?? inpL\n const numberOfFrames = data.numberOfFrames\n const rateRatio = data.sampleRate / sampleRate\n const gain = this.#device.gain\n const release = this.#device.release\n const releaseInverse = 1.0 / release\n for (let i = fromIndex; i < toIndex; i++) {\n const intPosition = this.#position | 0\n if (intPosition >= numberOfFrames - 1) {return true}\n const frac = this.#position - intPosition\n const env = Math.min(1.0 - (this.#envPosition - this.#decayPosition) * releaseInverse, 1.0) ** 2.0\n const l = inpL[intPosition] * (1.0 - frac) + inpL[intPosition + 1] * frac\n const r = inpR[intPosition] * (1.0 - frac) + inpR[intPosition + 1] * frac\n outL[i] += l * gain * env\n outR[i] += r * gain * env\n this.#position += this.#speed * rateRatio\n if (++this.#envPosition - this.#decayPosition > release) {return true}\n }\n return false\n }\n}", "import {Terminable} from \"@opendaw/lib-std\"\nimport {Event} from \"@opendaw/lib-dsp\"\nimport {Block} from \"../../../processing\"\nimport {EngineContext} from \"../../../EngineContext\"\nimport {EventProcessor} from \"../../../EventProcessor\"\nimport {NoteEventSource, NoteEventTarget, NoteLifecycleEvent} from \"../../../NoteEventSource\"\nimport {NoteEventInstrument} from \"../../../NoteEventInstrument\"\nimport {PlayfieldDeviceProcessor} from \"../PlayfieldDeviceProcessor\"\n\nexport class PlayfieldSequencer extends EventProcessor implements NoteEventTarget {\n readonly #device: PlayfieldDeviceProcessor\n\n readonly #noteEventInstrument: NoteEventInstrument\n\n constructor(context: EngineContext, device: PlayfieldDeviceProcessor) {\n super(context)\n\n this.#device = device\n\n this.#noteEventInstrument = new NoteEventInstrument(this, context.broadcaster, device.adapter.address)\n\n this.own(context.registerProcessor(this))\n this.readAllParameters()\n }\n\n introduceBlock(block: Block): void {this.#noteEventInstrument.introduceBlock(block)}\n setNoteEventSource(source: NoteEventSource): Terminable {return this.#noteEventInstrument.setNoteEventSource(source)}\n\n reset(): void {\n this.eventInput.clear()\n this.#noteEventInstrument.clear()\n }\n\n processEvents(_block: Readonly<Block>, _from: number, _to: number): void {}\n\n handleEvent({index}: Readonly<Block>, event: Event): void {\n if (NoteLifecycleEvent.isStart(event)) {\n this.#device.optSampleProcessor(event.pitch).ifSome(({eventInput}) => eventInput.add(index, event))\n } else if (NoteLifecycleEvent.isStop(event)) {\n this.#device.optSampleProcessor(event.pitch).ifSome(({eventInput}) => eventInput.add(index, event))\n }\n }\n\n toString(): string {return \"{PlayfieldSequencer}\"}\n}", "import {Arrays, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {AudioProcessor} from \"../../../AudioProcessor\"\nimport {AudioDeviceProcessor} from \"../../../processors\"\nimport {AudioGenerator, Processor} from \"../../../processing\"\nimport {AudioBuffer} from \"../../../AudioBuffer\"\nimport {PeakBroadcaster} from \"../../../PeakBroadcaster\"\nimport {EventBuffer} from \"../../../EventBuffer\"\nimport {EngineContext} from \"../../../EngineContext\"\nimport {RenderQuantum} from \"../../../constants\"\nimport {PlayfieldDeviceProcessor} from \"../PlayfieldDeviceProcessor\"\n\nexport class MixProcessor extends AudioProcessor implements AudioDeviceProcessor, Processor, AudioGenerator {\n readonly #device: PlayfieldDeviceProcessor\n\n readonly #audioOutput: AudioBuffer\n readonly #peaksBroadcaster: PeakBroadcaster\n readonly #sources: Array<AudioBuffer>\n readonly #eventBuffer: EventBuffer\n\n constructor(context: EngineContext, device: PlayfieldDeviceProcessor) {\n super(context)\n\n this.#device = device\n\n this.#audioOutput = new AudioBuffer()\n this.#peaksBroadcaster = this.own(new PeakBroadcaster(context.broadcaster, device.adapter.address))\n this.#sources = []\n this.#eventBuffer = new EventBuffer()\n\n this.own(context.registerProcessor(this))\n this.readAllParameters()\n }\n\n get uuid(): UUID.Format {return this.#device.uuid}\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n\n setAudioSource(source: AudioBuffer): Terminable {\n this.#sources.push(source)\n return {\n terminate: () => {\n Arrays.remove(this.#sources, source)\n this.#audioOutput.clear()\n }\n }\n }\n\n get audioOutput(): AudioBuffer {return this.#audioOutput}\n get eventInput(): EventBuffer {return this.#eventBuffer}\n\n processAudio(_block: Readonly<{}>, _fromIndex: number, _toIndex: number): void {}\n\n reset(): void {this.#peaksBroadcaster.clear()}\n\n finishProcess(): void {\n this.#audioOutput.clear()\n const [outL, outR] = this.#audioOutput.channels()\n for (const source of this.#sources) {\n const [srcL, srcR] = source.channels()\n for (let i = 0; i < RenderQuantum; i++) {\n outL[i] += srcL[i]\n outR[i] += srcR[i]\n }\n }\n this.#audioOutput.assertSanity()\n this.#peaksBroadcaster.process(this.#audioOutput.getChannel(0), this.#audioOutput.getChannel(1))\n }\n\n toString(): string {return \"{PlayfieldMixProcessor}\"}\n}", "import {Arrays, assert, SortedSet, Subscription, Terminator, UUID} from \"@opendaw/lib-std\"\nimport {AudioDeviceProcessor, AudioEffectDeviceProcessor, DeviceProcessor} from \"./processors\"\nimport {AudioEffectDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioEffectDeviceProcessorFactory} from \"./DeviceProcessorFactory\"\nimport {AudioInput, ProcessPhase} from \"./processing\"\nimport {DeviceChain} from \"./DeviceChain\"\nimport {EngineContext} from \"./EngineContext\"\nimport {SortedBoxAdapterCollection} from \"@opendaw/studio-adapters\"\nimport {Pointers} from \"@opendaw/studio-enums\"\n\n// TODO Open this to MidiEffects as well\n\ntype EffectDeviceEntry = {\n device: AudioEffectDeviceProcessor\n subscription: Subscription\n}\n\nexport interface AudioTarget extends AudioInput, DeviceProcessor {}\n\nexport class InsertReturnAudioChain implements DeviceChain {\n static create(context: EngineContext,\n collection: SortedBoxAdapterCollection<AudioEffectDeviceBoxAdapter, Pointers.AudioEffectHost>,\n sourceProcessor: AudioDeviceProcessor,\n targetProcessor: AudioTarget) {\n return new InsertReturnAudioChain(context, collection, sourceProcessor, targetProcessor)\n }\n\n readonly #terminator = new Terminator()\n\n readonly #effects: SortedSet<UUID.Format, EffectDeviceEntry>\n readonly #disconnector: Terminator\n\n #orderedEffects: Array<AudioEffectDeviceProcessor> = []\n #needsWiring = true\n\n private constructor(context: EngineContext,\n collection: SortedBoxAdapterCollection<AudioEffectDeviceBoxAdapter, Pointers.AudioEffectHost>,\n sourceProcessor: AudioDeviceProcessor,\n targetProcessor: AudioTarget) {\n this.#effects = UUID.newSet(({device}) => device.uuid)\n this.#disconnector = this.#terminator.own(new Terminator())\n\n this.#terminator.ownAll(\n collection.catchupAndSubscribe({\n onAdd: (adapter: AudioEffectDeviceBoxAdapter) => {\n this.invalidateWiring()\n const device = AudioEffectDeviceProcessorFactory.create(context, adapter.box)\n const added = this.#effects.add({\n device, subscription: device.adapter().enabledField.subscribe(() => this.invalidateWiring())\n })\n assert(added, \"Could not add.\")\n },\n onRemove: (adapter: AudioEffectDeviceBoxAdapter) => {\n this.invalidateWiring()\n const {device, subscription} = this.#effects.removeByKey(adapter.uuid)\n subscription.terminate()\n device.terminate()\n },\n onReorder: (_adapter: AudioEffectDeviceBoxAdapter) => this.invalidateWiring()\n }),\n context.subscribeProcessPhase(phase => {\n if (phase === ProcessPhase.Before && this.#needsWiring) {\n let source = sourceProcessor\n Arrays.replace(this.#orderedEffects, collection.adapters().map(({uuid}) => this.#effects.get(uuid).device))\n for (const target of this.#orderedEffects) {\n if (target.adapter().enabledField.getValue()) {\n this.#disconnector.own(target.setAudioSource(source.audioOutput))\n this.#disconnector.own(context.registerEdge(source.outgoing, target.incoming))\n source = target\n }\n }\n this.#disconnector.own(targetProcessor.setAudioSource(source.audioOutput))\n this.#disconnector.own(context.registerEdge(source.outgoing, targetProcessor.incoming))\n this.#needsWiring = false\n }\n })\n )\n }\n\n invalidateWiring(): void {\n this.#disconnector.terminate()\n this.#needsWiring = true\n }\n\n terminate(): void {\n this.#terminator.terminate()\n this.#effects.forEach(({device}) => device.terminate())\n this.#effects.clear()\n this.#orderedEffects = []\n }\n\n toString(): string {return `{${this.constructor.name}}`}\n}", "import {AudioData, Gate, PlayfieldSampleBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {NoteEvent, velocityToGain} from \"@opendaw/lib-dsp\"\nimport {Id, int} from \"@opendaw/lib-std\"\nimport {AutomatableParameters} from \"./AutomatableParameters\"\n\nconst FAST_RELEASE = Math.floor(0.005 * sampleRate)\n\nexport class SampleVoice {\n readonly #sample: PlayfieldSampleBoxAdapter\n readonly #parameters: AutomatableParameters\n readonly #event: Id<NoteEvent>\n readonly #data: AudioData\n\n readonly #gate: Gate\n readonly #gain: number\n\n #envPosition: int = 0 | 0\n\n #decayPosition: int = Number.POSITIVE_INFINITY\n #attack: number\n #release: number\n #start: number\n #end: number\n #position: number\n #envelope: number\n\n #active: boolean = true\n #released: boolean = false\n\n constructor(sample: PlayfieldSampleBoxAdapter,\n parameters: AutomatableParameters,\n data: AudioData,\n event: Id<NoteEvent>) {\n this.#sample = sample\n this.#parameters = parameters\n this.#data = data\n this.#event = event\n\n this.#gate = sample.gate\n this.#gain = velocityToGain(this.#event.velocity)\n\n const {attack, release, sampleStart, sampleEnd} = this.#parameters\n this.#attack = attack.getValue() * sampleRate\n this.#release = release.getValue() * sampleRate\n this.#start = (data.numberOfFrames - 1) * sampleStart.getValue()\n this.#end = (data.numberOfFrames - 1) * sampleEnd.getValue()\n this.#position = this.#start\n this.#envelope = 0.0\n }\n\n get sample(): PlayfieldSampleBoxAdapter {return this.#sample}\n get event(): Id<NoteEvent> {return this.#event}\n get position(): number {return this.#position}\n get envelope(): number {return this.#envelope}\n\n release(force: boolean = false): void {\n if (!this.#active) {return}\n if (force) {\n this.#release = FAST_RELEASE\n this.#releaseEnvelope()\n this.#active = false\n } else if (this.#gate !== Gate.Off) {\n this.#releaseEnvelope()\n }\n }\n\n processAdd(output: ReadonlyArray<Float32Array>, fromIndex: int, toIndex: int): boolean {\n const [outL, outR] = output\n const {frames, numberOfFrames} = this.#data\n const inpL = frames[0]\n const inpR = frames[1] ?? inpL\n const {pitch} = this.#parameters\n const distance = this.#end - this.#start\n const sign = Math.sign(distance)\n const rateRatio = this.#data.sampleRate / sampleRate * sign * (2.0 ** (pitch.getValue() / 1200.0))\n let env = 0.0\n for (let i = fromIndex; i < toIndex; i++) {\n const intPosition = this.#position | 0\n const frac = this.#position - intPosition\n const l = inpL[intPosition] * (1.0 - frac) + (inpL[intPosition + 1] ?? 0.0) * frac\n const r = inpR[intPosition] * (1.0 - frac) + (inpR[intPosition + 1] ?? 0.0) * frac\n env = Math.min(this.#envPosition / this.#attack,\n 1.0 - (this.#envPosition - (this.#decayPosition + this.#attack)) / this.#release, 1.0)\n this.#position += rateRatio\n if (sign > 0.0) {\n if (this.#gate === Gate.Off) {\n if (this.#position >= numberOfFrames) {return true}\n if (!this.#released && this.#position >= this.#end) {\n this.#releaseEnvelope()\n }\n } else if (this.#gate === Gate.On) {\n if (this.#position >= this.#end - FAST_RELEASE) {\n if (this.#position >= this.#end) {return true}\n env *= (this.#end - this.#position) / FAST_RELEASE\n }\n } else if (this.#gate === Gate.Loop) {\n while (this.#position >= this.#end) {this.#position -= distance}\n }\n } else if (sign < 0.0) {\n if (this.#gate === Gate.Off) {\n if (this.#position <= 0) {return true}\n if (!this.#released && this.#position <= this.#end) {\n this.#releaseEnvelope()\n }\n } else if (this.#gate === Gate.On) {\n if (this.#position <= this.#end + FAST_RELEASE) {\n if (this.#position <= this.#end) {return true}\n env *= (this.#end - this.#position) / FAST_RELEASE\n }\n } else if (this.#gate === Gate.Loop) {\n while (this.#position <= this.#end) {this.#position -= distance}\n }\n }\n if (++this.#envPosition - this.#decayPosition > this.#attack + this.#release) {return true}\n env *= this.#gain * env\n outL[i] += l * env\n outR[i] += r * env\n }\n this.#envelope = env\n return false\n }\n\n toString(): string {return \"{PlayfieldSampleVoice}\"}\n\n #releaseEnvelope(): void {\n if (this.#released) {return}\n this.#released = true\n this.#decayPosition = this.#envPosition < this.#attack\n ? this.#envPosition - this.#attack\n : this.#envPosition\n }\n}", "import {int, UUID} from \"@opendaw/lib-std\"\nimport {Event} from \"@opendaw/lib-dsp\"\nimport {PlayfieldSampleBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioProcessor} from \"../../../AudioProcessor\"\nimport {DeviceProcessor} from \"../../../processors\"\nimport {AudioGenerator, Block, Processor} from \"../../../processing\"\nimport {AudioBuffer} from \"../../../AudioBuffer\"\nimport {EngineContext} from \"../../../EngineContext\"\nimport {InsertReturnAudioChain} from \"../../../InsertReturnAudioChain\"\nimport {AutomatableParameter} from \"../../../AutomatableParameter\"\nimport {PeakBroadcaster} from \"../../../PeakBroadcaster\"\nimport {NoteLifecycleEvent} from \"../../../NoteEventSource\"\nimport {PlayfieldDeviceProcessor} from \"../PlayfieldDeviceProcessor\"\nimport {SampleVoice} from \"./SampleVoice\"\nimport {AutomatableParameters} from \"./AutomatableParameters\"\nimport {MixProcessor} from \"./MixProcessor\"\n\nexport class SampleProcessor extends AudioProcessor implements DeviceProcessor, AudioGenerator {\n readonly #device: PlayfieldDeviceProcessor\n readonly #adapter: PlayfieldSampleBoxAdapter\n\n readonly #voices: Array<SampleVoice>\n readonly #audioOutput: AudioBuffer\n readonly #peaksBroadcaster: PeakBroadcaster\n\n readonly #parameters: AutomatableParameters\n\n constructor(context: EngineContext,\n device: PlayfieldDeviceProcessor,\n adapter: PlayfieldSampleBoxAdapter,\n mixProcessor: MixProcessor) {\n super(context)\n\n this.#device = device\n this.#adapter = adapter\n\n this.#voices = []\n this.#audioOutput = new AudioBuffer()\n this.#peaksBroadcaster = this.own(new PeakBroadcaster(context.broadcaster, adapter.peakAddress))\n\n const {sampleStart, sampleEnd, attack, release, pitch} = adapter.namedParameter\n\n this.#parameters = Object.freeze({\n sampleStart: this.own(this.bindParameter(sampleStart)),\n sampleEnd: this.own(this.bindParameter(sampleEnd)),\n attack: this.own(this.bindParameter(attack)),\n release: this.own(this.bindParameter(release)),\n pitch: this.own(this.bindParameter(pitch))\n })\n\n const positions = new Float32Array(16) // we just assume that 16 voices per channels are enough to visualize\n this.ownAll(\n InsertReturnAudioChain.create(context, adapter.audioEffects, this, mixProcessor),\n context.broadcaster.broadcastFloats(adapter.address, positions, () => {\n const slices = this.#voices.length < positions.length ? this.#voices : this.#voices.slice(0, positions.length)\n slices.forEach(({position}, index) => positions[index] = position)\n positions[slices.length] = -1.0 // close stream\n }),\n context.registerProcessor(this)\n )\n this.readAllParameters()\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n get audioOutput(): AudioBuffer {return this.#audioOutput}\n\n get adapter(): PlayfieldSampleBoxAdapter {return this.#adapter}\n\n handleEvent(event: Event) {\n if (NoteLifecycleEvent.isStart(event)) {\n const optData = this.#adapter.file().flatMap(file => file.getOrCreateLoader().data)\n if (optData.isEmpty()) {return}\n const {mute, solo, polyphone, exclude} = this.#adapter.namedParameter\n const isMute = mute.getValue()\n const isSolo = solo.getValue()\n const silent = isMute || (this.#device.hasSolo() && !isSolo)\n if (silent) {return}\n if (!polyphone.getValue()) {this.#voices.forEach(voice => voice.release(true))}\n if (exclude.getValue()) {this.#device.stopExcludeOthers(this.#adapter)}\n this.#voices.push(new SampleVoice(this.#adapter, this.#parameters, optData.unwrap(), event))\n } else if (NoteLifecycleEvent.isStop(event)) {\n this.#voices.find(voice => voice.event.id === event.id)?.release()\n }\n }\n\n processAudio(_block: Block, fromIndex: int, toIndex: int): void {\n this.#audioOutput.clear(fromIndex, toIndex)\n for (let i = this.#voices.length - 1; i >= 0; i--) {\n if (this.#voices[i].processAdd(this.#audioOutput.channels(), fromIndex, toIndex)) {\n this.#voices.splice(i, 1)\n }\n }\n }\n\n forceStop(): void {this.#voices.forEach(voice => voice.release(true))}\n\n parameterChanged(_parameter: AutomatableParameter): void {}\n\n reset(): void {\n this.#voices.length = 0\n this.#audioOutput.clear()\n this.#peaksBroadcaster.clear()\n }\n\n finishProcess(): void {\n this.#audioOutput.assertSanity()\n this.#peaksBroadcaster.process(this.#audioOutput.getChannel(0), this.#audioOutput.getChannel(1))\n }\n\n toString(): string {return `{PlayfieldSampleProcessor note: ${this.#adapter.indexField.getValue()}}`}\n}", "import {byte, Option, SortedSet, Terminable, Terminator, UUID} from \"@opendaw/lib-std\"\nimport {PlayfieldDeviceBoxAdapter, PlayfieldSampleBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {DeviceProcessor} from \"../../processors\"\nimport {AudioBuffer} from \"../../AudioBuffer\"\nimport {Processor} from \"../../processing\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {NoteEventSource, NoteEventTarget} from \"../../NoteEventSource\"\nimport {PlayfieldSequencer} from \"./Playfield/PlayfieldSequencer\"\nimport {MixProcessor} from \"./Playfield/MixProcessor\"\nimport {SampleProcessor} from \"./Playfield/SampleProcessor\"\n\nexport class PlayfieldDeviceProcessor implements DeviceProcessor, NoteEventTarget {\n readonly #terminator = new Terminator()\n readonly #adapter: PlayfieldDeviceBoxAdapter\n\n readonly #sequencer: PlayfieldSequencer\n readonly #mixProcessor: MixProcessor\n readonly #sampleSet: SortedSet<UUID.Format, {\n uuid: UUID.Format,\n processor: SampleProcessor,\n terminable: Terminable\n }>\n\n constructor(context: EngineContext, adapter: PlayfieldDeviceBoxAdapter) {\n this.#adapter = adapter\n\n this.#sequencer = this.#terminator.own(new PlayfieldSequencer(context, this))\n this.#mixProcessor = this.#terminator.own(new MixProcessor(context, this))\n this.#sampleSet = UUID.newSet(entry => entry.uuid)\n\n this.#terminator.ownAll(\n adapter.samples.catchupAndSubscribe({\n onAdd: (adapter: PlayfieldSampleBoxAdapter) => {\n const processor = new SampleProcessor(context, this, adapter, this.#mixProcessor)\n this.#sampleSet.add({\n uuid: adapter.uuid,\n processor,\n terminable: context.registerEdge(this.#sequencer, processor)\n })\n context.audioManager.getOrCreate(adapter.fileUUID()) // preloading files\n },\n onRemove: (adapter: PlayfieldSampleBoxAdapter) => {\n const {terminable, processor} = this.#sampleSet.removeByKey(adapter.uuid)\n terminable.terminate()\n processor.terminate()\n },\n onReorder: (_adapter: PlayfieldSampleBoxAdapter) => {}\n }),\n {\n terminate: () => {\n this.#sampleSet.forEach(({terminable, processor}) => {\n terminable.terminate()\n processor.terminate()\n })\n this.#sampleSet.clear()\n }\n }\n )\n }\n\n setNoteEventSource(source: NoteEventSource): Terminable {return this.#sequencer.setNoteEventSource(source)}\n\n get noteEventTarget(): Option<NoteEventTarget & DeviceProcessor> {return Option.wrap(this)}\n\n get incoming(): Processor {return this.#sequencer}\n get outgoing(): Processor {return this.#mixProcessor}\n\n optSampleProcessor(note: byte): Option<SampleProcessor> {\n return this.#adapter.samples.getAdapterByIndex(note)\n .flatMap(adapter => this.#sampleSet.opt(adapter.uuid))\n .map(entry => entry.processor)\n }\n\n hasSolo(): boolean {\n return this.#adapter.samples.adapters().some(adapter => adapter.namedParameter.solo.getValue())\n }\n\n stopExcludeOthers(exclude: PlayfieldSampleBoxAdapter): void {\n for (const adapter of this.#adapter.samples.adapters()) {\n if (adapter.exclude && adapter !== exclude) {\n this.#sampleSet.opt(adapter.uuid).ifSome(({processor}) => processor.forceStop())\n }\n }\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n get adapter(): PlayfieldDeviceBoxAdapter {return this.#adapter}\n get audioOutput(): AudioBuffer {return this.#mixProcessor.audioOutput}\n\n parameterChanged(_parameter: AutomatableParameter): void {}\n\n terminate(): void {this.#terminator.terminate()}\n\n toString(): string {return \"{PlayfieldDeviceProcessor}\"}\n}", "import {int, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {dbToGain, Ramp, StereoMatrix} from \"@opendaw/lib-dsp\"\nimport {AudioEffectDeviceBoxAdapter, StereoToolDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioEffectDeviceProcessor} from \"../../processors\"\nimport {EngineContext} from \"../../EngineContext\"\nimport {Block, Processor} from \"../../processing\"\nimport {AudioBuffer} from \"../../AudioBuffer\"\nimport {PeakBroadcaster} from \"../../PeakBroadcaster\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {AudioProcessor} from \"../../AudioProcessor\"\n\nexport class StereoToolDeviceProcessor extends AudioProcessor implements AudioEffectDeviceProcessor {\n readonly #adapter: StereoToolDeviceBoxAdapter\n readonly #output: AudioBuffer\n readonly #peaks: PeakBroadcaster\n\n readonly #matrix: Ramp.StereoMatrixRamp = Ramp.stereoMatrix(sampleRate)\n readonly #params: StereoMatrix.Params = {\n gain: 0.0,\n panning: 0.0,\n stereo: 0.0,\n invertL: false,\n invertR: false,\n swap: false\n }\n\n readonly #volume: AutomatableParameter<number>\n readonly #panning: AutomatableParameter<number>\n readonly #stereo: AutomatableParameter<number>\n readonly #invertL: AutomatableParameter<boolean>\n readonly #invertR: AutomatableParameter<boolean>\n readonly #swap: AutomatableParameter<boolean>\n\n #source: Option<AudioBuffer> = Option.None\n #mixing: StereoMatrix.Mixing = StereoMatrix.Mixing.Linear\n #needsUpdate: boolean = true\n #processed: boolean = false\n\n constructor(context: EngineContext, adapter: StereoToolDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n this.#output = new AudioBuffer()\n this.#peaks = this.own(new PeakBroadcaster(context.broadcaster, adapter.address))\n this.#volume = this.own(this.bindParameter(adapter.namedParameter.volume))\n this.#panning = this.own(this.bindParameter(adapter.namedParameter.panning))\n this.#stereo = this.own(this.bindParameter(adapter.namedParameter.stereo))\n this.#invertL = this.own(this.bindParameter(adapter.namedParameter.invertL))\n this.#invertR = this.own(this.bindParameter(adapter.namedParameter.invertR))\n this.#swap = this.own(this.bindParameter(adapter.namedParameter.swap))\n\n this.ownAll(\n adapter.box.panningMixing.catchupAndSubscribe(owner => {\n this.#mixing = owner.getValue()\n this.#needsUpdate = true\n }),\n context.registerProcessor(this)\n )\n this.readAllParameters()\n }\n\n get incoming(): Processor {return this}\n get outgoing(): Processor {return this}\n\n reset(): void {\n this.#peaks.clear()\n this.#output.clear()\n this.eventInput.clear()\n this.#processed = false\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n\n get audioOutput(): AudioBuffer {return this.#output}\n\n setAudioSource(source: AudioBuffer): Terminable {\n this.#source = Option.wrap(source)\n return {terminate: () => this.#source = Option.None}\n }\n\n index(): int {return this.#adapter.indexField.getValue()}\n adapter(): AudioEffectDeviceBoxAdapter {return this.#adapter}\n\n processAudio(_block: Readonly<Block>, fromIndex: number, toIndex: number): void {\n if (this.#source.isEmpty()) {return}\n if (this.#needsUpdate) {\n this.#matrix.update(this.#params, this.#mixing, this.#processed)\n this.#needsUpdate = false\n }\n const source = this.#source.unwrap().channels() as StereoMatrix.Channels\n const target = this.#output.channels() as StereoMatrix.Channels\n this.#matrix.processFrames(source, target, fromIndex, toIndex)\n this.#peaks.processStereo(target, fromIndex, toIndex)\n this.#processed = true\n }\n\n parameterChanged(parameter: AutomatableParameter): void {\n switch (parameter) {\n case this.#volume:\n this.#params.gain = dbToGain(this.#volume.getValue())\n this.#needsUpdate = true\n return\n case this.#panning:\n this.#params.panning = this.#panning.getValue()\n this.#needsUpdate = true\n return\n case this.#stereo:\n this.#params.stereo = this.#stereo.getValue()\n this.#needsUpdate = true\n return\n case this.#invertL:\n this.#params.invertL = this.#invertL.getValue()\n this.#needsUpdate = true\n return\n case this.#invertR:\n this.#params.invertR = this.#invertR.getValue()\n this.#needsUpdate = true\n return\n case this.#swap:\n this.#params.swap = this.#swap.getValue()\n this.#needsUpdate = true\n return\n }\n }\n\n toString(): string {return `{${this.constructor.name}}`}\n}", "import {assert, clamp, identity, int, Objects, Option, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {Event, Groove, NoteEvent, ppqn} from \"@opendaw/lib-dsp\"\nimport {MidiEffectProcessor} from \"../../processors\"\nimport {AutomatableParameter} from \"../../AutomatableParameter\"\nimport {NoteEventSource, NoteLifecycleEvent} from \"../../NoteEventSource\"\nimport {GrooveAdapter, NoteBroadcaster, ZeitgeistDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {EventProcessor} from \"../../EventProcessor\"\nimport {Block} from \"../../processing\"\nimport {EngineContext} from \"../../EngineContext\"\n\nexport class ZeitgeistDeviceProcessor extends EventProcessor implements MidiEffectProcessor {\n readonly #adapter: ZeitgeistDeviceBoxAdapter\n\n readonly #noteBroadcaster: NoteBroadcaster\n\n #groove: Option<GrooveAdapter> = Option.None\n #source: Option<NoteEventSource> = Option.None\n\n constructor(context: EngineContext, adapter: ZeitgeistDeviceBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n\n this.#noteBroadcaster = this.own(new NoteBroadcaster(context.broadcaster, adapter.address))\n\n this.ownAll(\n adapter.box.groove.catchupAndSubscribe(pointer => {\n this.#groove.ifSome(adapter => adapter.terminate())\n this.#groove = Option.wrap(pointer.targetVertex.isEmpty()\n ? null\n : context.boxAdapters.adapterFor(pointer.targetVertex.unwrap().box, GrooveAdapter.checkType))\n }),\n Terminable.create(() => {\n this.#groove.ifSome(adapter => adapter.terminate()) // FIXME This processor does not OWN that adapter!\n this.#groove = Option.None\n }),\n context.registerProcessor(this)\n )\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n\n index(): int {return this.#adapter.indexField.getValue()}\n adapter(): ZeitgeistDeviceBoxAdapter {return this.#adapter}\n\n setNoteEventSource(source: NoteEventSource): Terminable {\n assert(this.#source.isEmpty(), \"NoteEventSource already set\")\n this.#source = Option.wrap(source)\n return Terminable.create(() => this.#source = Option.None)\n }\n\n * processNotes(from: ppqn, to: ppqn, flags: int): Generator<NoteLifecycleEvent> {\n if (this.#source.isEmpty()) {return}\n const source = this.#source.unwrap()\n const groove: Groove = this.#groove.mapOr(identity, Groove.Identity)\n for (const event of source.processNotes(groove.unwarp(from), groove.unwarp(to), flags)) {\n if (NoteLifecycleEvent.isStart(event)) {\n this.#noteBroadcaster.noteOn(event.pitch)\n } else {\n this.#noteBroadcaster.noteOff(event.pitch)\n }\n yield Objects.overwrite(event, {position: clamp(groove.warp(event.position), from, to)})\n }\n }\n\n * iterateActiveNotesAt(position: ppqn, onlyExternal: boolean): Generator<NoteEvent> {\n if (this.#source.isEmpty()) {return}\n const source = this.#source.unwrap()\n const groove: Groove = this.#groove.mapOr(identity, Groove.Identity)\n for (const event of source.iterateActiveNotesAt(groove.unwarp(position), onlyExternal)) {\n yield Objects.overwrite(event, {position: groove.warp(event.position)})\n }\n }\n\n reset(): void {this.eventInput.clear()}\n\n parameterChanged(_parameter: AutomatableParameter): void {}\n\n handleEvent(_block: Readonly<Block>, _event: Event): void {}\n processEvents(_block: Readonly<Block>, _from: number, _to: number): void {}\n}\n", "import {AudioEffectDeviceProcessor, InstrumentDeviceProcessor, MidiEffectProcessor} from \"./processors\"\nimport {\n ArpeggioDeviceBox,\n AudioBusBox,\n BoxVisitor,\n DelayDeviceBox,\n ModularDeviceBox,\n NanoDeviceBox,\n PitchDeviceBox,\n PlayfieldDeviceBox,\n RevampDeviceBox,\n ReverbDeviceBox,\n StereoToolDeviceBox,\n TapeDeviceBox,\n VaporisateurDeviceBox,\n ZeitgeistDeviceBox\n} from \"@opendaw/studio-boxes\"\nimport {DelayDeviceProcessor} from \"./devices/audio-effects/DelayDeviceProcessor\"\nimport {DelayDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {NopDeviceProcessor} from \"./devices/audio-effects/NopDeviceProcessor\"\nimport {ReverbDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {RevampDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {ModularDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {asDefined, Nullish} from \"@opendaw/lib-std\"\nimport {EngineContext} from \"./EngineContext\"\nimport {Box} from \"@opendaw/lib-box\"\nimport {AudioBusProcessor} from \"./AudioBusProcessor\"\nimport {AudioBusBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {VaporisateurDeviceProcessor} from \"./devices/instruments/VaporisateurDeviceProcessor\"\nimport {TapeDeviceProcessor} from \"./devices/instruments/TapeDeviceProcessor\"\nimport {TapeDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {\n VaporisateurDeviceBoxAdapter\n} from \"@opendaw/studio-adapters\"\nimport {ArpeggioDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {ArpeggioDeviceProcessor} from \"./devices/midi-effects/ArpeggioDeviceProcessor\"\nimport {PitchDeviceProcessor} from \"./devices/midi-effects/PitchDeviceProcessor\"\nimport {PitchDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {RevampDeviceProcessor} from \"./devices/audio-effects/RevampDeviceProcessor\"\nimport {ReverbDeviceProcessor} from \"./devices/audio-effects/ReverbDeviceProcessor\"\nimport {NanoDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {NanoDeviceProcessor} from \"./devices/instruments/NanoDeviceProcessor\"\nimport {PlayfieldDeviceProcessor} from \"./devices/instruments/PlayfieldDeviceProcessor\"\nimport {PlayfieldDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {\n StereoToolDeviceBoxAdapter\n} from \"@opendaw/studio-adapters\"\nimport {StereoToolDeviceProcessor} from \"./devices/audio-effects/StereoToolDeviceProcessor\"\nimport {ZeitgeistDeviceProcessor} from \"./devices/midi-effects/ZeitgeistDeviceProcessor\"\nimport {ZeitgeistDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\n\nexport namespace InstrumentDeviceProcessorFactory {\n export const create = (context: EngineContext,\n box: Box): Nullish<InstrumentDeviceProcessor | AudioBusProcessor> =>\n box.accept<BoxVisitor<InstrumentDeviceProcessor | AudioBusProcessor>>({\n visitAudioBusBox: (box: AudioBusBox) =>\n new AudioBusProcessor(context, context.boxAdapters.adapterFor(box, AudioBusBoxAdapter)),\n visitVaporisateurDeviceBox: (box: VaporisateurDeviceBox) =>\n new VaporisateurDeviceProcessor(context, context.boxAdapters.adapterFor(box, VaporisateurDeviceBoxAdapter)),\n visitNanoDeviceBox: (box: NanoDeviceBox) =>\n new NanoDeviceProcessor(context, context.boxAdapters.adapterFor(box, NanoDeviceBoxAdapter)),\n visitTapeDeviceBox: (box: TapeDeviceBox) =>\n new TapeDeviceProcessor(context, context.boxAdapters.adapterFor(box, TapeDeviceBoxAdapter)),\n visitPlayfieldDeviceBox: (box: PlayfieldDeviceBox) =>\n new PlayfieldDeviceProcessor(context, context.boxAdapters.adapterFor(box, PlayfieldDeviceBoxAdapter))\n })\n}\n\nexport namespace MidiEffectDeviceProcessorFactory {\n export const create = (context: EngineContext,\n box: Box): MidiEffectProcessor =>\n asDefined(box.accept<BoxVisitor<MidiEffectProcessor>>({\n visitArpeggioDeviceBox: (box: ArpeggioDeviceBox): MidiEffectProcessor =>\n new ArpeggioDeviceProcessor(context, context.boxAdapters.adapterFor(box, ArpeggioDeviceBoxAdapter)),\n visitPitchDeviceBox: (box: PitchDeviceBox): MidiEffectProcessor =>\n new PitchDeviceProcessor(context, context.boxAdapters.adapterFor(box, PitchDeviceBoxAdapter)),\n visitZeitgeistDeviceBox: (box: ZeitgeistDeviceBox): MidiEffectProcessor =>\n new ZeitgeistDeviceProcessor(context, context.boxAdapters.adapterFor(box, ZeitgeistDeviceBoxAdapter))\n }), `Could not create midi-effect for'${box.name}'`)\n}\n\nexport namespace AudioEffectDeviceProcessorFactory {\n export const create = (context: EngineContext,\n box: Box): AudioEffectDeviceProcessor =>\n asDefined(box.accept<BoxVisitor<AudioEffectDeviceProcessor>>({\n visitStereoToolDeviceBox: (box: StereoToolDeviceBox): AudioEffectDeviceProcessor =>\n new StereoToolDeviceProcessor(context, context.boxAdapters.adapterFor(box, StereoToolDeviceBoxAdapter)),\n visitDelayDeviceBox: (box: DelayDeviceBox): AudioEffectDeviceProcessor =>\n new DelayDeviceProcessor(context, context.boxAdapters.adapterFor(box, DelayDeviceBoxAdapter)),\n visitReverbDeviceBox: (box: ReverbDeviceBox): AudioEffectDeviceProcessor =>\n new ReverbDeviceProcessor(context, context.boxAdapters.adapterFor(box, ReverbDeviceBoxAdapter)),\n visitRevampDeviceBox: (box: RevampDeviceBox): AudioEffectDeviceProcessor =>\n new RevampDeviceProcessor(context, context.boxAdapters.adapterFor(box, RevampDeviceBoxAdapter)),\n visitModularDeviceBox: (box: ModularDeviceBox): AudioEffectDeviceProcessor =>\n new NopDeviceProcessor(context, context.boxAdapters.adapterFor(box, ModularDeviceBoxAdapter))\n }), `Could not create audio-effect for'${box.name}'`)\n}", "import {EngineContext} from \"./EngineContext\"\nimport {AudioInput, Block, Processor} from \"./processing\"\nimport {Option, Terminable} from \"@opendaw/lib-std\"\nimport {AuxSendBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioBuffer} from \"./AudioBuffer\"\nimport {AutomatableParameter} from \"./AutomatableParameter\"\nimport {dbToGain, Ramp} from \"@opendaw/lib-dsp\"\nimport {AudioProcessor} from \"./AudioProcessor\"\n\nexport class AuxSendProcessor extends AudioProcessor implements Processor, AudioInput {\n readonly #adapter: AuxSendBoxAdapter\n\n readonly #audioOutput: AudioBuffer\n readonly #rampGainL: Ramp<number>\n readonly #rampGainR: Ramp<number>\n\n readonly #parameterSendGain: AutomatableParameter<number>\n readonly #parameterSendPan: AutomatableParameter<number>\n\n #source: Option<AudioBuffer> = Option.None\n #needsUpdate: boolean = true\n #processing: boolean = false\n\n constructor(context: EngineContext, adapter: AuxSendBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n\n this.#audioOutput = new AudioBuffer()\n this.#rampGainL = Ramp.linear(sampleRate)\n this.#rampGainR = Ramp.linear(sampleRate)\n this.#parameterSendGain = this.own(this.bindParameter(adapter.sendGain))\n this.#parameterSendPan = this.own(this.bindParameter(adapter.sendPan))\n\n this.own(context.registerProcessor(this))\n this.readAllParameters()\n }\n\n reset(): void {this.#audioOutput.clear()}\n\n get adapter(): AuxSendBoxAdapter {return this.#adapter}\n\n setAudioSource(source: AudioBuffer): Terminable {\n this.#source = Option.wrap(source)\n return {terminate: () => this.#source = Option.None}\n }\n\n get audioOutput(): AudioBuffer {return this.#audioOutput}\n\n processAudio(_block: Block, fromIndex: number, toIndex: number): void {\n if (this.#source.isEmpty()) {return}\n if (this.#needsUpdate) {\n const gain = dbToGain(this.#parameterSendGain.getValue())\n const panning = this.#parameterSendPan.getValue()\n this.#rampGainL.set((1.0 - Math.max(0.0, panning)) * gain, this.#processing)\n this.#rampGainR.set((1.0 + Math.min(0.0, panning)) * gain, this.#processing)\n this.#needsUpdate = false\n }\n const outL = this.#audioOutput.getChannel(0)\n const outR = this.#audioOutput.getChannel(1)\n const source = this.#source.unwrap()\n const srcL = source.getChannel(0)\n const srcR = source.getChannel(1)\n if (this.#rampGainL.isInterpolating() || this.#rampGainR.isInterpolating()) {\n for (let i = fromIndex; i < toIndex; i++) {\n outL[i] = srcL[i] * this.#rampGainL.moveAndGet()\n outR[i] = srcR[i] * this.#rampGainR.moveAndGet()\n }\n } else {\n const gainL = this.#rampGainL.get()\n const gainR = this.#rampGainR.get()\n for (let i = fromIndex; i < toIndex; i++) {\n outL[i] = srcL[i] * gainL\n outR[i] = srcR[i] * gainR\n }\n }\n this.#processing = true\n }\n\n parameterChanged(_parameter: AutomatableParameter): void {\n this.#needsUpdate = true\n }\n}", "import {AudioInput, Block, Processor} from \"./processing\"\nimport {int, Option, Terminable} from \"@opendaw/lib-std\"\nimport {EngineContext} from \"./EngineContext\"\nimport {dbToGain, Event, Ramp, StereoMatrix} from \"@opendaw/lib-dsp\"\nimport {AudioBuffer} from \"./AudioBuffer\"\nimport {AudioUnitBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {PeakBroadcaster} from \"./PeakBroadcaster\"\nimport {AudioProcessor} from \"./AudioProcessor\"\nimport {AutomatableParameter} from \"./AutomatableParameter\"\nimport {RenderQuantum} from \"./constants\"\n\nexport class ChannelStripProcessor extends AudioProcessor implements Processor, AudioInput, Terminable {\n readonly #adapter: AudioUnitBoxAdapter\n\n readonly #audioOutput: AudioBuffer\n readonly #rawBuffer: StereoMatrix.Channels\n readonly #peaks: PeakBroadcaster\n\n readonly #parameterVolume: AutomatableParameter<number>\n readonly #parameterPanning: AutomatableParameter<number>\n readonly #parameterMute: AutomatableParameter<boolean>\n readonly #parameterSolo: AutomatableParameter<boolean>\n\n readonly #gainL: Ramp<number> = Ramp.linear(sampleRate)\n readonly #gainR: Ramp<number> = Ramp.linear(sampleRate)\n readonly #outGain: Ramp<number> = Ramp.linear(sampleRate)\n\n #source: Option<AudioBuffer> = Option.None\n\n #updateGain: boolean = true\n #processing: boolean = false\n\n constructor(context: EngineContext, adapter: AudioUnitBoxAdapter) {\n super(context)\n\n this.#adapter = adapter\n\n this.#audioOutput = new AudioBuffer()\n this.#rawBuffer = [new Float32Array(RenderQuantum), new Float32Array(RenderQuantum)]\n this.#peaks = this.own(new PeakBroadcaster(context.broadcaster, this.#adapter.address))\n\n this.#parameterVolume = this.own(this.bindParameter(this.#adapter.namedParameter.volume))\n this.#parameterPanning = this.own(this.bindParameter(this.#adapter.namedParameter.panning))\n this.#parameterMute = this.own(this.bindParameter(this.#adapter.namedParameter.mute))\n this.#parameterSolo = this.own(this.bindParameter(this.#adapter.namedParameter.solo))\n\n this.ownAll(\n context.registerProcessor(this),\n context.mixer.attachChannelStrip(this)\n )\n this.readAllParameters()\n }\n\n reset(): void {\n this.#peaks.clear()\n this.#audioOutput.clear()\n this.#rawBuffer[0].fill(0.0)\n this.#rawBuffer[1].fill(0.0)\n this.#processing = false\n }\n\n get isMute(): boolean {return this.#parameterMute.getValue()}\n get isSolo(): boolean {return this.#parameterSolo.getValue()}\n get adapter(): AudioUnitBoxAdapter {return this.#adapter}\n get audioOutput(): AudioBuffer {return this.#audioOutput}\n\n handleEvent(_event: Event): void {}\n\n processAudio(_block: Block, fromIndex: int, toIndex: int): void {\n if (this.#source.isEmpty()) {return}\n if (this.#updateGain) {\n const mixer = this.context.mixer\n mixer.updateSolo()\n const isSolo = this.isSolo || mixer.isVirtualSolo(this)\n const silent = this.isMute || (mixer.hasChannelSolo() && !isSolo && !this.#adapter.isOutput)\n const gain = dbToGain(this.#parameterVolume.getValue())\n const panning = this.#parameterPanning.getValue()\n this.#gainL.set((1.0 - Math.max(0.0, panning)) * gain, this.#processing)\n this.#gainR.set((1.0 + Math.min(0.0, panning)) * gain, this.#processing)\n this.#outGain.set(silent ? 0.0 : 1.0, this.#processing)\n this.#updateGain = false\n }\n const source = this.#source.unwrap()\n const [srcL, srcR] = source.channels()\n const [outL, outR] = this.#audioOutput.channels()\n const [rawL, rawR] = this.#rawBuffer\n if (this.#gainL.isInterpolating() || this.#gainR.isInterpolating() || this.#outGain.isInterpolating()) {\n for (let i = fromIndex; i < toIndex; i++) {\n const gain = this.#outGain.moveAndGet()\n const l = srcL[i] * this.#gainL.moveAndGet()\n const r = srcR[i] * this.#gainR.moveAndGet()\n outL[i] = l * gain\n outR[i] = r * gain\n rawL[i] = l\n rawR[i] = r\n }\n } else {\n const gainL = this.#gainL.get()\n const gainR = this.#gainR.get()\n const outGain = this.#outGain.get()\n for (let i = fromIndex; i < toIndex; i++) {\n const l = srcL[i] * gainL\n const r = srcR[i] * gainR\n rawL[i] = l\n rawR[i] = r\n outL[i] = l * outGain\n outR[i] = r * outGain\n }\n }\n this.#peaks.process(rawL, rawR, fromIndex, toIndex)\n this.#processing = true\n }\n\n finishProcess(): void {this.#audioOutput.assertSanity()}\n\n parameterChanged(parameter: AutomatableParameter): void {\n if (parameter === this.#parameterVolume) {\n this.requestGainUpdate()\n } else if (parameter === this.#parameterPanning) {\n this.requestGainUpdate()\n } else if (parameter === this.#parameterMute) {\n this.requestGainUpdate()\n } else if (parameter === this.#parameterSolo) {\n this.context.mixer.onChannelStripSoloChanged(this)\n }\n }\n\n requestGainUpdate(): void {this.#updateGain = true}\n\n // TODO Optimise me some day. Updating the solo like might be a bit cumbersome?\n requestSoloUpdate(): void {this.#updateGain = true}\n\n setAudioSource(source: AudioBuffer): Terminable {\n this.#source = Option.wrap(source)\n return {terminate: () => this.#source = Option.None}\n }\n\n toString(): string {return `{${this.constructor.name}}`}\n}", "import {Arrays, assert, SortedSet, Subscription, Terminator, UUID} from \"@opendaw/lib-std\"\nimport {AudioDeviceProcessor, AudioEffectDeviceProcessor} from \"./processors\"\nimport {AuxSendProcessor} from \"./AuxSendProcessor\"\nimport {ChannelStripProcessor} from \"./ChannelStripProcessor\"\nimport {AudioEffectDeviceBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioEffectDeviceProcessorFactory} from \"./DeviceProcessorFactory\"\nimport {AuxSendBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {ProcessPhase} from \"./processing\"\nimport {AudioUnit} from \"./AudioUnit\"\nimport {DeviceChain} from \"./DeviceChain\"\nimport {AudioUnitOptions} from \"./AudioUnitOptions\"\n\ntype AudioEffectDeviceEntry = {\n device: AudioEffectDeviceProcessor\n subscription: Subscription\n}\n\nexport class AudioDeviceChain implements DeviceChain {\n readonly #terminator = new Terminator()\n\n readonly #audioUnit: AudioUnit\n readonly #options: AudioUnitOptions\n\n readonly #auxSends: SortedSet<UUID.Format, AuxSendProcessor>\n readonly #channelStrip: ChannelStripProcessor\n readonly #effects: SortedSet<UUID.Format, AudioEffectDeviceEntry>\n readonly #disconnector: Terminator\n\n #orderedEffects: Array<AudioEffectDeviceProcessor> = []\n #needsWiring = false\n\n constructor(audioUnit: AudioUnit, options: AudioUnitOptions) {\n this.#audioUnit = audioUnit\n this.#options = options\n\n this.#auxSends = UUID.newSet(device => device.adapter.uuid)\n this.#channelStrip = this.#terminator.own(new ChannelStripProcessor(this.#audioUnit.context, this.#audioUnit.adapter))\n this.#effects = UUID.newSet(({device}) => device.uuid)\n this.#disconnector = this.#terminator.own(new Terminator())\n\n this.#terminator.ownAll(\n this.#audioUnit.adapter.audioEffects.catchupAndSubscribe({\n onAdd: (adapter: AudioEffectDeviceBoxAdapter) => {\n this.invalidateWiring()\n const device = AudioEffectDeviceProcessorFactory.create(this.#audioUnit.context, adapter.box)\n const added = this.#effects.add({\n device, subscription: device.adapter().enabledField.subscribe(() => this.invalidateWiring())\n })\n assert(added, \"Could not add.\")\n },\n onRemove: (adapter: AudioEffectDeviceBoxAdapter) => {\n this.invalidateWiring()\n const {device, subscription} = this.#effects.removeByKey(adapter.uuid)\n subscription.terminate()\n device.terminate()\n },\n onReorder: (_adapter: AudioEffectDeviceBoxAdapter) => this.invalidateWiring()\n }),\n this.#audioUnit.adapter.auxSends.catchupAndSubscribe({\n onAdd: (adapter: AuxSendBoxAdapter) => {\n this.invalidateWiring()\n const added = this.#auxSends.add(new AuxSendProcessor(this.#audioUnit.context, adapter))\n assert(added, \"Could not add.\")\n },\n onRemove: ({uuid}: AuxSendBoxAdapter) => {\n this.invalidateWiring()\n this.#auxSends.removeByKey(uuid).terminate()\n },\n onReorder: (_adapter: AuxSendBoxAdapter) => {/*The index has no effect on the audio processing*/}\n }),\n this.#audioUnit.adapter.output.catchupAndSubscribe(_owner => this.invalidateWiring()),\n this.#audioUnit.context.subscribeProcessPhase(phase => {\n if (phase === ProcessPhase.Before && this.#needsWiring) {\n this.#wire()\n this.#needsWiring = false\n }\n })\n )\n }\n\n get channelStrip(): ChannelStripProcessor {return this.#channelStrip}\n\n invalidateWiring(): void {\n this.#disconnector.terminate()\n this.#needsWiring = true\n }\n\n terminate(): void {\n this.#terminator.terminate()\n this.#effects.forEach(({device}) => device.terminate())\n this.#effects.clear()\n this.#orderedEffects = []\n }\n\n toString(): string {return `{${this.constructor.name}}`}\n\n #wire(): void {\n const isOutputUnit = this.#audioUnit.adapter.isOutput\n const context = this.#audioUnit.context\n const optInput = this.#audioUnit.input()\n const optOutput = this.#audioUnit.adapter.output.adapter.map(adapter =>\n context.getAudioUnit(adapter.deviceHost().uuid).inputAsAudioBus())\n if (optInput.isEmpty() || (optOutput.isEmpty() && !isOutputUnit)) {return}\n let source: AudioDeviceProcessor = optInput.unwrap()\n if (this.#options.includeAudioEffects) {\n Arrays.replace(this.#orderedEffects, this.#audioUnit.adapter.audioEffects\n .adapters().map(({uuid}) => this.#effects.get(uuid).device))\n for (const target of this.#orderedEffects) {\n if (target.adapter().enabledField.getValue()) {\n this.#disconnector.own(target.setAudioSource(source.audioOutput))\n this.#disconnector.own(context.registerEdge(source.outgoing, target.incoming))\n source = target\n }\n }\n }\n if (this.#options.includeSends) {\n // Connect with aux sends (pre-mode) TODO Post-Mode\n this.#auxSends.forEach(auxSend => {\n const target = context.getAudioUnit(auxSend.adapter.targetBus.deviceHost().uuid)\n this.#disconnector.own(auxSend.setAudioSource(source.audioOutput))\n this.#disconnector.own(target.inputAsAudioBus().addAudioSource(auxSend.audioOutput))\n this.#disconnector.own(context.registerEdge(source.outgoing, auxSend))\n this.#disconnector.own(context.registerEdge(auxSend, target.inputAsAudioBus()))\n })\n }\n this.#disconnector.own(this.#channelStrip.setAudioSource(source.audioOutput))\n this.#disconnector.own(context.registerEdge(source.outgoing, this.#channelStrip))\n if (optOutput.nonEmpty() && !isOutputUnit) {\n const audioBus = optOutput.unwrap()\n this.#disconnector.own(audioBus.addAudioSource(this.#channelStrip.audioOutput))\n this.#disconnector.own(context.registerEdge(this.#channelStrip, audioBus))\n }\n }\n}", "import {EngineContext} from \"./EngineContext\"\nimport {TrackType} from \"@opendaw/studio-adapters\"\nimport {EventSpanRetainer, LoopableRegion, NoteEvent, ppqn} from \"@opendaw/lib-dsp\"\nimport {\n Bits,\n byte,\n clamp,\n Id,\n int,\n isInstanceOf,\n Option,\n quantizeFloor,\n Random,\n Terminable,\n Terminator,\n unitValue,\n UUID\n} from \"@opendaw/lib-std\"\nimport {NoteClipBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {\n NoteEventCollectionBoxAdapter\n} from \"@opendaw/studio-adapters\"\nimport {NoteRegionBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {AudioUnitBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {TrackBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {NoteCompleteEvent, NoteEventSource, NoteLifecycleEvent} from \"./NoteEventSource\"\nimport {BlockFlag, ProcessPhase} from \"./processing\"\nimport {NoteBroadcaster} from \"@opendaw/studio-adapters\"\n\ntype ExternalNote = {\n readonly pitch: byte\n readonly velocity: unitValue\n\n gate: boolean\n running: Option<Id<NoteEvent>>\n}\n\nexport class NoteSequencer implements NoteEventSource, Terminable {\n readonly #terminator = new Terminator()\n readonly #context: EngineContext\n readonly #adapter: AudioUnitBoxAdapter\n\n readonly #noteBroadcaster: NoteBroadcaster\n readonly #random: Random\n readonly #externalNotes: Set<ExternalNote>\n readonly #retainer: EventSpanRetainer<Id<NoteEvent>>\n\n constructor(context: EngineContext, adapter: AudioUnitBoxAdapter) {\n this.#context = context\n this.#adapter = adapter\n\n this.#noteBroadcaster = this.#terminator.own(new NoteBroadcaster(context.broadcaster, adapter.address))\n this.#random = Random.create(0xFFFF123)\n this.#externalNotes = new Set<ExternalNote>()\n this.#retainer = new EventSpanRetainer<Id<NoteEvent>>()\n\n this.#terminator.ownAll(\n this.#context.subscribeProcessPhase((phase: ProcessPhase) => {\n if (phase === ProcessPhase.After) {\n for (const note of this.#externalNotes) {\n if (!note.gate) {this.#externalNotes.delete(note)}\n }\n }\n })\n )\n }\n\n get uuid(): UUID.Format {return this.#adapter.uuid}\n\n terminate(): void {this.#terminator.terminate()}\n\n pushRawNoteOn(pitch: byte, velocity: unitValue): void {\n this.#externalNotes.add({pitch, velocity, gate: true, running: Option.None})\n }\n\n pushRawNoteOff(pitch: byte): void {\n for (const entry of this.#externalNotes) {\n if (entry.running.isEmpty()) {\n // never started\n this.#externalNotes.delete(entry)\n } else if (entry.pitch === pitch) {\n entry.gate = false\n return\n }\n }\n }\n\n * processNotes(from: ppqn, to: ppqn, flags: int): Generator<NoteLifecycleEvent> {\n const read = Bits.every(flags, BlockFlag.transporting | BlockFlag.playing)\n if (this.#retainer.nonEmpty()) {\n const releaseAll = !read || Bits.every(flags, BlockFlag.discontinuous)\n if (releaseAll) {\n yield* this.#releaseAll(from)\n } else {\n yield* this.#releasecompleted(from, to)\n }\n }\n if (this.#externalNotes.size > 0) {\n for (const note of this.#externalNotes) {\n if (note.running.isEmpty()) {\n const {pitch, velocity} = note\n const duration = Number.POSITIVE_INFINITY\n const event = NoteLifecycleEvent.start(from, duration, pitch, velocity)\n note.running = Option.wrap(event)\n yield event\n }\n if (!note.gate) {\n this.#externalNotes.delete(note)\n yield NoteLifecycleEvent.stop(note.running.unwrap(\"raw note never started\"), from)\n }\n }\n }\n if (read) {\n const tracks = this.#adapter.tracks.collection.adapters()\n .filter(adapter => adapter.type === TrackType.Notes && adapter.enabled.getValue())\n for (const track of tracks) {\n for (const {\n optClip,\n sectionFrom,\n sectionTo\n } of this.#context.clipSequencing.iterate(track.uuid, from, to)) {\n if (optClip.isEmpty()) {\n yield* this.#processRegions(track, sectionFrom, sectionTo)\n } else {\n yield* this.#processClip(optClip.unwrap() as NoteClipBoxAdapter, sectionFrom, sectionTo)\n }\n }\n }\n yield* this.#releasecompleted(from, to) // in case they complete in the same block\n }\n }\n\n * iterateActiveNotesAt(position: ppqn, onlyEnternal: boolean): Generator<NoteEvent> {\n if (this.#externalNotes.size > 0) {\n for (const {pitch, velocity} of this.#externalNotes) {\n yield {\n type: \"note-event\",\n position,\n duration: Number.POSITIVE_INFINITY,\n pitch,\n velocity,\n cent: 0.0\n }\n }\n }\n if (onlyEnternal) {return}\n yield* this.#retainer.overlapping(position, NoteEvent.Comparator)\n }\n\n reset(): void {\n this.#retainer.clear()\n this.#externalNotes.clear()\n }\n\n toString(): string {return `{${this.constructor.name}}`}\n\n * #processClip(clip: NoteClipBoxAdapter, p0: ppqn, p1: ppqn): Generator<Id<NoteEvent>> {\n if (clip.optCollection.isEmpty()) {return}\n const collection = clip.optCollection.unwrap()\n const clipDuration = clip.duration\n const clipStart = quantizeFloor(p0, clipDuration)\n const clipEnd = clipStart + clipDuration\n if (p1 > clipEnd) {\n yield* this.#processCollection(collection, p0, clipEnd, clipStart)\n yield* this.#processCollection(collection, clipEnd, p1, clipEnd)\n } else {\n yield* this.#processCollection(collection, p0, p1, clipStart)\n }\n }\n\n * #processRegions(trackBoxAdapter: TrackBoxAdapter, p0: ppqn, p1: ppqn): Generator<Id<NoteEvent>> {\n for (const region of trackBoxAdapter.regions.collection.iterateRange(p0, p1)) {\n if (region.mute || !isInstanceOf(region, NoteRegionBoxAdapter)) {continue}\n const optCollection = region.optCollection\n if (optCollection.isEmpty()) {continue}\n const collection = optCollection.unwrap()\n for (const {resultStart, resultEnd, rawStart} of LoopableRegion.locateLoops(region, p0, p1)) {\n yield* this.#processCollection(collection, resultStart, resultEnd, rawStart)\n }\n }\n }\n\n * #processCollection(collection: NoteEventCollectionBoxAdapter, start: ppqn, end: ppqn, delta: ppqn): Generator<Id<NoteEvent>> {\n const localStart = start - delta\n const localEnd = end - delta\n for (const source of collection.events.iterateRange(localStart - collection.maxDuration, localEnd)) {\n if (!NoteEvent.isOfType(source)) {continue}\n const {position, duration, chance, playCount, playCurve} = source\n if (chance < 100.0 && this.#random.nextDouble(0.0, 100.0) > chance) {continue}\n if (playCount > 1) {\n const searchStart = NoteEvent.inverseCurveFunc((localStart - position) / duration, playCurve)\n const searchLimit = NoteEvent.inverseCurveFunc((localEnd - position) / duration, playCurve)\n let searchIndex = Math.floor(searchStart * playCount)\n let searchPosition = searchIndex / playCount\n while (searchPosition < searchLimit) {\n if (searchPosition >= searchStart) {\n const a = NoteEvent.curveFunc(searchPosition, playCurve) * duration\n if (a >= duration) {break}\n const b = NoteEvent.curveFunc((searchPosition + 1.0 / playCount), playCurve) * duration\n const event: Id<NoteEvent> = NoteLifecycleEvent.startWith(source, position + a + delta, b - a)\n this.#retainer.addAndRetain({...event})\n this.#noteBroadcaster.noteOn(event.pitch)\n yield event\n }\n searchPosition = ++searchIndex / playCount\n }\n } else {\n if (localStart <= position && position < localEnd) {\n const event: Id<NoteEvent> = NoteLifecycleEvent.startWith(source, position + delta)\n this.#retainer.addAndRetain({...event})\n this.#noteBroadcaster.noteOn(event.pitch)\n yield event\n }\n }\n }\n }\n\n * #releaseAll(from: ppqn): Generator<NoteCompleteEvent> {\n for (const event of this.#retainer.releaseAll()) {\n this.#noteBroadcaster.noteOff(event.pitch)\n yield NoteLifecycleEvent.stop(event, from)\n }\n }\n\n * #releasecompleted(from: ppqn, to: ppqn): Generator<NoteCompleteEvent> {\n for (const event of this.#retainer.releaseLinearCompleted(to)) {\n this.#noteBroadcaster.noteOff(event.pitch)\n // We need to clamp the value in case the time-domain has been changed between note-start and note-complete\n const position = clamp(event.position + event.duration, from, to)\n yield NoteLifecycleEvent.stop(event, position)\n }\n }\n}", "import {assert, SortedSet, Subscription, Terminator, UUID} from \"@opendaw/lib-std\"\nimport {MidiEffectProcessor} from \"./processors\"\nimport {NoteSequencer} from \"./NoteSequencer\"\nimport {ProcessPhase} from \"./processing\"\nimport {AudioUnit} from \"./AudioUnit\"\nimport {DeviceChain} from \"./DeviceChain\"\nimport {MidiEffectDeviceAdapter} from \"@opendaw/studio-adapters\"\nimport {MidiEffectDeviceProcessorFactory} from \"./DeviceProcessorFactory\"\nimport {NoteEventSource} from \"./NoteEventSource\"\n\ntype MidiEffectDeviceEntry = {\n device: MidiEffectProcessor\n subscription: Subscription\n}\n\nexport class MidiDeviceChain implements DeviceChain {\n readonly #terminator = new Terminator()\n\n readonly #audioUnit: AudioUnit\n\n readonly #noteSequencer: NoteSequencer\n readonly #effects: SortedSet<UUID.Format, MidiEffectDeviceEntry>\n\n readonly #disconnector: Terminator\n\n #needsWiring = false\n\n constructor(audioUnit: AudioUnit) {\n this.#audioUnit = audioUnit\n\n this.#noteSequencer = this.#terminator.own(new NoteSequencer(this.#audioUnit.context, this.#audioUnit.adapter))\n this.#effects = UUID.newSet(({device}) => device.uuid)\n this.#disconnector = this.#terminator.own(new Terminator())\n\n this.#terminator.ownAll(\n this.#audioUnit.adapter.midiEffects.catchupAndSubscribe({\n onAdd: (adapter: MidiEffectDeviceAdapter) => {\n this.invalidateWiring()\n const device = MidiEffectDeviceProcessorFactory.create(this.#audioUnit.context, adapter.box)\n const added = this.#effects.add({\n device, subscription: device.adapter().enabledField.subscribe(() => this.invalidateWiring())\n })\n assert(added, \"Could not add.\")\n },\n onRemove: (adapter: MidiEffectDeviceAdapter) => {\n this.invalidateWiring()\n const {device, subscription} = this.#effects.removeByKey(adapter.uuid)\n subscription.terminate()\n device.terminate()\n },\n onReorder: (_adapter: MidiEffectDeviceAdapter) => this.invalidateWiring()\n }),\n this.#audioUnit.context.subscribeProcessPhase(phase => {\n if (phase === ProcessPhase.Before && this.#needsWiring) {\n this.#wire()\n this.#needsWiring = false\n }\n })\n )\n }\n\n get noteSequencer(): NoteSequencer {return this.#noteSequencer}\n\n invalidateWiring(): void {\n this.#disconnector.terminate()\n this.#needsWiring = true\n }\n\n terminate() {this.#terminator.terminate()}\n\n toString(): string {return `{${this.constructor.name}}`}\n\n #wire(): void {\n const optInput = this.#audioUnit.input().flatMap(unit => unit.noteEventTarget)\n if (optInput.isEmpty()) {return}\n const input = optInput.unwrap()\n let source: NoteEventSource = this.#noteSequencer\n this.#audioUnit.adapter.midiEffects.adapters()\n .map(adapter => this.#effects.get(adapter.uuid).device)\n .forEach((target: MidiEffectProcessor) => {\n if (target.adapter().enabledField.getValue()) {\n this.#disconnector.ownAll(\n target.setNoteEventSource(source),\n // Makes sure, automation is applied before the actual instrument\n // This is really ugly, but I won't refactor this now and just move on...\n this.#audioUnit.context.registerEdge(target, input.incoming)\n )\n source = target\n }\n })\n this.#disconnector.own(input.setNoteEventSource(source))\n }\n}", "import {AudioUnitBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {EngineContext} from \"./EngineContext\"\nimport {InstrumentDeviceProcessor} from \"./processors\"\nimport {asInstanceOf, int, Option, Terminable, Terminator} from \"@opendaw/lib-std\"\nimport {InstrumentDeviceProcessorFactory} from \"./DeviceProcessorFactory\"\nimport {AudioBusProcessor} from \"./AudioBusProcessor\"\nimport {AudioBuffer} from \"./AudioBuffer\"\nimport {AudioDeviceChain} from \"./AudioDeviceChain\"\nimport {MidiDeviceChain} from \"./MidiDeviceChain\"\nimport {AudioUnitOptions} from \"./AudioUnitOptions\"\nimport {AudioUnitInputAdapter} from \"@opendaw/studio-adapters\"\n\nexport class AudioUnit implements Terminable {\n static ID: int = 0 | 0\n\n readonly #id: int = AudioUnit.ID++\n\n readonly #terminator = new Terminator()\n\n readonly #context: EngineContext\n readonly #adapter: AudioUnitBoxAdapter\n\n readonly #midiDeviceChain: MidiDeviceChain\n readonly #audioDeviceChain: AudioDeviceChain\n\n #input: Option<InstrumentDeviceProcessor | AudioBusProcessor> = Option.None\n\n constructor(context: EngineContext, adapter: AudioUnitBoxAdapter, options: AudioUnitOptions) {\n this.#context = context\n this.#adapter = adapter\n\n this.#midiDeviceChain = this.#terminator.own(new MidiDeviceChain(this))\n this.#audioDeviceChain = this.#terminator.own(new AudioDeviceChain(this, options))\n\n this.#terminator.ownAll(\n this.#adapter.input.catchupAndSubscribe(owner => {\n this.#midiDeviceChain.invalidateWiring()\n this.#audioDeviceChain.invalidateWiring()\n this.#input.ifSome(input => input.terminate())\n this.#input = owner.getValue().flatMap((input: AudioUnitInputAdapter) =>\n Option.wrap(InstrumentDeviceProcessorFactory.create(context, input.box.box)))\n })\n )\n }\n\n input(): Option<InstrumentDeviceProcessor | AudioBusProcessor> {return this.#input}\n inputAsAudioBus(): AudioBusProcessor {return asInstanceOf(this.#input.unwrap(\"No input available\"), AudioBusProcessor)}\n audioOutput(): AudioBuffer {return this.#audioDeviceChain.channelStrip.audioOutput}\n\n get midiDeviceChain(): MidiDeviceChain {return this.#midiDeviceChain}\n get audioDeviceChain(): AudioDeviceChain {return this.#audioDeviceChain}\n get context(): EngineContext {return this.#context}\n get adapter(): AudioUnitBoxAdapter {return this.#adapter}\n\n terminate(): void {\n console.debug(`terminate ${this}`)\n this.#terminator.terminate()\n this.#input.ifSome(input => input.terminate())\n this.#input = Option.None\n }\n\n toString(): string {return `{${this.constructor.name}(${this.#id})}`}\n}", "import {ChannelStripProcessor} from \"./ChannelStripProcessor\"\nimport {asDefined, SortedSet, Terminable, UUID} from \"@opendaw/lib-std\"\nimport {Pointers} from \"@opendaw/studio-enums\"\nimport {AudioUnitBox, AuxSendBox, BoxVisitor} from \"@opendaw/studio-boxes\"\n\nexport class Mixer {\n readonly #channelStrips: SortedSet<UUID.Format, ChannelStripProcessor>\n readonly #solo: Set<ChannelStripProcessor>\n readonly #virtualSolo: Set<ChannelStripProcessor>\n\n #needsUpdate: boolean = false\n\n constructor() {\n this.#channelStrips = UUID.newSet(processor => processor.adapter.uuid)\n this.#solo = new Set<ChannelStripProcessor>()\n this.#virtualSolo = new Set<ChannelStripProcessor>()\n }\n\n attachChannelStrip(channelStrip: ChannelStripProcessor): Terminable {\n this.#channelStrips.add(channelStrip)\n return Terminable.many(\n channelStrip.adapter.input.subscribe(() => this.#requestUpdateSolo()),\n channelStrip.adapter.output.subscribe(() => this.#requestUpdateSolo()),\n {\n terminate: () => {\n this.#solo.delete(channelStrip)\n this.#channelStrips.removeByValue(channelStrip)\n this.#requestUpdateSolo()\n }\n }\n )\n }\n\n onChannelStripSoloChanged(channelStrip: ChannelStripProcessor): void {\n if (channelStrip.isSolo) {\n this.#solo.add(channelStrip)\n } else {\n this.#solo.delete(channelStrip)\n }\n this.#requestUpdateSolo()\n }\n\n hasChannelSolo() {return this.#solo.size > 0}\n\n isVirtualSolo(channelStrip: ChannelStripProcessor): boolean {\n return this.#virtualSolo.has(channelStrip)\n }\n\n #requestUpdateSolo(): void {\n if (this.#needsUpdate) {return}\n this.#needsUpdate = true\n this.#channelStrips.forEach(channelStrip => channelStrip.requestSoloUpdate())\n }\n\n // called by Channelstrip when moving on\n updateSolo(): void {\n if (!this.#needsUpdate) {return}\n this.#virtualSolo.clear()\n const touched = new Set<ChannelStripProcessor>()\n const visitChannelStrip = (channelStrip: ChannelStripProcessor) => {\n if (touched.has(channelStrip)) {return}\n touched.add(channelStrip)\n channelStrip.adapter.input.getValue().ifSome(input => {\n if (input.type === \"bus\") {\n input.box.input.pointerHub\n .filter(Pointers.AudioOutput)\n .map(pointer => asDefined(pointer.box.accept<BoxVisitor<ChannelStripProcessor>>({\n visitAudioUnitBox: ({address: {uuid}}: AudioUnitBox) =>\n this.#channelStrips.get(uuid),\n visitAuxSendBox: ({audioUnit: {targetVertex}}: AuxSendBox) =>\n this.#channelStrips.get(targetVertex.unwrap().address.uuid)\n }), \"Could not resolve channel-strip\"))\n .forEach(channelStrip => {\n if (!channelStrip.isSolo) {this.#virtualSolo.add(channelStrip)}\n visitChannelStrip(channelStrip)\n })\n }\n })\n }\n this.#channelStrips.forEach((channelStrip) => {if (channelStrip.isSolo) {visitChannelStrip(channelStrip)}})\n this.#needsUpdate = false\n }\n}", "// noinspection PlatformDetectionJS\nexport var Browser;\n(function (Browser) {\n const hasLocation = typeof self !== \"undefined\" && \"location\" in self && typeof self.location !== undefined;\n const hasNavigator = typeof self !== \"undefined\" && \"navigator\" in self && typeof self.navigator !== undefined;\n Browser.isLocalHost = () => hasLocation && location.host.includes(\"localhost\");\n Browser.isMacOS = () => hasNavigator && navigator.userAgent.includes(\"Mac OS X\");\n Browser.isWindows = () => hasNavigator && navigator.userAgent.includes(\"Windows\");\n Browser.isFirefox = () => hasNavigator && navigator.userAgent.toLowerCase().includes(\"firefox\");\n Browser.isWeb = () => !Browser.isTauriApp();\n Browser.isTauriApp = () => \"__TAURI__\" in window;\n Browser.userAgent = hasNavigator ? navigator.userAgent\n .replace(/^Mozilla\\/[\\d.]+\\s*/, \"\")\n .replace(/\\bAppleWebKit\\/[\\d.]+\\s*/g, \"\")\n .replace(/\\(KHTML, like Gecko\\)\\s*/g, \"\")\n .replace(/\\bSafari\\/[\\d.]+\\s*/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim() : \"N/A\";\n})(Browser || (Browser = {}));\n", "export var Compression;\n(function (Compression) {\n Compression.encode = async (buffer, format = \"gzip\") => {\n const stream = new CompressionStream(format);\n const writer = stream.writable.getWriter();\n writer.write(new Uint8Array(buffer));\n writer.close();\n return new Response(stream.readable).arrayBuffer();\n };\n Compression.decode = async (buffer, format = \"gzip\") => {\n const stream = new DecompressionStream(format);\n const writer = stream.writable.getWriter();\n writer.write(new Uint8Array(buffer));\n writer.close();\n return new Response(stream.readable).arrayBuffer();\n };\n})(Compression || (Compression = {}));\n", "import { DefaultObservableValue, EmptyProcedure } from \"@opendaw/lib-std\";\nexport var ConsoleCommands;\n(function (ConsoleCommands) {\n ConsoleCommands.exportMethod = (path, callback) => store(path, { value: callback });\n ConsoleCommands.exportBoolean = (path, init = false) => {\n const observableValue = new DefaultObservableValue(init);\n ConsoleCommands.exportAccessor(path, () => observableValue.getValue(), input => {\n const value = Boolean(input);\n console.debug(`set to ${value}`);\n observableValue.setValue(value);\n });\n return observableValue;\n };\n ConsoleCommands.exportAccessor = (path, getter, setter = EmptyProcedure) => store(path, {\n get: () => {\n try {\n console.debug(getter());\n return 0;\n }\n catch (error) {\n console.error(error);\n return 1;\n }\n },\n set: (value) => {\n try {\n setter(value);\n return getter();\n }\n catch (error) {\n console.error(error);\n return 1;\n }\n },\n enumerable: false,\n configurable: false\n });\n const global = (() => { try {\n return self;\n }\n catch (_) {\n return {};\n } })();\n const scope = (global[\"opendaw\"] ??= {});\n const store = (path, attributes) => {\n const levels = path.split(\".\");\n const name = levels.splice(-1)[0];\n let current = scope;\n for (const level of levels) {\n current = (current[level] ??= {});\n }\n Object.defineProperty(current, name, attributes);\n console.debug(`Console command 'opendaw.${path}' exported`);\n };\n})(ConsoleCommands || (ConsoleCommands = {}));\n", "const ellipsis = \"\u2026\";\nexport var Context2d;\n(function (Context2d) {\n Context2d.truncateText = (context, text, maxWidth) => {\n if (text.length === 0) {\n return { text: \"\", width: 0 };\n }\n let width = context.measureText(text).width;\n if (width <= maxWidth) {\n return { text, width };\n }\n const ellipseWidth = context.measureText(ellipsis).width;\n let l = 0 | 0;\n let r = text.length | 0;\n while (l < r) {\n const mid = (r + l) >>> 1;\n width = context.measureText(text.substring(0, mid + 1)).width + ellipseWidth;\n if (width <= maxWidth) {\n l = mid + 1;\n }\n else {\n r = mid;\n }\n }\n if (l === 0) {\n return { text: \"\", width: 0 };\n }\n const result = text.substring(0, l);\n return { text: result + ellipsis, width: context.measureText(result).width + ellipseWidth };\n };\n})(Context2d || (Context2d = {}));\n", "import { panic } from \"@opendaw/lib-std\";\nexport var CssUtils;\n(function (CssUtils) {\n CssUtils.calc = (term, size, em) => {\n const regex = /([0-9]*\\.?[0-9]+)([a-zA-Z%]*)/g;\n let result = term;\n result.split(/\\+|(?<!\\d)-/)\n .flatMap(result => Array.from(result.matchAll(regex)))\n .forEach(([replace, digits, unit]) => {\n const number = parseFloat(digits);\n if (isNaN(number)) {\n return panic(`${replace} does not contain a number`);\n }\n if (unit === \"em\") {\n result = result.replaceAll(replace, `${number * em}`);\n }\n else if (unit === \"%\") {\n result = result.replaceAll(replace, `${number / 100.0 * size}`);\n }\n else if (unit === \"px\") {\n result = result.replaceAll(replace, `${number}`);\n }\n else {\n return panic(`Unknown unit '${unit}'`);\n }\n });\n return Function(`return ${result}`)();\n };\n const customCursors = new Map();\n CssUtils.registerCustomCursor = (identifier, data) => customCursors.set(identifier, data);\n CssUtils.setCursor = (identifier, doc = document) => {\n doc.documentElement.style.cursor = typeof identifier === \"number\"\n ? customCursors.get(identifier) ?? \"auto\"\n : identifier;\n };\n})(CssUtils || (CssUtils = {}));\n", "export var AnimationFrame;\n(function (AnimationFrame) {\n const nonrecurring = new Set();\n const recurring = new Set();\n const queue = new Array();\n let id = -1;\n AnimationFrame.add = (exec) => {\n recurring.add(exec);\n return { terminate: () => recurring.delete(exec) };\n };\n AnimationFrame.once = (exec) => { nonrecurring.add(exec); };\n AnimationFrame.start = () => {\n console.debug(\"AnimationFrame start\");\n const exe = () => {\n if (recurring.size > 0 || nonrecurring.size > 0) {\n recurring.forEach((exec) => queue.push(exec));\n nonrecurring.forEach((exec) => queue.push(exec));\n nonrecurring.clear();\n queue.forEach((exec) => exec());\n queue.length = 0;\n }\n id = requestAnimationFrame(exe);\n };\n id = requestAnimationFrame(exe);\n };\n AnimationFrame.terminate = () => {\n console.debug(\"AnimationFrame terminate\");\n nonrecurring.clear();\n recurring.clear();\n queue.length = 0;\n cancelAnimationFrame(id);\n };\n})(AnimationFrame || (AnimationFrame = {}));\nexport const deferNextFrame = (exec) => new DeferExec(exec);\nexport class DeferExec {\n #exec;\n #requested = false;\n #disabled = false;\n constructor(exec) { this.#exec = exec; }\n request = () => {\n if (this.#requested || this.#disabled) {\n return;\n }\n this.#requested = true;\n AnimationFrame.once(this.#fire);\n };\n immediate = () => {\n if (this.#disabled) {\n return;\n }\n this.#requested = true;\n this.#fire();\n };\n cancel() { this.#requested = false; }\n terminate() { this.#disabled = true; }\n #fire = () => {\n if (this.#disabled || !this.#requested) {\n return;\n }\n this.#requested = false;\n this.#exec();\n };\n}\n", "import { isDefined } from \"@opendaw/lib-std\";\nexport class Events {\n static subscribe(eventTarget, type, listener, options) {\n eventTarget.addEventListener(type, listener, options);\n return { terminate: () => eventTarget.removeEventListener(type, listener, options) };\n }\n static subscribeAny(eventTarget, type, listener, options) {\n eventTarget.addEventListener(type, listener, options);\n return { terminate: () => eventTarget.removeEventListener(type, listener, options) };\n }\n static DOUBLE_DOWN_THRESHOLD = 200;\n static subscribeDblDwn = (eventTarget, listener) => {\n let lastDownTime = 0.0;\n return this.subscribe(eventTarget, \"pointerdown\", event => {\n const now = performance.now();\n if (now - lastDownTime < this.DOUBLE_DOWN_THRESHOLD) {\n listener(event);\n }\n lastDownTime = now;\n }, { capture: true });\n };\n static PreventDefault = event => event.preventDefault();\n static isTextInput = (target) => target instanceof HTMLInputElement\n || target instanceof HTMLTextAreaElement\n || (target instanceof HTMLElement && isDefined(target.getAttribute(\"contenteditable\")));\n}\n", "import { Browser } from \"./browser\";\nimport { Events } from \"./events\";\nexport var Keyboard;\n(function (Keyboard) {\n Keyboard.isControlKey = ({ ctrlKey, metaKey }) => Browser.isMacOS() ? metaKey : ctrlKey;\n Keyboard.isCopyKey = ({ altKey }) => altKey;\n Keyboard.GlobalShortcut = Object.freeze({\n isDelete: (event) => !Events.isTextInput(event.target) && (event.code === \"Delete\" || event.code === \"Backspace\"),\n isSelectAll: (event) => Keyboard.isControlKey(event) && !event.shiftKey && event.code === \"KeyA\",\n isDeselectAll: (event) => Keyboard.isControlKey(event) && event.shiftKey && event.code === \"KeyA\"\n });\n})(Keyboard || (Keyboard = {}));\n", "import { Terminable, Terminator } from \"@opendaw/lib-std\";\nimport { Browser } from \"./browser\";\nimport { AnimationFrame } from \"./frames\";\nimport { Events } from \"./events\";\nimport { Keyboard } from \"./keyboard\";\nexport var Dragging;\n(function (Dragging) {\n Dragging.attach = (target, factory, options) => {\n const processCycle = new Terminator();\n return Terminable.many(processCycle, Events.subscribe(target, \"pointerdown\", (event) => {\n if (options?.multiTouch !== true && !event.isPrimary) {\n return;\n }\n if (event.buttons !== 1 || (Browser.isMacOS() && event.ctrlKey)) {\n return;\n }\n const option = factory(event);\n if (option.isEmpty()) {\n return;\n }\n const process = option.unwrap();\n const pointerId = event.pointerId;\n event.stopPropagation();\n event.stopImmediatePropagation();\n target.setPointerCapture(pointerId);\n const moveEvent = {\n clientX: event.clientX,\n clientY: event.clientY,\n altKey: event.altKey,\n shiftKey: event.shiftKey,\n ctrlKey: Keyboard.isControlKey(event)\n };\n if (options?.immediate === true) {\n process.update(moveEvent);\n }\n if (options?.permanentUpdates === true) {\n processCycle.own(AnimationFrame.add(() => process.update(moveEvent)));\n processCycle.own(Events.subscribe(target, \"pointermove\", (event) => {\n if (event.pointerId === pointerId) {\n moveEvent.clientX = event.clientX;\n moveEvent.clientY = event.clientY;\n moveEvent.altKey = event.altKey;\n moveEvent.shiftKey = event.shiftKey;\n moveEvent.ctrlKey = Keyboard.isControlKey(event);\n }\n }));\n }\n else {\n processCycle.own(Events.subscribe(target, \"pointermove\", (event) => {\n if (event.pointerId === pointerId) {\n moveEvent.clientX = event.clientX;\n moveEvent.clientY = event.clientY;\n moveEvent.altKey = event.altKey;\n moveEvent.shiftKey = event.shiftKey;\n moveEvent.ctrlKey = Keyboard.isControlKey(event);\n process.update(moveEvent);\n }\n }));\n }\n const cancel = () => {\n process.cancel?.call(process);\n process.finally?.call(process);\n processCycle.terminate();\n };\n processCycle.ownAll(Events.subscribe(target, \"pointerup\", (event) => {\n if (event.pointerId === pointerId) {\n process.approve?.call(process);\n process.finally?.call(process);\n processCycle.terminate();\n }\n }, { capture: true }), Events.subscribe(target, \"pointercancel\", (event) => {\n console.debug(event.type);\n if (event.pointerId === pointerId) {\n target.releasePointerCapture(pointerId);\n cancel();\n }\n }, { capture: true }), Events.subscribe(self, \"beforeunload\", (_event) => {\n // Workaround for Chrome (does not release or cancel pointer)\n target.releasePointerCapture(pointerId);\n cancel();\n }, { capture: true }), Events.subscribe(window, \"keydown\", (event) => {\n moveEvent.altKey = event.altKey;\n moveEvent.shiftKey = event.shiftKey;\n moveEvent.ctrlKey = Keyboard.isControlKey(event);\n if (event.key === \"Escape\") {\n cancel();\n }\n else {\n process.update(moveEvent);\n }\n }), Events.subscribe(window, \"keyup\", (event) => {\n moveEvent.altKey = event.altKey;\n moveEvent.shiftKey = event.shiftKey;\n moveEvent.ctrlKey = Keyboard.isControlKey(event);\n process.update(moveEvent);\n }));\n if (process.abortSignal) {\n processCycle.own(Events.subscribe(process.abortSignal, \"abort\", () => {\n target.releasePointerCapture(pointerId);\n cancel();\n }));\n }\n }));\n };\n})(Dragging || (Dragging = {}));\n", "export var Errors;\n(function (Errors) {\n Errors.AbortError = typeof DOMException === \"undefined\"\n ? NaN : Object.freeze(new DOMException(\"AbortError\"));\n Errors.isAbort = (error) => error === Errors.AbortError || (error instanceof DOMException && error.name === \"AbortError\");\n})(Errors || (Errors = {}));\n", "import { Arrays, asDefined, isDefined } from \"@opendaw/lib-std\";\nimport { Promises } from \"@opendaw/lib-runtime\";\nexport var Files;\n(function (Files) {\n Files.save = async (arrayBuffer, options) => {\n if (isDefined(window.showSaveFilePicker)) {\n const handle = await window.showSaveFilePicker(options);\n const writable = await handle.createWritable();\n await writable.truncate(0);\n await writable.write(arrayBuffer);\n await writable.close();\n return handle.name ?? \"unknown\";\n }\n else {\n const blob = new Blob([arrayBuffer]);\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = options?.suggestedName ?? `unknown`;\n anchor.click();\n URL.revokeObjectURL(url);\n return options?.suggestedName ?? \"Unknown\";\n }\n };\n Files.open = async (options) => {\n if (isDefined(window.showOpenFilePicker)) {\n const { status, value: fileHandles, error } = await Promises.tryCatch(window.showOpenFilePicker(options));\n if (status === \"rejected\") {\n return Promise.reject(error);\n }\n return Promise.all(fileHandles.map(fileHandle => fileHandle.getFile()));\n }\n else {\n return new Promise((resolve, reject) => {\n if (isDefined(options)) {\n console.warn(\"FileApi.showOpenFilePicker is emulated in this browser. OpenFilePickerOptions are ignored.\");\n }\n const fileInput = document.createElement(\"input\");\n fileInput.type = \"file\";\n fileInput.multiple = options?.multiple ?? false;\n fileInput.style.display = \"none\";\n fileInput.addEventListener(\"cancel\", async () => {\n fileInput.remove();\n reject(new DOMException(\"cancel\", \"AbortError\"));\n });\n fileInput.addEventListener(\"change\", async (event) => {\n const target = event.target;\n const files = target.files;\n if (isDefined(files)) {\n resolve(Arrays.create(index => asDefined(files.item(index), `No file at index ${index}`), files.length));\n }\n else {\n reject(new DOMException(\"cancel\", \"AbortError\"));\n }\n fileInput.remove();\n });\n document.body.appendChild(fileInput);\n fileInput.click();\n });\n }\n };\n})(Files || (Files = {}));\n", "import { asDefined, assert, Color, isDefined, panic, Rect } from \"@opendaw/lib-std\";\nexport var Html;\n(function (Html) {\n Html.parse = (source) => {\n const template = document.createElement(\"div\");\n template.innerHTML = source;\n if (template.childElementCount !== 1) {\n return panic(`Source html has more than one root elements: '${source}'`);\n }\n const child = template.firstChild;\n return child instanceof HTMLElement || child instanceof SVGSVGElement\n ? child\n : panic(`Cannot parse to HTMLOrSVGElement from '${source}'`);\n };\n Html.empty = (element) => { while (element.firstChild !== null) {\n element.firstChild.remove();\n } };\n Html.replace = (element, ...elements) => {\n Html.empty(element);\n element.append(...elements);\n };\n Html.query = (selectors, parent = document) => asDefined(parent.querySelector(selectors));\n Html.queryAll = (selectors, parent = document) => Array.from(parent.querySelectorAll(selectors));\n Html.nextID = (() => {\n let id = 0 | 0;\n return () => (++id).toString(16).padStart(4, \"0\");\n })();\n Html.adoptStyleSheet = (classDefinition, prefix) => {\n assert(classDefinition.includes(\"component\"), `No 'component' found in: ${classDefinition}`);\n const className = `${prefix ?? \"C\"}${Html.nextID()}`;\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(classDefinition.replaceAll(\"component\", `.${className}`));\n if (sheet.cssRules.length === 0) {\n return panic(`No cssRules found in: ${classDefinition}`);\n }\n document.adoptedStyleSheets.push(sheet);\n return className;\n };\n // Allows conditional accumulation of classNames\n Html.buildClassList = (...input) => input.filter(x => x !== false && x !== undefined).join(\" \");\n Html.readCssVarColor = (...cssValues) => {\n const element = document.createElement(\"div\");\n document.body.appendChild(element);\n const colors = cssValues.map(value => {\n element.style.color = value;\n return Color.parseCssRgbOrRgba(getComputedStyle(element).color);\n });\n element.remove();\n return colors;\n };\n Html.watchResize = (target, callback, options) => {\n const observer = new ResizeObserver(([first], observer) => callback(first, observer));\n observer.observe(target, options);\n return { terminate: () => observer.disconnect() };\n };\n Html.watchIntersection = (target, callback, options) => {\n const observer = new IntersectionObserver(callback, options);\n observer.observe(target);\n return { terminate: () => observer.disconnect() };\n };\n // handles cases like 'display: contents', where the bounding box is always empty, although the children have dimensions\n Html.secureBoundingBox = (element) => {\n let elemRect = element.getBoundingClientRect();\n if (!Rect.isEmpty(elemRect)) {\n return elemRect;\n }\n for (const child of element.children) {\n Rect.union(elemRect, Html.secureBoundingBox(child));\n }\n return elemRect;\n };\n Html.unfocus = (owner = self) => {\n const element = owner.document.activeElement;\n if (element !== null && \"blur\" in element && typeof element.blur === \"function\") {\n element.blur();\n }\n };\n Html.selectContent = (element) => {\n const range = document.createRange();\n const selection = window.getSelection();\n if (isDefined(selection)) {\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n };\n Html.unselectContent = (element) => {\n const selection = window.getSelection();\n if (!isDefined(selection) || selection.rangeCount === 0) {\n return;\n }\n if (element.contains(selection.getRangeAt(0).commonAncestorContainer)) {\n selection.removeAllRanges();\n }\n };\n Html.limitChars = (element, property, limit) => {\n if (!(property in element))\n return panic(`${property} not found in ${element}`);\n if (typeof element[property] !== \"string\")\n return panic(`${property} in ${element} is not a string`);\n if (element[property].length > limit) {\n element[property] = element[property].substring(0, limit);\n if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n element.setSelectionRange(limit, limit);\n }\n else {\n const document = element.ownerDocument;\n const range = document.createRange();\n const selection = document.defaultView?.getSelection();\n if (!isDefined(selection)) {\n return;\n }\n range.selectNodeContents(element);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n };\n Html.EmptyGif = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\";\n})(Html || (Html = {}));\n", "import { Browser } from \"./browser\";\nexport const ModfierKeys = (() => {\n const Mac = { Cmd: \"\u2318\", Opt: \"\u2325\", Shift: \"\u21E7\" };\n const Win = { Cmd: \"Ctrl\", Opt: \"Alt\", Shift: \"\u21E7\" };\n return Object.freeze({ Mac, Win, System: Browser.isMacOS() ? Mac : Win });\n})();\n", "export var Stream;\n(function (Stream) {\n Stream.read = async (reader) => {\n const chunks = [];\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n chunks.push(value);\n }\n const length = chunks.reduce((acc, val) => acc + val.length, 0);\n const output = new Uint8Array(length);\n let position = 0 | 0;\n for (let chunk of chunks) {\n output.set(chunk, position);\n position += chunk.length;\n }\n return output.buffer;\n };\n})(Stream || (Stream = {}));\n", "export var Svg;\n(function (Svg) {\n Svg.pathBuilder = () => new class {\n #d = \"\";\n moveTo(x, y) {\n this.#d += `M${x.toFixed(3)} ${y.toFixed(3)}`;\n return this;\n }\n lineTo(x, y) {\n this.#d += `L${x.toFixed(3)} ${y.toFixed(3)}`;\n return this;\n }\n quadratic(x1, y1, x, y) {\n this.#d += `Q${x1.toFixed(3)} ${y1.toFixed(3)} ${x.toFixed(3)} ${y.toFixed(3)}`;\n return this;\n }\n quadraticTo(x, y) {\n this.#d += `T${x.toFixed(3)} ${y.toFixed(3)}`;\n return this;\n }\n cubic(x1, y1, x2, y2, x, y) {\n this.#d += `Q${x1.toFixed(3)} ${y1.toFixed(3)} ${x2.toFixed(3)} ${y2.toFixed(3)} ${x.toFixed(3)} ${y.toFixed(3)}`;\n return this;\n }\n arc(rx, ry, deg, largeArc, sweep, x, y) {\n this.#d += `A${rx} ${ry} ${deg} ${largeArc ? 1 : 0} ${sweep ? 1 : 0} ${x.toFixed(3)} ${y.toFixed(3)}`;\n return this;\n }\n circleSegment(cx, cy, radius, a0, a1) {\n const x0 = cx + Math.cos(a0) * radius;\n const y0 = cy + Math.sin(a0) * radius;\n const x1 = cx + Math.cos(a1) * radius;\n const y1 = cy + Math.sin(a1) * radius;\n let range = a1 - a0;\n while (range < 0.0)\n range += Math.PI * 2.0;\n return this.moveTo(x0, y0).arc(radius, radius, 0, range > Math.PI, true, x1, y1);\n }\n close() {\n this.#d += \"Z\";\n return this;\n }\n get() { return this.#d; }\n };\n})(Svg || (Svg = {}));\n", "export var TerminatorUtils;\n(function (TerminatorUtils) {\n const weakRefs = new Array();\n /**\n * Terminates if the key is no longer referenced to.\n * Make sure that the Terminable does not include other references\n * that would prevent the key from being gc collected.\n * That means the key must not appear in the Terminable!\n * @param key WeakKey\n * @param subscribe Sends a WeakRef to be able to be gc collected\n */\n TerminatorUtils.watchWeak = (key, subscribe) => {\n const weakRef = new WeakRef(key);\n const terminable = subscribe(weakRef);\n weakRefs.push([weakRef, terminable]);\n if (weakRefs.length === 1) {\n startWatchWeak();\n }\n return key;\n };\n const startWatchWeak = () => {\n console.debug(\"start weak watching\");\n const id = setInterval(() => {\n let index = weakRefs.length;\n while (--index >= 0) {\n const entry = weakRefs[index];\n if (entry[0].deref() === undefined) {\n entry[1].terminate();\n weakRefs.splice(index, 1);\n if (weakRefs.length === 0) {\n console.debug(\"stop weak watching\");\n clearInterval(id);\n }\n }\n }\n }, 1000);\n };\n})(TerminatorUtils || (TerminatorUtils = {}));\n", "const key = Symbol.for(\"@openDAW/lib-dom\");\nif (globalThis[key]) {\n console.debug(`%c${key.description}%c is already available in ${globalThis.constructor.name}.`, \"color: hsl(10, 83%, 60%)\", \"color: inherit\");\n}\nelse {\n globalThis[key] = true;\n console.debug(`%c${key.description}%c is now available in ${globalThis.constructor.name}.`, \"color: hsl(200, 83%, 60%)\", \"color: inherit\");\n}\nexport * from \"./browser\";\nexport * from \"./compression\";\nexport * from \"./console-commands\";\nexport * from \"./context-2d\";\nexport * from \"./css-utils\";\nexport * from \"./dragging\";\nexport * from \"./events\";\nexport * from \"./errors\";\nexport * from \"./files\";\nexport * from \"./fonts\";\nexport * from \"./frames\";\nexport * from \"./html\";\nexport * from \"./keyboard\";\nexport * from \"./modfier-keys\";\nexport * from \"./stream\";\nexport * from \"./svg\";\nexport * from \"./terminable\";\n", "export var PackageType;\n(function (PackageType) {\n PackageType[PackageType[\"Float\"] = 0] = \"Float\";\n PackageType[PackageType[\"FloatArray\"] = 1] = \"FloatArray\";\n PackageType[PackageType[\"Integer\"] = 2] = \"Integer\";\n PackageType[PackageType[\"IntegerArray\"] = 3] = \"IntegerArray\";\n PackageType[PackageType[\"ByteArray\"] = 4] = \"ByteArray\";\n})(PackageType || (PackageType = {}));\n", "export var Lock;\n(function (Lock) {\n Lock[Lock[\"WRITE\"] = 0] = \"WRITE\";\n Lock[Lock[\"READ\"] = 1] = \"READ\";\n})(Lock || (Lock = {}));\n", "export var Flags;\n(function (Flags) {\n Flags[Flags[\"ID\"] = 15793935] = \"ID\";\n Flags[Flags[\"START\"] = 15790320] = \"START\";\n Flags[Flags[\"END\"] = 986895] = \"END\";\n})(Flags || (Flags = {}));\n", "import { Arrays, assert, ByteArrayOutput, nextPowOf2, Option } from \"@opendaw/lib-std\";\nimport { Communicator } from \"@opendaw/lib-runtime\";\nimport { Lock } from \"./Lock\";\nimport { PackageType } from \"./PackageType\";\nimport { Flags } from \"./Flags\";\nexport class LiveStreamBroadcaster {\n static create(messenger, name) {\n return new LiveStreamBroadcaster(messenger.channel(name));\n }\n #packages = [];\n #lock = new SharedArrayBuffer(1);\n #lockArray = new Int8Array(this.#lock);\n #sender;\n #output = ByteArrayOutput.create(0);\n #sabOption = Option.None;\n #availableUpdate = Option.None;\n #version = -1;\n #capacity = -1;\n #invalid = false;\n #lockShared = false;\n constructor(messenger) {\n this.#sender = Communicator.sender(messenger, ({ dispatchAndForget }) => new class {\n sendShareLock(lock) { dispatchAndForget(this.sendShareLock, lock); }\n sendUpdateData(buffer) { dispatchAndForget(this.sendUpdateData, buffer); }\n sendUpdateStructure(buffer) { dispatchAndForget(this.sendUpdateStructure, buffer); }\n });\n }\n flush() {\n const update = this.#updateAvailable();\n if (update.nonEmpty()) {\n if (!this.#lockShared) {\n this.#sender.sendShareLock(this.#lock);\n this.#lockShared = true;\n }\n this.#sender.sendUpdateStructure(update.unwrap());\n let capacity = this.#computeCapacity();\n if (this.#output.remaining < capacity) {\n const size = nextPowOf2(capacity);\n const data = new SharedArrayBuffer(size);\n this.#output = ByteArrayOutput.use(data);\n this.#sabOption = Option.wrap(data);\n this.#sender.sendUpdateData(data);\n }\n }\n if (this.#sabOption.isEmpty()) {\n return;\n }\n // If main-thread is not interested, no data will ever be sent again, since it will not set the lock to CAN_WRITE.\n // No lock is necessary since the other side skips reading until we set the lock to CAN_READ.\n if (Atomics.load(this.#lockArray, 0) === Lock.WRITE) {\n this.#flushData(this.#output);\n this.#output.position = 0;\n Atomics.store(this.#lockArray, 0, Lock.READ);\n }\n }\n broadcastFloat(address, provider) {\n return this.#storeChunk(new class {\n type = PackageType.Float;\n address = address;\n capacity = 8;\n put(output) { output.writeFloat(provider()); }\n });\n }\n broadcastInteger(address, provider) {\n return this.#storeChunk(new class {\n type = PackageType.Integer;\n address = address;\n capacity = 8;\n put(output) { output.writeInt(provider()); }\n });\n }\n broadcastFloats(address, values, update) {\n return this.#storeChunk(new class {\n type = PackageType.FloatArray;\n address = address;\n capacity = 4 + (values.byteLength << 2);\n put(output) {\n update();\n output.writeInt(values.length);\n for (const value of values) {\n output.writeFloat(value);\n }\n }\n });\n }\n broadcastIntegers(address, values, update) {\n return this.#storeChunk(new class {\n type = PackageType.IntegerArray;\n address = address;\n capacity = 4 + (values.byteLength << 2);\n put(output) {\n update();\n output.writeInt(values.length);\n for (const value of values) {\n output.writeInt(value);\n }\n }\n });\n }\n broadcastByteArray(address, values, update) {\n return this.#storeChunk(new class {\n type = PackageType.ByteArray;\n address = address;\n capacity = 4 + values.byteLength;\n put(output) {\n update();\n output.writeInt(values.byteLength);\n output.writeBytes(values);\n }\n });\n }\n #updateAvailable() {\n if (this.#invalid) {\n try {\n this.#availableUpdate = Option.wrap(this.#compileStructure());\n }\n catch (reason) {\n throw reason;\n }\n this.#invalid = false;\n }\n if (this.#availableUpdate.nonEmpty()) {\n const option = this.#availableUpdate;\n this.#availableUpdate = Option.None;\n return option;\n }\n return Option.None;\n }\n #computeCapacity() {\n if (-1 === this.#capacity) {\n this.#capacity = this.#sumRequiredCapacity() + 12;\n }\n return this.#capacity;\n }\n terminate() {\n Arrays.clear(this.#packages);\n this.#availableUpdate = Option.None;\n this.#invalid = false;\n this.#capacity = 0;\n }\n #flushData(output) {\n assert(!this.#invalid && this.#availableUpdate.isEmpty(), \"Cannot flush while update is available\");\n let requiredCapacity = this.#computeCapacity();\n assert(output.remaining >= requiredCapacity, \"Insufficient data\");\n output.writeInt(this.#version);\n output.writeInt(Flags.START);\n for (const pack of this.#packages) {\n pack.put(output);\n }\n output.writeInt(Flags.END);\n }\n #sumRequiredCapacity() {\n return this.#packages.reduce((sum, pack) => sum + pack.capacity, 0);\n }\n #storeChunk(pack) {\n this.#packages.push(pack);\n this.#invalidate();\n return {\n terminate: () => {\n Arrays.removeOpt(this.#packages, pack);\n this.#invalidate();\n }\n };\n }\n #invalidate() {\n this.#capacity = -1;\n this.#invalid = true;\n }\n #compileStructure() {\n const output = ByteArrayOutput.create();\n output.writeInt(Flags.ID);\n output.writeInt(++this.#version);\n output.writeInt(this.#packages.length);\n for (const { address, type } of this.#packages) {\n address.write(output);\n output.writeByte(type);\n }\n return output.toArrayBuffer();\n }\n}\n", "import { Arrays, assert, ByteArrayOutput, Float16, Unhandled } from \"@opendaw/lib-std\";\nexport class Peaks {\n stages;\n data;\n numFrames;\n numChannels;\n static from(input) {\n assert(input.readString() === \"PEAKS\", \"Wrong header\");\n const numStages = input.readInt();\n const stages = [];\n for (let i = 0; i < numStages; i++) {\n const dataOffset = input.readInt();\n const numPeaks = input.readInt();\n const shift = input.readInt();\n const mask = input.readInt();\n stages[i] = new Peaks.Stage(mask, shift, numPeaks, dataOffset);\n }\n const numData = input.readInt();\n const data = [];\n for (let i = 0; i < numData; i++) {\n const array = new Int8Array(input.readInt());\n input.readBytes(array);\n data[i] = new Int32Array(array.buffer);\n }\n const numFrames = input.readInt();\n const numChannels = input.readInt();\n return new Peaks(stages, data, numFrames, numChannels);\n }\n static None = new Peaks([], [], 0, 0);\n constructor(stages, data, numFrames, numChannels) {\n this.stages = stages;\n this.data = data;\n this.numFrames = numFrames;\n this.numChannels = numChannels;\n }\n nearest(unitsPerPixel) {\n if (this.stages.length === 0) {\n return null;\n }\n const shift = Math.floor(Math.log(Math.abs(unitsPerPixel)) / Math.LN2);\n let i = this.stages.length;\n while (--i > -1) {\n if (shift >= this.stages[i].shift) {\n return this.stages[i];\n }\n }\n return this.stages[0];\n }\n toArrayBuffer() {\n const output = ByteArrayOutput.create();\n output.writeString(\"PEAKS\");\n output.writeInt(this.stages.length);\n for (let i = 0; i < this.stages.length; i++) {\n const { dataOffset, numPeaks, shift, mask } = this.stages[i];\n output.writeInt(dataOffset);\n output.writeInt(numPeaks);\n output.writeInt(shift);\n output.writeInt(mask);\n }\n output.writeInt(this.data.length);\n for (let i = 0; i < this.data.length; i++) {\n const array = new Int8Array(this.data[i].buffer);\n output.writeInt(array.length);\n output.writeBytes(array);\n }\n output.writeInt(this.numFrames);\n output.writeInt(this.numChannels);\n return output.toArrayBuffer();\n }\n toString() { return `{Peaks num-stages: ${this.stages.length}}`; }\n}\n(function (Peaks) {\n Peaks.findBestFit = (numFrames, width = 1200) => {\n const ratio = numFrames / width;\n if (ratio <= 1.0) {\n return new Uint8Array(0);\n }\n const ShiftPadding = 3;\n const maxShift = Math.floor(Math.log(ratio) / Math.LN2);\n const numStages = Math.max(1, Math.floor(maxShift / ShiftPadding));\n return new Uint8Array(Arrays.create(index => ShiftPadding * (index + 1), numStages));\n };\n class Stage {\n mask;\n shift;\n numPeaks;\n dataOffset;\n constructor(mask, shift, numPeaks, dataOffset) {\n this.mask = mask;\n this.shift = shift;\n this.numPeaks = numPeaks;\n this.dataOffset = dataOffset;\n }\n unitsEachPeak() { return 1 << this.shift; }\n }\n Peaks.Stage = Stage;\n Peaks.unpack = (bits, index) => {\n switch (index) {\n case 0:\n return Float16.intBitsToFloat(bits);\n case 1:\n return Float16.intBitsToFloat(bits >> 16);\n default:\n return Unhandled(index);\n }\n };\n})(Peaks || (Peaks = {}));\n", "import { Arrays, Float16, panic } from \"@opendaw/lib-std\";\nimport { Communicator, stopwatch } from \"@opendaw/lib-runtime\";\nimport { Peaks } from \"./Peaks\";\nexport var PeakWorker;\n(function (PeakWorker) {\n PeakWorker.install = (messenger) => Communicator.executor(messenger.channel(\"peaks\"), new class {\n async generateAsync(progress, shifts, frames, numFrames, numChannels) {\n return generatePeaks(progress, shifts, frames, numFrames, numChannels).toArrayBuffer();\n }\n });\n const generatePeaks = (progress, shifts, frames, numFrames, numChannels) => {\n if (frames.length !== numChannels) {\n return panic(`Invalid numberOfChannels. Expected: ${numChannels}. Got ${frames.length}`);\n }\n class State {\n min = Number.POSITIVE_INFINITY;\n max = Number.NEGATIVE_INFINITY;\n index = 0;\n }\n const time = stopwatch();\n const numShifts = shifts.length;\n const [stages, dataOffset] = initStages(shifts, numFrames);\n const data = Arrays.create(() => new Int32Array(dataOffset), numChannels);\n const minMask = stages[0].mask;\n const total = numChannels * numFrames;\n let count = 0;\n for (let channel = 0; channel < numChannels; ++channel) {\n const channelData = data[channel];\n const channelFrames = frames[channel];\n const states = Arrays.create(() => new State(), numShifts);\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n let position = 0;\n for (let i = 0; i < numFrames; ++i) {\n const frame = channelFrames[i];\n min = Math.min(frame, min);\n max = Math.max(frame, max);\n if ((++position & minMask) === 0) {\n for (let j = 0; j < numShifts; ++j) {\n const stage = stages[j];\n const state = states[j];\n state.min = Math.min(state.min, min);\n state.max = Math.max(state.max, max);\n if ((stage.mask & position) === 0) {\n channelData[stage.dataOffset + state.index++] = pack(state.min, state.max);\n state.min = Number.POSITIVE_INFINITY;\n state.max = Number.NEGATIVE_INFINITY;\n }\n }\n min = Number.POSITIVE_INFINITY;\n max = Number.NEGATIVE_INFINITY;\n }\n if ((++count & 0xFFFF) === 0) {\n progress(count / total);\n }\n }\n }\n progress(1.0);\n time.lab(`Peak-Gen '${self.constructor.name}'`);\n return new Peaks(stages, data, numFrames, numChannels);\n };\n const initStages = (shifts, numFrames) => {\n let dataOffset = 0;\n const stages = Arrays.create((index) => {\n const shift = shifts[index];\n const numPeaks = Math.ceil(numFrames / (1 << shift));\n const stage = new Peaks.Stage((1 << shift) - 1, shift, numPeaks, dataOffset);\n dataOffset += numPeaks;\n return stage;\n }, shifts.length);\n return [stages, dataOffset];\n };\n const pack = (f0, f1) => {\n const bits0 = Float16.floatToIntBits(f0);\n const bits1 = Float16.floatToIntBits(f1);\n return bits0 | (bits1 << 16);\n };\n})(PeakWorker || (PeakWorker = {}));\n", "import { Peaks } from \"./Peaks\";\nexport var PeaksPainter;\n(function (PeaksPainter) {\n PeaksPainter.renderBlocks = (path, peaks, channelIndex, { u0, u1, v0, v1, x0, x1, y0, y1 }) => {\n const unitsEachPixel = (u1 - u0) / (x1 - x0);\n const stage = peaks.nearest(unitsEachPixel);\n if (stage === null) {\n return;\n }\n const scale = (y1 - y0 - 1.0) / (v1 - v0);\n const unitsEachPeak = stage.unitsEachPeak();\n const pixelOverFlow = x0 - Math.floor(x0);\n const peaksEachPixel = unitsEachPixel / unitsEachPeak;\n let from = (u0 - pixelOverFlow * unitsEachPixel) / unitsEachPixel * peaksEachPixel;\n let indexFrom = Math.floor(from);\n let min = 0.0;\n let max = 0.0;\n const data = peaks.data[channelIndex];\n for (let x = Math.floor(x0); x < Math.floor(x1); x++) {\n const to = from + peaksEachPixel;\n const indexTo = Math.floor(to);\n let swap = false;\n while (indexFrom < indexTo) {\n const bits = data[stage.dataOffset + indexFrom++];\n min = Math.min(Peaks.unpack(bits, 0), min);\n max = Math.max(Peaks.unpack(bits, 1), max);\n swap = true;\n }\n const yMin = y0 + Math.floor((min - v0) * scale);\n const yMax = y0 + Math.floor((max - v0) * scale);\n const ry0 = Math.max(y0, Math.min(yMin, yMax));\n const ry1 = Math.min(y1, Math.max(yMin, yMax));\n path.fillRect(x, ry0, 1, ry1 === ry0 ? 1 : ry1 - ry0);\n if (swap) {\n const tmp = max;\n max = min;\n min = tmp;\n }\n from = to;\n indexFrom = indexTo;\n }\n };\n})(PeaksPainter || (PeaksPainter = {}));\n", "import { Arrays, asDefined } from \"@opendaw/lib-std\";\nimport { Communicator, Promises } from \"@opendaw/lib-runtime\";\nimport \"../types\";\nexport var OpfsWorker;\n(function (OpfsWorker) {\n const DEBUG = false;\n const readLimiter = new Promises.Limit(1);\n const writeLimiter = new Promises.Limit(1);\n OpfsWorker.init = (messenger) => Communicator.executor(messenger.channel(\"opfs\"), new class {\n async write(path, data) {\n if (DEBUG) {\n console.debug(`write ${data.length}b to ${path}`);\n }\n return writeLimiter.add(() => this.#resolveFile(path, { create: true })\n .then(handle => {\n handle.truncate(data.length);\n handle.write(data, { at: 0 });\n handle.flush();\n handle.close();\n }));\n }\n async read(path) {\n if (DEBUG) {\n console.debug(`read ${path}`);\n }\n return readLimiter.add(() => this.#resolveFile(path)\n .then(handle => {\n const size = handle.getSize();\n const buffer = new Uint8Array(size);\n handle.read(buffer);\n handle.close();\n return buffer;\n }));\n }\n async delete(path) {\n const segments = pathToSegments(path);\n return this.#resolveFolder(segments.slice(0, -1))\n .then(folder => folder.removeEntry(asDefined(segments.at(-1)), { recursive: true }));\n }\n async list(path) {\n const segments = pathToSegments(path);\n const { status, value: folder } = await Promises.tryCatch(this.#resolveFolder(segments));\n if (status === \"rejected\") {\n return Arrays.empty();\n }\n const result = [];\n for await (const { name, kind } of folder.values()) {\n result.push({ name, kind });\n }\n return result;\n }\n async #resolveFile(path, options) {\n const segments = pathToSegments(path);\n return this.#resolveFolder(segments.slice(0, -1), options)\n .then((folder) => folder.getFileHandle(asDefined(segments.at(-1)), options)\n .then(handle => handle.createSyncAccessHandle()));\n }\n async #resolveFolder(segments, options) {\n let folder = await navigator.storage.getDirectory();\n for (const segment of segments) {\n folder = await folder.getDirectoryHandle(segment, options);\n }\n return folder;\n }\n });\n const pathToSegments = (path) => {\n const noSlashes = path.replace(/^\\/+|\\/+$/g, \"\");\n return noSlashes === \"\" ? [] : noSlashes.split(\"/\");\n };\n})(OpfsWorker || (OpfsWorker = {}));\n", "const key = Symbol.for(\"@openDAW/lib-fusion\");\nif (globalThis[key]) {\n console.debug(`%c${key.description}%c is already available in ${globalThis.constructor.name}.`, \"color: hsl(10, 83%, 60%)\", \"color: inherit\");\n}\nelse {\n globalThis[key] = true;\n console.debug(`%c${key.description}%c is now available in ${globalThis.constructor.name}.`, \"color: hsl(200, 83%, 60%)\", \"color: inherit\");\n}\nimport './types';\nexport * from \"./live-stream/LiveStreamReceiver\";\nexport * from \"./live-stream/LiveStreamBroadcaster\";\nexport * from \"./peaks/Peaks\";\nexport * from \"./peaks/PeakWorker\";\nexport * from \"./peaks/PeakProtocol\";\nexport * from \"./peaks/PeaksPainter\";\nexport * from \"./opfs/OpfsWorker\";\nexport * from \"./opfs/OpfsProtocol\";\n", "import {BlockFlag, ProcessInfo} from \"./processing\"\nimport {PPQN} from \"@opendaw/lib-dsp\"\nimport {assert, Bits, int, TAU} from \"@opendaw/lib-std\"\nimport {RenderQuantum} from \"./constants\"\nimport {AudioBuffer} from \"./AudioBuffer\"\nimport {Fragmentor} from \"@opendaw/lib-dsp\"\n\nexport class Metronome {\n readonly #output = new AudioBuffer()\n readonly #clicks: Click[] = []\n\n constructor() {}\n\n process({blocks}: ProcessInfo): void {\n blocks.forEach(({p0, p1, bpm, s0, s1, flags}) => {\n if (Bits.every(flags, BlockFlag.transporting)) {\n for (const position of Fragmentor.iterate(p0, p1, PPQN.Quarter)) {\n assert(p0 <= position && position < p1, `${position} out of bounds (${p0}, ${p1})`)\n const distanceToEvent = Math.floor(PPQN.pulsesToSamples(position - p0, bpm, sampleRate))\n this.#clicks.push(new Click(position, s0 + distanceToEvent))\n }\n }\n this.#output.clear(s0, s1)\n for (let i = this.#clicks.length - 1; i >= 0; i--) {\n const processor = this.#clicks[i]\n if (processor.processAdd(this.#output, s0, s1)) {\n this.#clicks.splice(i, 1)\n }\n }\n })\n }\n\n get output(): AudioBuffer {return this.#output}\n}\n\nclass Click {\n readonly #frequency: number\n\n #position: int = 0 | 0\n #startIndex: int = 0 | 0\n\n constructor(timeCode: number, startIndex: int) {\n assert(startIndex >= 0 && startIndex < RenderQuantum, `${startIndex} out of bounds`)\n this.#frequency = PPQN.toParts(timeCode).beats === 0 ? 880.0 : 440.0\n this.#startIndex = startIndex\n }\n\n processAdd(buffer: AudioBuffer, start: int, end: int): boolean {\n const [l, r] = buffer.channels()\n const attack = Math.floor(0.002 * sampleRate)\n const release = Math.floor(0.050 * sampleRate)\n\n for (let index = Math.max(this.#startIndex, start); index < end; index++) {\n const env = Math.min(this.#position / attack, 1.0 - (this.#position - attack) / release)\n const amp = Math.sin(this.#position / sampleRate * TAU * this.#frequency) * 0.25 * env * env\n l[index] += amp\n r[index] += amp\n if (++this.#position > attack + release) {return true}\n }\n this.#startIndex = 0\n return false\n }\n}", "import {ppqn, PPQN} from \"@opendaw/lib-dsp\"\nimport {Block, BlockFlags, ProcessInfo} from \"./processing\"\nimport {RenderQuantum} from \"./constants\"\nimport {EngineContext} from \"./EngineContext\"\nimport {Exec, int, isDefined, Iterables, Nullable, Procedure, SetMultimap, Terminable} from \"@opendaw/lib-std\"\nimport {MarkerBoxAdapter} from \"@opendaw/studio-adapters\"\n\ntype Action = null\n | { type: \"loop\", target: ppqn }\n | { type: \"marker\", prev: MarkerBoxAdapter, next: MarkerBoxAdapter }\n | { type: \"callback\", position: ppqn, callbacks: ReadonlySet<Exec> }\n\nexport class BlockRenderer {\n readonly #context: EngineContext\n\n readonly #callbacks: SetMultimap<ppqn, Exec>\n\n #tempoChanged: boolean = false\n #currentMarker: Nullable<[MarkerBoxAdapter, int]> = null\n #someMarkersChanged: boolean = false\n #freeRunningPosition: ppqn = 0.0 // synced with timeInfo when transporting\n #playEvents: boolean = true // playing events\n\n constructor(context: EngineContext) {\n this.#context = context\n this.#context.timelineBoxAdapter.markerTrack.subscribe(() => this.#someMarkersChanged = true)\n this.#context.timelineBoxAdapter.box.bpm.subscribe(() => this.#tempoChanged = true)\n\n this.#callbacks = new SetMultimap()\n }\n\n get playEvents(): boolean {return this.#playEvents}\n set playEvents(value: boolean) {this.#playEvents = value}\n\n setCallback(position: ppqn, callback: Exec): Terminable {\n this.#callbacks.add(position, callback)\n return Terminable.create(() => this.#callbacks.remove(position, callback))\n }\n\n reset(): void {this.#currentMarker = null}\n\n process(procedure: Procedure<ProcessInfo>): void {\n let markerChanged = false\n\n const {timeInfo, timelineBoxAdapter: {box: timelineBox, markerTrack}} = this.#context\n const bpm = timelineBox.bpm.getValue()\n const transporting = timeInfo.transporting\n if (transporting) {\n const blocks: Array<Block> = []\n let p0 = timeInfo.position\n let s0: int = 0 | 0\n let index: int = 0 | 0\n let discontinuous = timeInfo.getLeapStateAndReset()\n while (s0 < RenderQuantum) {\n if (this.#someMarkersChanged || discontinuous) {\n this.#someMarkersChanged = false\n const marker = markerTrack.events.lowerEqual(p0)\n if ((this.#currentMarker?.at(0) ?? null) !== marker) {\n this.#currentMarker = isDefined(marker) ? [marker, 0] : null\n markerChanged = true\n }\n }\n const sn: int = RenderQuantum - s0\n const p1 = p0 + PPQN.samplesToPulses(sn, bpm, sampleRate)\n let action: Action = null\n let actionPosition: ppqn = Number.POSITIVE_INFINITY\n\n //\n // evaluate nearest global action\n //\n\n // --- MARKER ---\n if (markerTrack.enabled) {\n const markers = Array.from(Iterables.take(markerTrack.events.iterateFrom(p0), 2))\n if (markers.length > 0) {\n const [prev, next] = markers\n // This branch happens if all markers are in the future\n if (this.#currentMarker === null) {\n if (prev.position >= p0 && prev.position < p1) {\n action = {type: \"marker\", prev, next}\n actionPosition = prev.position\n }\n } else if (\n isDefined(next)\n && next !== this.#currentMarker[0] // must be different from the current\n && prev.position < p0 // must be in the past\n && next.position < p1 // must be inside the block\n ) {\n action = {type: \"marker\", prev, next}\n actionPosition = next.position\n }\n }\n }\n // --- LOOP SECTION ---\n const {from, to, enabled} = timelineBox.loopArea\n const loopEnabled = enabled.getValue()\n if (loopEnabled) {\n const loopTo = to.getValue()\n if (p0 < loopTo && p1 > loopTo && loopTo < actionPosition) {\n action = {type: \"loop\", target: from.getValue()}\n actionPosition = loopTo\n }\n }\n // --- ARM PLAYING ---\n if (this.#callbacks.keyCount() > 0) {\n for (const position of this.#callbacks.keys()) {\n if (p0 < position && p1 > position && position < actionPosition) {\n action = {type: \"callback\", position, callbacks: this.#callbacks.get(position)}\n actionPosition = position\n }\n }\n }\n //\n // handle action (if any)\n //\n if (action === null) {\n const s1 = s0 + sn\n blocks.push({\n index: index++, p0, p1, s0, s1, bpm,\n flags: BlockFlags.create(transporting, discontinuous, this.#playEvents, this.#tempoChanged)\n })\n discontinuous = false\n p0 = p1\n s0 = s1\n } else {\n const advanceToEvent = () => {\n if (actionPosition > p0) {\n const s1 = s0 + PPQN.pulsesToSamples(actionPosition - p0, bpm, sampleRate) | 0\n blocks.push({\n index: index++, p0, p1: actionPosition, s0, s1, bpm,\n flags: BlockFlags.create(transporting, discontinuous, this.#playEvents, this.#tempoChanged)\n })\n discontinuous = false\n p0 = actionPosition\n s0 = s1\n }\n }\n switch (action.type) {\n case \"loop\": {\n advanceToEvent()\n p0 = action.target\n discontinuous = true\n break\n }\n case \"marker\": {\n const {prev, next} = action\n if (!isDefined(this.#currentMarker) || this.#currentMarker[0] !== prev) {\n this.#currentMarker = [prev, 0]\n } else {\n if (++this.#currentMarker[1] < prev.plays || prev.plays === 0) {\n advanceToEvent()\n p0 = prev.position\n discontinuous = true\n } else {\n this.#currentMarker = [next, 0]\n }\n }\n markerChanged = true\n break\n }\n case \"callback\": {\n advanceToEvent()\n action.callbacks.forEach(callback => callback())\n break\n }\n }\n }\n this.#tempoChanged = false\n }\n procedure({blocks})\n timeInfo.advanceTo(p0)\n this.#freeRunningPosition = p0\n } else {\n if (this.#someMarkersChanged || timeInfo.getLeapStateAndReset()) {\n this.#someMarkersChanged = false\n const marker = markerTrack.events.lowerEqual(timeInfo.position)\n if (marker !== null) {\n if (this.#currentMarker?.at(0) !== marker) {\n this.#currentMarker = [marker, 0]\n markerChanged = true\n }\n }\n }\n const p0 = this.#freeRunningPosition\n const p1 = p0 + PPQN.samplesToPulses(RenderQuantum, bpm, sampleRate)\n const processInfo: ProcessInfo = {\n blocks: [{\n index: 0, p0, p1, s0: 0, s1: RenderQuantum, bpm,\n flags: BlockFlags.create(false, false, false, false)\n }]\n }\n procedure(processInfo)\n this.#freeRunningPosition = p1\n }\n if (markerChanged) {\n this.#context.engineToClient.switchMarkerState(isDefined(this.#currentMarker)\n ? [this.#currentMarker[0].uuid, this.#currentMarker[1]] : null)\n }\n }\n}", "import {Peaks} from \"@opendaw/lib-fusion\"\nimport {AudioData, SampleLoader, SampleManager, SampleLoaderState, EngineToClient} from \"@opendaw/studio-adapters\"\nimport {Observer, Option, SortedSet, Subscription, Terminable, UUID} from \"@opendaw/lib-std\"\n\nclass AudioLoaderWorklet implements SampleLoader {\n readonly peaks: Option<Peaks> = Option.None\n readonly #state: SampleLoaderState = {type: \"idle\"}\n\n #data: Option<AudioData> = Option.None\n\n constructor(readonly uuid: UUID.Format, readonly engineToClient: EngineToClient) {\n engineToClient.fetchAudio(uuid).then((data) => this.#data = Option.wrap(data))\n }\n\n get data(): Option<AudioData> {return this.#data}\n get state(): SampleLoaderState {return this.#state}\n\n subscribe(_observer: Observer<SampleLoaderState>): Subscription {return Terminable.Empty}\n}\n\nexport class AudioManagerWorklet implements SampleManager {\n readonly #engineToClient: EngineToClient\n readonly #set: SortedSet<UUID.Format, SampleLoader>\n\n constructor(engineToClient: EngineToClient) {\n this.#engineToClient = engineToClient\n this.#set = UUID.newSet<SampleLoader>(handler => handler.uuid)\n }\n\n getOrCreate(uuid: UUID.Format): SampleLoader {\n return this.#set.getOrCreate(uuid, uuid => new AudioLoaderWorklet(uuid, this.#engineToClient))\n }\n\n invalidate(_uuid: UUID.Format) {}\n}", "import {AnyClipBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {Arrays, identity, Option, quantizeFloor, SortedSet, UUID} from \"@opendaw/lib-std\"\nimport {ppqn, PPQN} from \"@opendaw/lib-dsp\"\nimport {TrackBoxAdapter} from \"@opendaw/studio-adapters\"\nimport {BoxGraph, Update} from \"@opendaw/lib-box\"\nimport {ClipSequencing, Section} from \"@opendaw/studio-adapters\"\nimport {ClipSequencingUpdates} from \"@opendaw/studio-adapters\"\n\n// Just convenient to identify which UUID is for which type\ntype ClipKey = UUID.Format\ntype TrackKey = UUID.Format\n\nclass TrackState {\n waiting: Option<Option<AnyClipBoxAdapter>> = Option.None\n playing: Option<AnyClipBoxAdapter> = Option.None\n\n constructor(readonly uuid: TrackKey) {}\n}\n\nexport class ClipSequencingAudioContext implements ClipSequencing {\n readonly #boxGraph: BoxGraph\n readonly #states: SortedSet<TrackKey, TrackState>\n\n readonly #started: Array<ClipKey> = []\n readonly #stopped: Array<ClipKey> = []\n readonly #obsolete: Array<ClipKey> = []\n\n constructor(boxGraph: BoxGraph) {\n this.#boxGraph = boxGraph\n this.#boxGraph.subscribeToAllUpdatesImmediate({\n onUpdate: (update: Update) => {\n if (update.type === \"delete\") {\n const uuid = update.uuid\n // handle track deletion\n this.#states.opt(uuid).ifSome(state => {\n state.playing.ifSome(playing => this.#onStop(playing.uuid))\n state.playing = Option.None\n state.waiting = Option.None\n })\n // handle clip deletion\n this.#states.forEach(state => {\n if (state.playing.nonEmpty() && UUID.equals(state.playing.unwrap().uuid, uuid)) {\n state.playing = Option.None\n this.#onStop(uuid)\n }\n const optWaiting = state.waiting.flatMap(identity)\n if (optWaiting.nonEmpty() && UUID.equals(optWaiting.unwrap().uuid, uuid)) {\n state.waiting = Option.None\n }\n })\n }\n }\n })\n this.#states = UUID.newSet<TrackState>(state => state.uuid)\n }\n\n schedulePlay(clipAdapter: AnyClipBoxAdapter): void {\n clipAdapter.trackBoxAdapter.ifSome(({uuid}) => {\n const trackState = this.#states.getOrCreate(uuid, uuid => new TrackState(uuid))\n if (trackState.playing.nonEmpty() && trackState.playing.unwrap() === clipAdapter) {\n console.debug(`${clipAdapter} is already playing (ignore)`)\n return\n }\n const optClip = trackState.waiting.flatMap(waiting => waiting)\n if (optClip.nonEmpty()) {\n console.debug(\"obsolete\", optClip.unwrap())\n this.#obsolete.push(optClip.unwrap().uuid)\n trackState.waiting = Option.None\n }\n console.debug(`schedulePlay(${UUID.toString(trackState.uuid)} > ${clipAdapter})`)\n Arrays.removeOpt(this.#obsolete, clipAdapter.uuid)\n trackState.waiting = Option.wrap(Option.wrap(clipAdapter))\n })\n }\n\n scheduleStop({uuid}: TrackBoxAdapter): void {\n const trackState = this.#states.getOrCreate(uuid, uuid => new TrackState(uuid))\n const optClip = trackState.waiting.flatMap(waiting => waiting)\n if (optClip.nonEmpty()) {\n console.debug(\"obsolete\", optClip.unwrap())\n this.#obsolete.push(optClip.unwrap().uuid)\n trackState.waiting = Option.None\n }\n if (trackState.playing.nonEmpty()) {\n console.debug(`scheduleStop(${UUID.toString(uuid)})`)\n trackState.waiting = Option.wrap(Option.None)\n }\n }\n\n reset(): void {\n this.#states.forEach(state => {\n state.waiting.ifSome(waiting => waiting.ifSome(clip => this.#obsolete.push(clip.uuid)))\n state.waiting = Option.None\n state.playing.ifSome(clip => this.#onStop(clip.uuid))\n state.playing = Option.None\n })\n this.#states.clear()\n }\n\n * iterate(trackKey: TrackKey, p0: ppqn, p1: ppqn): Generator<Section> {\n const state = this.#states.getOrNull(trackKey)\n if (state === null) {\n yield {optClip: Option.None, sectionFrom: p0, sectionTo: p1}\n return\n }\n if (state.waiting.nonEmpty()) {\n const optNextClip = state.waiting.unwrap()\n const scheduleDuration = state.playing.mapOr(clip => clip.duration, PPQN.Bar) // Use format values\n const scheduleEnd = quantizeFloor(p1, scheduleDuration)\n if (scheduleEnd >= p0) {\n if (p0 < scheduleEnd) {\n // process to schedule time\n yield {optClip: state.playing, sectionFrom: p0, sectionTo: scheduleEnd}\n }\n state.waiting = Option.None // clear the next pointer\n state.playing.ifSome(clip => this.#onStop(clip.uuid))\n if (optNextClip.nonEmpty()) {\n state.playing = optNextClip // play next clip\n this.#onStart(optNextClip.unwrap().uuid)\n } else {\n state.playing = Option.None // stop playing clip\n }\n yield {optClip: state.playing, sectionFrom: scheduleEnd, sectionTo: p1}\n } else {\n yield {optClip: state.playing, sectionFrom: p0, sectionTo: p1}\n }\n } else {\n if (state.playing.nonEmpty()) {\n const playing = state.playing.unwrap()\n if (playing.box.playback.loop.getValue()) {\n yield {optClip: state.playing, sectionFrom: p0, sectionTo: p1}\n } else {\n const scheduleEnd = quantizeFloor(p0, playing.duration) + playing.duration\n if (scheduleEnd <= p1) {\n yield {optClip: state.playing, sectionFrom: p0, sectionTo: scheduleEnd}\n state.playing = Option.None\n this.#onStop(playing.uuid)\n if (scheduleEnd < p1) {\n yield {optClip: Option.None, sectionFrom: scheduleEnd, sectionTo: p1}\n }\n } else {\n yield {optClip: state.playing, sectionFrom: p0, sectionTo: p1}\n }\n }\n } else {\n yield {optClip: Option.None, sectionFrom: p0, sectionTo: p1}\n }\n }\n }\n\n changes(): Option<ClipSequencingUpdates> {\n if (this.#started.length > 0 || this.#stopped.length > 0 || this.#obsolete.length > 0) {\n const changes = Option.wrap({\n started: this.#started.slice(),\n stopped: this.#stopped.slice(),\n obsolete: this.#obsolete.slice()\n })\n this.#started.length = 0\n this.#stopped.length = 0\n this.#obsolete.length = 0\n return changes\n }\n return Option.None\n }\n\n terminate(): void {\n this.#states.clear()\n this.#started.length = 0\n this.#stopped.length = 0\n this.#obsolete.length = 0\n }\n\n #onStart(clipKey: ClipKey): void {this.#started.push(clipKey)}\n #onStop(clipKey: ClipKey): void {this.#stopped.push(clipKey)}\n}", "import {ExportStemConfiguration} from \"@opendaw/studio-adapters\"\n\nexport type AudioUnitOptions = Omit<ExportStemConfiguration, \"fileName\">\n\nexport namespace AudioUnitOptions {\n export const Default: AudioUnitOptions = {includeAudioEffects: true, includeSends: true}\n}", "import {\n Arrays,\n assert,\n byte,\n EmptyExec,\n int,\n isDefined,\n Notifier,\n Nullable,\n Observer,\n Option,\n panic,\n SortedSet,\n Subscription,\n SyncStream,\n Terminable,\n Terminator,\n unitValue,\n UUID\n} from \"@opendaw/lib-std\"\nimport {Address, BoxGraph, createSyncTarget} from \"@opendaw/lib-box\"\nimport {AudioFileBox, BoxIO, BoxVisitor} from \"@opendaw/studio-boxes\"\nimport {EngineContext} from \"./EngineContext\"\nimport {TimeInfo} from \"./TimeInfo\"\nimport {\n AnyClipBoxAdapter,\n AudioData,\n SampleManager,\n AudioUnitBoxAdapter,\n BoxAdapters,\n ClipAdapters,\n ClipSequencing,\n ClipSequencingUpdates,\n EngineCommands,\n EngineProcessorOptions,\n EngineStateSchema,\n EngineToClient,\n ParameterFieldAdapters,\n ProjectDecoder,\n RootBoxAdapter,\n TimelineBoxAdapter,\n TrackBoxAdapter\n} from \"@opendaw/studio-adapters\"\nimport {AudioUnit} from \"./AudioUnit\"\nimport {Processor, ProcessPhase} from \"./processing\"\nimport {Mixer} from \"./Mixer\"\nimport {LiveStreamBroadcaster} from \"@opendaw/lib-fusion\"\nimport {UpdateClock} from \"./UpdateClock\"\nimport {PeakBroadcaster} from \"./PeakBroadcaster\"\nimport {Metronome} from \"./Metronome\"\nimport {BlockRenderer} from \"./BlockRenderer\"\nimport {Graph, PPQN, TopologicalSort} from \"@opendaw/lib-dsp\"\nimport {AudioManagerWorklet} from \"./AudioManagerWorklet\"\nimport {ClipSequencingAudioContext} from \"./ClipSequencingAudioContext\"\nimport {Communicator, Messenger} from \"@opendaw/lib-runtime\"\nimport {AudioUnitOptions} from \"./AudioUnitOptions\"\n\nconst DEBUG = false\n\nregisterProcessor(\"engine-processor\", class extends AudioWorkletProcessor implements EngineContext {\n readonly #terminator: Terminator\n readonly #messenger: Messenger\n readonly #boxGraph: BoxGraph<BoxIO.TypeMap>\n readonly #timeInfo: TimeInfo\n readonly #engineToClient: EngineToClient\n readonly #boxAdapters: BoxAdapters\n readonly #audioManager: SampleManager\n readonly #audioUnits: SortedSet<UUID.Format, AudioUnit>\n readonly #rootBoxAdapter: RootBoxAdapter\n readonly #timelineBoxAdapter: TimelineBoxAdapter\n readonly #parameterFieldAdapters: ParameterFieldAdapters\n readonly #audioGraph: Graph<Processor>\n readonly #audioGraphSorting: TopologicalSort<Processor>\n readonly #notifier: Notifier<ProcessPhase>\n readonly #mixer: Mixer\n readonly #liveStreamBroadcaster: LiveStreamBroadcaster\n readonly #clipSequencing: ClipSequencingAudioContext\n readonly #updateClock: UpdateClock\n readonly #peaks: PeakBroadcaster\n readonly #metronome: Metronome\n\n readonly #renderer: BlockRenderer\n readonly #stateSender: SyncStream.Writer\n readonly #stemExports: ReadonlyArray<AudioUnit>\n\n #processQueue: Option<ReadonlyArray<Processor>> = Option.None\n #primaryOutput: Option<AudioUnit> = Option.None\n\n #context: Option<EngineContext> = Option.None\n #panic: boolean = false\n #running: boolean = true\n\n constructor({processorOptions: {sab, project, exportConfiguration}}: {\n processorOptions: EngineProcessorOptions\n } & AudioNodeOptions) {\n super()\n\n const {boxGraph, mandatoryBoxes: {rootBox, timelineBox}} = ProjectDecoder.decode(project)\n\n this.#terminator = new Terminator()\n this.#messenger = Messenger.for(this.port)\n this.#boxGraph = boxGraph\n this.#timeInfo = new TimeInfo()\n this.#engineToClient = Communicator.sender<EngineToClient>(\n this.#messenger.channel(\"engine-to-client\"),\n dispatcher => new class implements EngineToClient {\n log(message: string): void {dispatcher.dispatchAndForget(this.log, message)}\n fetchAudio(uuid: UUID.Format): Promise<AudioData> {return dispatcher.dispatchAndReturn(this.fetchAudio, uuid)}\n notifyClipSequenceChanges(changes: ClipSequencingUpdates): void {dispatcher.dispatchAndForget(this.notifyClipSequenceChanges, changes)}\n switchMarkerState(state: Nullable<[UUID.Format, int]>): void {dispatcher.dispatchAndForget(this.switchMarkerState, state)}\n ready() {dispatcher.dispatchAndForget(this.ready)}\n })\n this.#audioManager = new AudioManagerWorklet(this.#engineToClient)\n this.#audioUnits = UUID.newSet(unit => unit.adapter.uuid)\n this.#parameterFieldAdapters = new ParameterFieldAdapters()\n this.#boxAdapters = this.#terminator.own(new BoxAdapters(this))\n this.#rootBoxAdapter = this.#boxAdapters.adapterFor(rootBox, RootBoxAdapter)\n this.#timelineBoxAdapter = this.#boxAdapters.adapterFor(timelineBox, TimelineBoxAdapter)\n this.#audioGraph = new Graph<Processor>()\n this.#audioGraphSorting = new TopologicalSort<Processor>(this.#audioGraph)\n this.#notifier = new Notifier<ProcessPhase>()\n this.#mixer = new Mixer()\n this.#metronome = new Metronome()\n this.#renderer = new BlockRenderer(this)\n this.#stateSender = SyncStream.writer(EngineStateSchema(), sab, x => {\n x.position = this.#timeInfo.position\n })\n this.#liveStreamBroadcaster = this.#terminator.own(LiveStreamBroadcaster.create(this.#messenger, \"engine-live-data\"))\n this.#updateClock = new UpdateClock(this)\n this.#peaks = this.#terminator.own(new PeakBroadcaster(this.#liveStreamBroadcaster, Address.compose(UUID.Lowest)))\n this.#clipSequencing = this.#terminator.own(new ClipSequencingAudioContext(this.#boxGraph))\n this.#terminator.ownAll(\n createSyncTarget(this.#boxGraph, this.#messenger.channel(\"engine-sync\")),\n Communicator.executor<EngineCommands>(this.#messenger.channel(\"engine-commands\"), {\n setPlaying: (value: boolean) => this.#timeInfo.transporting = value,\n setPosition: (position: number) => {this.#timeInfo.position = position},\n setRecording: (value: boolean) => {\n if (value) {\n if (this.#timeInfo.transporting) {\n // smoothly turn on recording\n } else {\n console.debug(\"COUNT-IN RECORDING...\")\n const position = this.#timeInfo.position\n const metronomeEnabled = this.#timeInfo.metronomeEnabled\n this.#timeInfo.metronomeEnabled = true\n this.#renderer.playEvents = false\n this.#timeInfo.transporting = true\n this.#timeInfo.position = position - PPQN.Bar\n const subscription = this.#renderer.setCallback(position, () => {\n console.debug(\"START RECORDING...\")\n this.#timeInfo.metronomeEnabled = metronomeEnabled\n this.#renderer.playEvents = true\n subscription.terminate()\n })\n // TODO Cancel subscription and reset, if user stops recording or changes position\n }\n } else {\n console.debug(\"STOP RECORDING\")\n }\n },\n setMetronomeEnabled: (value: boolean) => this.#timeInfo.metronomeEnabled = value,\n stopAndReset: () => {\n console.debug(\"stopAndReset\")\n this.#timeInfo.position = 0.0\n this.#timeInfo.transporting = false\n this.#renderer.reset()\n this.#clipSequencing.reset()\n this.#audioGraphSorting.sorted().forEach(processor => processor.reset())\n this.#peaks.clear()\n },\n queryLoadingComplete: (): Promise<boolean> =>\n Promise.resolve(this.#boxGraph.boxes().every(box => box.accept<BoxVisitor<boolean>>({\n visitAudioFileBox: (box: AudioFileBox) =>\n this.#audioManager.getOrCreate(box.address.uuid).data.nonEmpty() && box.pointerHub.nonEmpty()\n }) ?? true)),\n panic: () => this.#panic = true,\n noteOn: (uuid: UUID.Format, pitch: byte, velocity: unitValue) =>\n this.optAudioUnit(uuid).ifSome(unit => unit.midiDeviceChain.noteSequencer.pushRawNoteOn(pitch, velocity)),\n noteOff: (uuid: UUID.Format, pitch: byte) =>\n this.optAudioUnit(uuid).ifSome(unit => unit.midiDeviceChain.noteSequencer.pushRawNoteOff(pitch)),\n scheduleClipPlay: (clipIds: ReadonlyArray<UUID.Format>) => {\n clipIds.forEach(clipId => {\n const optClipBox = this.#boxGraph.findBox(clipId)\n if (optClipBox.isEmpty()) {\n console.warn(`Could not scheduleClipPlay. Cannot find clip: '${UUID.toString(clipId)}'`)\n } else {\n const clipAdapter: AnyClipBoxAdapter = ClipAdapters.for(this.#boxAdapters, optClipBox.unwrap())\n this.#clipSequencing.schedulePlay(clipAdapter)\n }\n })\n },\n scheduleClipStop: (trackIds: ReadonlyArray<UUID.Format>) => {\n trackIds.forEach(trackId => {\n const optClipBox = this.#boxGraph.findBox(trackId)\n if (optClipBox.isEmpty()) {\n console.warn(`Could not scheduleClipStop. Cannot find track: '${UUID.toString(trackId)}'`)\n } else {\n this.#clipSequencing.scheduleStop(this.#boxAdapters.adapterFor(optClipBox.unwrap(), TrackBoxAdapter))\n }\n })\n },\n terminate: () => {\n this.#context.ifSome(context => context.terminate())\n this.#context = Option.None\n this.#running = false\n this.#terminator.terminate()\n }\n }),\n this.#rootBoxAdapter.audioUnits.catchupAndSubscribe({\n onAdd: (adapter: AudioUnitBoxAdapter) => {\n const uuidAsString = UUID.toString(adapter.uuid)\n const options: AudioUnitOptions = isDefined(exportConfiguration?.[uuidAsString])\n ? exportConfiguration[uuidAsString]\n : AudioUnitOptions.Default\n const audioUnit = new AudioUnit(this, adapter, options)\n const added = this.#audioUnits.add(audioUnit)\n assert(added, `Could not add ${audioUnit}`)\n if (audioUnit.adapter.isOutput) {\n assert(this.#primaryOutput.isEmpty(), \"Output can only assigned once.\")\n this.#primaryOutput = Option.wrap(audioUnit)\n return\n }\n },\n onRemove: ({uuid}) => this.#audioUnits.removeByKey(uuid).terminate(),\n onReorder: EmptyExec\n })\n )\n\n this.#stemExports = Option.wrap(exportConfiguration).match({\n none: () => Arrays.empty(),\n some: configuration => Object.keys(configuration).map(uuidString => this.#audioUnits.get(UUID.parse(uuidString)))\n })\n\n this.#engineToClient.ready()\n\n // For Safari :(\n console.log = (...message: string[]) => this.#engineToClient.log(message.join(\", \"))\n }\n\n process(inputs: Float32Array[][], outputs: Float32Array[][]): boolean {\n try {\n return this.render(inputs, outputs)\n } catch (error: any) {\n this.#engineToClient.log(error)\n throw error\n }\n }\n\n render(_inputs: Float32Array[][], [output]: Float32Array[][]): boolean {\n if (!this.#running) {return false}\n if (this.#panic) {return panic(\"Manual Panic\")}\n const metronomeEnabled = this.#timeInfo.metronomeEnabled\n this.#notifier.notify(ProcessPhase.Before)\n if (this.#processQueue.isEmpty()) {\n this.#audioGraphSorting.update()\n this.#processQueue = Option.wrap(this.#audioGraphSorting.sorted().concat())\n if (DEBUG) {\n console.debug(`%cAudio-Graph%c\\n${this.#processQueue.unwrap()\n .map((x, index) => `${(index + 1)}: ${x}`).join(\"\\n\")}`, \"color: hsl(200, 83%, 60%)\", \"color: inherit\")\n }\n }\n const processors = this.#processQueue.unwrap()\n this.#renderer.process(processInfo => {\n processors.forEach(processor => processor.process(processInfo))\n if (metronomeEnabled) {this.#metronome.process(processInfo)}\n })\n if (this.#stemExports.length === 0) {\n this.#primaryOutput.unwrap().audioOutput().replaceInto(output)\n if (metronomeEnabled) {this.#metronome.output.mixInto(output)}\n this.#peaks.process(output[0], output[1])\n } else {\n this.#stemExports.forEach((unit: AudioUnit, index: int) => {\n const [l, r] = unit.audioOutput().channels()\n output[index * 2 + 0].set(l)\n output[index * 2 + 1].set(r)\n })\n }\n this.#notifier.notify(ProcessPhase.After)\n this.#clipSequencing.changes().ifSome(changes => this.#engineToClient.notifyClipSequenceChanges(changes))\n this.#stateSender.tryWrite()\n this.#liveStreamBroadcaster.flush()\n return true\n }\n\n getAudioUnit(uuid: UUID.Format): AudioUnit {return this.#audioUnits.get(uuid)}\n optAudioUnit(uuid: UUID.Format): Option<AudioUnit> {return this.#audioUnits.opt(uuid)}\n\n subscribeProcessPhase(observer: Observer<ProcessPhase>): Subscription {return this.#notifier.subscribe(observer)}\n\n registerProcessor(processor: Processor): Terminable {\n this.#audioGraph.addVertex(processor)\n this.#processQueue = Option.None\n return {\n terminate: () => {\n this.#audioGraph.removeVertex(processor)\n this.#processQueue = Option.None\n }\n }\n }\n\n registerEdge(source: Processor, target: Processor): Terminable {\n this.#audioGraph.addEdge([source, target])\n this.#processQueue = Option.None\n return {\n terminate: () => {\n this.#audioGraph.removeEdge([source, target])\n this.#processQueue = Option.None\n }\n }\n }\n\n get boxGraph(): BoxGraph<BoxIO.TypeMap> {return this.#boxGraph}\n get boxAdapters(): BoxAdapters {return this.#boxAdapters}\n get audioManager(): SampleManager {return this.#audioManager}\n get rootBoxAdapter(): RootBoxAdapter {return this.#rootBoxAdapter}\n get timelineBoxAdapter(): TimelineBoxAdapter {return this.#timelineBoxAdapter}\n get bpm(): number {return this.#timelineBoxAdapter.box.bpm.getValue()}\n get liveStreamBroadcaster(): LiveStreamBroadcaster {return this.#liveStreamBroadcaster}\n get liveStreamReceiver(): never {return panic(\"Only available in main thread\")}\n get parameterFieldAdapters(): ParameterFieldAdapters {return this.#parameterFieldAdapters}\n get clipSequencing(): ClipSequencing {return this.#clipSequencing}\n get broadcaster(): LiveStreamBroadcaster {return this.#liveStreamBroadcaster}\n get updateClock(): UpdateClock {return this.#updateClock}\n get timeInfo(): TimeInfo {return this.#timeInfo}\n get mixer(): Mixer {return this.#mixer}\n get engineToClient(): EngineToClient {return this.#engineToClient}\n get isMainThread(): boolean {return false}\n get isAudioContext(): boolean {return true}\n\n terminate(): void {\n console.debug(`terminate: ${this}`)\n this.#terminator.terminate()\n this.#audioUnits.forEach(unit => unit.terminate())\n this.#audioUnits.clear()\n }\n})"],
|
5
|
-
"mappings": "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",
|
6
|
-
"names": ["identity", "value", "isDefined", "ifDefined", "procedure", "asDefined", "fail", "panic", "isInstanceOf", "obj", "clazz", "asInstanceOf", "assertInstanceOf", "getOrProvide", "value", "safeExecute", "func", "args", "Unhandled", "empty", "panic", "issue", "assert", "condition", "fail", "getOrProvide", "InaccessibleProperty", "failMessage", "panic", "tryCatch", "statement", "error", "EmptyExec", "EmptyProcedure", "_", "Sorting", "Arrays", "#empty", "array", "newValues", "procedure", "index", "fail", "asDefined", "factory", "n", "i", "a", "b", "predicate", "first", "element", "panic", "result", "key", "seen", "value", "maxIndex", "sorting", "prev", "next", "Option", "value", "isDefined", "Some", "provider", "func", "args", "promise", "#value", "asDefined", "_", "matchable", "run", "callback", "_or", "other", "_fail", "fail", "panic", "getOrProvide", "or", "Attempts", "promise", "value", "reason", "provider", "result", "Option", "map", "matchable", "BinarySearch", "sorted", "key", "comparator", "l", "r", "m", "cmp", "map", "Bits", "set", "flag", "#numBits", "#array", "numBits", "index", "arrayIndex", "byte", "value", "was", "val", "buffer", "source", "result", "Arrays", "Cache", "#provider", "#value", "provider", "Color", "color", "colorValues", "isDefined", "value", "NumberComparator", "a", "b", "NumberArrayComparator", "n", "i", "comparison", "TAU", "PI_HALF", "PI_QUART", "INVERSE_SQRT_2", "clamp", "value", "min", "max", "squashUnit", "value", "margin", "quantizeFloor", "interval", "linear", "y1", "y2", "mu", "mod", "value", "range", "fract", "nextPowOf2", "n", "moebiusEase", "x", "h", "Curve", "slope", "steps", "y0", "y1", "x", "p", "clamp", "y", "definition", "f1", "m", "q", "walk", "i", "v", "walkNormalized", "d", "ym", "dataView", "Integer", "value", "Float", "ARRAY_BUFFER", "FLOAT_VIEW", "INT_VIEW", "result", "Float16", "bits", "sign", "val", "mantissa", "exp", "Float64", "EXP_BIT_MASK", "SIGNIFICANT_BIT_MASK", "FLOAT64_VIEW", "LONG_VIEW", "Iterables", "value", "iterable", "count", "_", "predicate", "callback", "initialValue", "accumulator", "index", "include", "procedure", "map", "iterator", "i", "fn", "result", "mapped", "isDefined", "done", "prev", "ByteArrayOutput", "_ByteArrayOutput", "initialCapacity", "buffer", "byteOffset", "#view", "#position", "view", "value", "panic", "#ensureSpace", "bytes", "i", "length", "count", "capacity", "o", "nextPowOf2", "ByteCounter", "#count", "_", "Checksum", "#result", "#cursor", "other", "index", "Float", "Float64", "Iterables", "ByteArrayInput", "read", "array", "result", "findMethodType", "descriptor", "isDefined", "panic", "Lazy", "_", "property", "context", "originalDescriptor", "value", "methodType", "element", "asDefined", "args", "Generators", "empty", "generator", "value", "done", "flatten", "generators", "Axis", "Corner", "Geom", "a", "b", "dx", "dy", "angle", "cs", "sn", "Point", "x", "y", "point", "scale", "multiplier", "object", "Rect", "rectangle", "x0", "y0", "x1", "y1", "rect", "amount", "outer", "inner", "topLeftInside", "bottomRightInside", "xMin", "xMax", "yMax", "yMin", "axis", "Unhandled", "corner", "bx", "by", "ux", "uy", "AABB", "aabb", "that", "offset", "top", "right", "bottom", "left", "Padding", "CohenSutherland", "c0", "code", "c1", "s", "sign", "x2", "y2", "ValueAxis", "value", "valueAxis", "min", "max", "clamp", "Hash", "buffers", "totalLength", "sum", "buf", "mergedArray", "offset", "buffer", "a", "b", "assert", "viewA", "viewB", "i", "Intervals", "min0", "max0", "min1", "max1", "Listeners", "#set", "#proxy", "_", "func", "args", "listener", "safeExecute", "procedure", "Maps", "map", "key", "factory", "value", "Sets", "_Sets", "#EMPTY", "ArrayMultimap", "_ArrayMultimap", "#map", "#comparator", "entries", "comparator", "Option", "array", "key", "value", "Iterables", "entry", "values", "Arrays", "Maps", "insertIndex", "BinarySearch", "index", "predicate", "removed", "removeList", "callback", "clone", "keys", "copy", "SetMultimap", "_SetMultimap", "Sets", "set", "removeSet", "Objects", "u", "v", "keys", "key", "panic", "obj", "result", "exclude", "value", "target", "patch", "Terminable", "EmptyExec", "exec", "terminables", "Terminator", "_Terminator", "#terminables", "terminable", "terminator", "Arrays", "Notifier", "observer", "observables", "Terminable", "observable", "#observers", "value", "ObservableValue", "_observer", "MutableObservableValue", "_", "observableValue", "DefaultObservableValue", "#notifier", "#guard", "Option", "#value", "guard", "Linear", "#min", "#max", "#range", "min", "max", "y", "x", "clamp", "LinearInteger", "Integer", "Exponential", "Values", "#values", "values", "index", "value", "panic", "asDefined", "Decibel", "#a", "#b", "#c", "mid", "min2", "max2", "mid2", "tmp0", "tmp1", "ValueMapping", "Bool", "Unipolar", "Bipolar", "DefaultDecibelInstance", "StringMapping", "bipolar", "fractionDigits", "Numeric", "unit", "unitPrefix", "values", "y", "x", "index", "strings", "#unit", "#fractionDigits", "#unitPrefix", "#bipolar", "value", "float", "clamp", "last", "isDefined", "prefixes", "prefix", "computePrefix", "computeBase10", "location", "Predicates", "value", "Progress", "progress", "count", "collect", "Arrays", "index", "value", "total", "Random", "seed", "Mulberry32", "target", "noise", "random", "length", "panic", "sum", "i", "value", "acc", "#seed", "min", "max", "array", "t", "Schema", "Serializer", "schema", "replace", "clone", "key", "value", "IOImpl", "input", "output", "length", "values", "i", "#schema", "#object", "#bytesTotal", "object", "#count", "collector", "data", "counter", "ByteCounter", "SortedSet", "#extractor", "#comparator", "#array", "extractor", "comparator", "value", "replace", "key", "insertIndex", "BinarySearch", "current", "isDefined", "factory", "values", "a", "b", "delta", "reason", "uniqueKeys", "panic", "deleteIndex", "candidate", "startIndex", "endIndex", "predicate", "count", "index", "#lookup", "provider", "Option", "procedure", "entry", "Arrays", "Strings", "value", "g", "fallback", "isDefined", "str", "buffer", "view", "i", "TimeSpan", "_TimeSpan", "value", "#MILLI_SECONDS_PER_SECOND", "#MILLI_SECONDS_PER_MINUTE", "#MILLI_SECONDS_PER_HOUR", "#MILLI_SECONDS_PER_DAY", "#ms", "ms", "unit", "seconds", "minutes", "hours", "days", "d", "h", "m", "#quantity", "name", "count", "Unhandled", "SyncStream", "State", "io", "buffer", "populate", "panic", "array", "output", "ByteArrayOutput", "procedure", "input", "ByteArrayInput", "UUID", "fromUint8Array", "buffer", "uuid", "input", "arr", "output", "format", "hex", "Arrays", "index", "string", "cleanUuid", "panic", "bytes", "i", "j", "a", "b", "delta", "key", "SortedSet", "value", "result", "array", "assert", "ValueGuide", "option", "isDefined", "trackLength", "DEFAULT_TRACK_LENGTH", "snapLength", "DEFAULT_SNAP_LENGTH", "thresholds", "Snap", "Identity", "#x", "#value", "#ratio", "length", "value", "delta", "assert", "clamp", "#length", "#margin", "#thresholds", "#ranges", "#enabled", "margin", "Arrays", "x", "index", "BinarySearch", "NumberComparator", "range", "threshold", "clamped", "key", "Address", "_Address", "keyExtractor", "SortedSet", "uuid", "fieldKeys", "keys", "#EMPTY_FIELD_KEYS", "assert", "value", "index", "str", "parts", "UUID", "x", "layout", "set", "id", "map", "sorted", "startIndex", "BinarySearch", "length", "endIndex", "a", "b", "compareId", "#uuid", "n", "#fieldKeys", "i", "comparison", "other", "key", "output", "array", "input", "uuidBytes", "numFields", "Arrays", "Addressable", "addressable", "address", "l", "r", "PointerHub", "_PointerHub", "pointer", "target", "Option", "type", "#vertex", "#immediateListeners", "#transactualListeners", "#inTransaction", "vertex", "Listeners", "listener", "filter", "#addFilteredListener", "added", "Address", "types", "Iterables", "pointerField", "incoming", "issue", "panic", "#onEndTransaction", "listeners", "beforeState", "afterState", "__decorate", "decorators", "target", "key", "desc", "c", "r", "d", "i", "__metadata", "k", "v", "Field", "_Field", "construct", "#parent", "#fieldKey", "#fieldName", "#pointerRules", "parent", "fieldKey", "fieldName", "pointerRules", "visitor", "safeExecute", "PointerHub", "field", "Iterables", "_key", "panic", "Option", "_input", "_output", "incoming", "pointer", "Lazy", "Address", "NoPointers", "ArrayField", "_ArrayField", "Field", "construct", "factory", "length", "#fields", "Arrays", "index", "NoPointers", "visitor", "safeExecute", "key", "asDefined", "Option", "input", "field", "output", "Serializer", "output", "fields", "entries", "key", "field", "bytes", "ByteArrayOutput", "buffer", "input", "assert", "numFields", "fieldIndex", "byteLength", "ByteArrayInput", "__decorate", "decorators", "target", "key", "desc", "c", "r", "d", "i", "__metadata", "k", "v", "Box", "_Box", "#address", "#graph", "#name", "#pointerRules", "#fields", "#creationIndex", "uuid", "graph", "name", "pointerRules", "Address", "asDefined", "Option", "propagation", "procedure", "PointerHub", "byteCounter", "ByteCounter", "input", "Serializer", "output", "ByteArrayOutput", "map", "keys", "Arrays", "parent", "result", "index", "boxes", "pointers", "x", "pointer", "box", "Lazy", "Propagation", "Dispatchers", "DispatchersImpl", "#thisDispatcher", "Dispatcher", "Addressable", "#parentDispatcher", "#childrenDispatcher", "#deferredStations", "#order", "#dispatching", "propagation", "address", "procedure", "monitor", "Monitor", "deferred", "DeferredMonitor", "target", "a", "b", "station", "Unhandled", "order", "#monitors", "#sorted", "filterStrategy", "index", "#terminator", "Terminator", "#terminated", "dispatchers", "PrimitiveType", "ValueSerialization", "output", "value", "input", "array", "PrimitiveField", "Field", "#type", "#initValue", "#value", "field", "type", "visitor", "safeExecute", "observer", "Propagation", "assert", "oldValue", "newValue", "BooleanField", "_BooleanField", "construct", "Float32Field", "_Float32Field", "Float", "Int32Field", "_Int32Field", "Integer", "StringField", "_StringField", "ByteArrayField", "_ByteArrayField", "#empty", "x", "index", "bytes", "Updates", "input", "numBlocks", "Arrays", "uuid", "UUID", "name", "settings", "NewUpdate", "address", "Address", "oldAddress", "Option", "newAddress", "PointerUpdate", "type", "serializer", "ValueSerialization", "oldValue", "newValue", "PrimitiveUpdate", "DeleteUpdate", "#uuid", "#name", "#settings", "graph", "box", "ByteArrayInput", "output", "_graph", "#address", "#serialization", "#oldValue", "#newValue", "serialization", "field", "_Unreferenceable", "PointerField", "_PointerField", "Field", "construct", "pointerType", "mandatory", "#pointerType", "#mandatory", "#targetVertex", "Option", "#targetAddress", "field", "panic", "visitor", "safeExecute", "observer", "Propagation", "vertex", "option", "issue", "PointerHub", "newValue", "oldValue", "targetAddress", "target", "address", "input", "Address", "output", "GraphEdges", "#requiresTarget", "#requiresPointer", "#incoming", "#outgoing", "Address", "source", "vertex", "isInstanceOf", "PointerField", "panic", "boxes", "map", "uuid", "#removeSameBox", "box", "outgoingLinks", "target", "incomingPointers", "sources", "Arrays", "#collectSameBox", "_", "pointers", "pointer", "assert", "set", "id", "range", "isDefined", "BoxGraph", "#boxFactory", "#boxes", "#deferredPointerUpdates", "#updateListeners", "#immediateUpdateListeners", "#transactionListeners", "#dispatchers", "#edges", "#finalizeTransactionObservers", "#inTransaction", "#constructingBox", "boxFactory", "Option", "UUID", "box", "Dispatchers", "Listeners", "GraphEdges", "assert", "observer", "pointerField", "update", "#processPointerValueUpdate", "name", "uuid", "constructor", "#assertTransaction", "isDefined", "added", "NewUpdate", "listener", "propagation", "address", "procedure", "deleted", "DeleteUpdate", "checksum", "Checksum", "field", "oldValue", "newValue", "PrimitiveUpdate", "PointerUpdate", "oldVertex", "newVertex", "boxes", "pointers", "trace", "pointer", "source", "target", "count", "verify", "vertex", "isResolved", "inGraph", "object", "dict", "dependency", "panic", "output", "ByteArrayOutput", "buffer", "arrayBuffer", "input", "ByteArrayInput", "numBoxes", "i", "length", "int8Array", "boxStream", "creationIndex", "a", "b", "ObjectField", "Field", "#fields", "construct", "visitor", "safeExecute", "key", "asDefined", "Option", "input", "Serializer", "output", "Communicator", "messenger", "bind", "Sender", "protocol", "Executor", "#messenger", "#expected", "#subscription", "#returnId", "#messageHandler", "func", "args", "Iterables", "arg", "resolve", "reject", "entries", "callbacks", "index", "message", "returns", "isDefined", "panic", "#protocol", "assert", "object", "asDefined", "returnId", "#sendCallback", "value", "#sendResolve", "reason", "#sendReject", "Fetch", "progress", "response", "length", "output", "ByteArrayOutput", "reader", "asDefined", "done", "value", "Runtime", "id", "exec", "timeout", "time", "args", "Messenger", "port", "NativeMessenger", "#port", "#notifier", "Notifier", "isDefined", "event", "message", "name", "Channel", "observer", "_Channel", "#messages", "#name", "#subscription", "messages", "data", "IntervalRetryOption", "#count", "maxRetry", "timeSpan", "reason", "exec", "Promises", "ResolveResult", "value", "InaccessibleProperty", "RejectedResult", "error", "owner", "promise", "running", "Terminable", "resolve", "reject", "call", "retryOption", "TimeSpan", "onFailure", "after", "thenUse", "use", "_", "fail", "timeout", "fn", "lastPromise", "arg", "Limit", "#waiting", "#running", "max", "provider", "#continue", "resolvers", "assert", "Latest", "#onResolve", "#onReject", "#onFinally", "#latest", "Option", "onResolve", "onReject", "onFinally", "safeExecute", "network", "limit", "Promises", "input", "init", "stopwatch", "level", "startTime", "label", "TimeSpanUtils", "startTime", "progress", "TimeSpan", "runtime", "Wait", "resolve", "numFrames", "count", "callback", "time", "args", "target", "type", "observable", "terminable", "generator", "reject", "interval", "status", "next", "error", "tryCatch", "done", "value", "key", "createSyncTarget", "graph", "messenger", "Communicator", "updates", "update", "type", "box", "ByteArrayInput", "Address", "isDefined", "Option", "UUID", "value", "Arrays", "key", "TimeInfo", "#position", "#transporting", "#leap", "leap", "value", "position", "Pointers", "AudioUnitType", "IndexComparator", "a", "b", "difference", "panic", "SortedBoxAdapterCollection", "_SortedBoxAdapterCollection", "field", "provider", "pointers", "#field", "#entries", "#listeners", "#subscription", "#sorted", "UUID", "entry", "Listeners", "pointer", "adapter", "subscription", "added", "assert", "uuid", "listener", "index", "idx", "BinarySearch", "IndexComparator", "Option", "adapters", "a", "b", "delta", "startIndex", "newIndex", "clamp", "BiquadCoeff", "cutoff", "resonance", "clamp", "theta", "TAU", "alpha", "cosw", "beta", "b0", "b1", "b2", "a0", "a1", "a2", "a0_inverse", "frequency", "db_gain", "a", "w0", "k", "k2", "a_plus_one", "a_minus_one", "q", "magResponse", "phaseResponse", "assert", "omega", "zReal", "zImag", "numeratorReal", "numeratorImag", "denominatorReal", "denominatorImag", "denom", "responseReal", "responseImag", "BiquadMono", "#x1", "#x2", "#y1", "#y2", "a1", "a2", "b0", "b1", "b2", "source", "target", "fromIndex", "toIndex", "x1", "x2", "y1", "y2", "i", "x", "y", "BiquadStack", "#stack", "maxOrder", "Arrays", "processor", "coeff", "BPMTools", "detect", "buf", "sampleRate", "options", "interval", "scanSteps", "scanSamples", "minBPM", "maxBPM", "env", "v", "k", "i", "x", "z", "sample", "frames", "index", "bpmToIv", "b", "ivToBpm", "iv", "BEATS", "NO_BEATS", "autodiff", "mid", "v0", "d", "t", "w", "nb", "avgDiff", "s", "slow", "fast", "step", "bestBpm", "bestScore", "bpm", "cost", "Chord", "scale", "root", "variation", "n", "Arrays", "index", "step", "interval", "midiNote", "Event", "a", "b", "event", "EventSpan", "LoopableRegion", "region", "ppqn", "mod", "position", "complete", "loopOffset", "loopDuration", "from", "to", "rawStart", "rawEnd", "Option", "resultStart", "resultEnd", "locateLoops", "offset", "seekMin", "seekMax", "passIndex", "regionStart", "regionEnd", "resultStartValue", "resultEndValue", "EventCollection", "_EventCollection", "comparator", "#array", "EventArrayImpl", "index", "predicate", "fromPosition", "Generators", "toPosition", "RegionCollection", "_RegionCollection", "period", "EventSpanRetainer", "insertIndex", "BinarySearch", "result", "isDefined", "lastIndex", "Arrays", "#unsorted", "#sort", "key", "startIndex", "NumberComparator", "i", "other", "floorLastIndex", "Integer", "fromIndex", "Predicates", "element", "FFT", "_FFT", "i", "#n", "#levels", "#cosTable", "#sinTable", "n", "halfN", "angle", "real", "imag", "j", "k", "temp", "cosTable", "sinTable", "size", "hs", "ts", "m", "idx", "cos", "sin", "reali", "imagi", "pre", "pim", "real2", "imag2", "fromSignature", "nominator", "denominator", "toParts", "ppqn", "lowerPulses", "beats", "bars", "ticks", "semiquavers", "remainingTicks", "secondsToPulses", "seconds", "bpm", "pulsesToSeconds", "pulses", "samplesToPulses", "samples", "sampleRate", "pulsesToSamples", "PPQN", "Fraction", "Builder", "n", "d", "PPQN", "#list", "fraction", "a", "b", "Fragmentor", "p0", "p1", "stepSize", "index", "position", "Graph", "#vertices", "#predecessors", "vertex", "assert", "Arrays", "found", "source", "target", "vertexPredecessors", "asDefined", "TopologicalSort", "#graph", "#sorted", "#visited", "#withLoops", "#successors", "graph", "#prepare", "#visit", "#clear", "addTo", "vert", "vert2", "vert1", "change", "vs", "n1", "Groove", "position", "GroovePattern", "#func", "func", "#transform", "forward", "duration", "start", "quantizeFloor", "normalized", "transformed", "MidiKeys", "bits", "keyIndex", "note", "PredefinedScaleImpl", "#name", "#bits", "name", "keys", "other", "NoteEvent", "event", "a", "b", "positionDiff", "pitchDiff", "ratio", "curve", "diffComplete", "EventSpan", "Waveform", "BandLimitedOscillator", "#phase", "#integrator", "buffer", "phaseInc", "waveform", "fromIndex", "toIndex", "i", "t", "out", "#polyBLEP", "sq", "dt", "StereoMatrix", "Mixing", "m", "gain", "panning", "invertL", "invertR", "stereo", "swap", "mixing", "panL", "panR", "lGain", "rGain", "mono", "expand", "midGain", "sideGain", "monoAmount", "stereoWidth", "m00", "m01", "m10", "m11", "ll", "rl", "lr", "rr", "x", "clamp", "PI_QUART", "l", "r", "source", "target", "fromIndex", "toIndex", "src0", "src1", "trg0", "trg1", "i", "ch0", "ch1", "Ramp", "sampleRate", "durationInSeconds", "LinearRamp", "StereoMatrixRamp", "#length", "#value", "#target", "#delta", "#remaining", "length", "target", "smooth", "value", "StereoMatrix", "params", "mixing", "source", "fromIndex", "toIndex", "src0", "src1", "trg0", "trg1", "i", "l", "r", "m", "#equals", "RMS", "#values", "#inv", "#index", "#sum", "n", "x", "squared", "LogDb", "midiToHz", "note", "baseFrequency", "dbToGain", "db", "LogDb", "velocityToGain", "velocity", "dbToGain", "Interpolation", "slope", "ValueEvent", "a", "b", "positionDiff", "indexDiff", "panic", "iterateWindow", "events", "fromPosition", "toPosition", "Iterables", "event", "precursor", "sorted", "index", "BinarySearch", "position", "fallback", "iterator", "done", "prevEvent", "nextEvent", "interpolate", "quantise", "duration", "numSteps", "value", "step", "interpolation", "x", "Curve", "Window", "Type", "type", "n", "values", "a", "n2", "i", "c", "d", "e", "key", "BoxIO", "name", "graph", "uuid", "constructor", "RootBox", "SelectionBox", "UserInterfaceBox", "TimelineBox", "TrackBox", "NoteEventBox", "NoteEventRepeatBox", "NoteEventCollectionBox", "NoteRegionBox", "NoteClipBox", "ValueEventBox", "ValueEventCollectionBox", "ValueEventCurveBox", "ValueRegionBox", "ValueClipBox", "AudioRegionBox", "AudioClipBox", "MarkerBox", "AudioFileBox", "AudioUnitBox", "AudioBusBox", "AuxSendBox", "StepAutomationBox", "GrooveShuffleBox", "DeviceInterfaceKnobBox", "ModularDeviceBox", "DeviceClashBox", "StereoToolDeviceBox", "DelayDeviceBox", "RevampDeviceBox", "ReverbDeviceBox", "VaporisateurDeviceBox", "NanoDeviceBox", "PlayfieldDeviceBox", "PlayfieldSampleBox", "TapeDeviceBox", "ArpeggioDeviceBox", "PitchDeviceBox", "ZeitgeistDeviceBox", "ModularBox", "ModuleConnectionBox", "ModularAudioInputBox", "ModularAudioOutputBox", "ModuleDelayBox", "ModuleMultiplierBox", "ModuleGainBox", "panic", "buffer", "stream", "ByteArrayInput", "className", "uuidBytes", "UUID", "box", "PianoMode", "_PianoMode", "ObjectField", "construct", "Int32Field", "NoPointers", "Float32Field", "BooleanField", "RootBox", "_RootBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "Field", "StringField", "PianoMode", "SelectionBox", "_SelectionBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "UserInterfaceBox", "_UserInterfaceBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "Field", "Signature", "_Signature", "ObjectField", "construct", "Int32Field", "NoPointers", "LoopArea", "_LoopArea", "ObjectField", "construct", "BooleanField", "NoPointers", "Int32Field", "MarkerTrack", "_MarkerTrack", "ObjectField", "construct", "Field", "Pointers", "Int32Field", "NoPointers", "BooleanField", "TimelineBox", "_TimelineBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "Field", "Pointers", "Signature", "LoopArea", "MarkerTrack", "Int32Field", "Float32Field", "TrackBox", "_TrackBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Field", "Int32Field", "BooleanField", "NoteEventBox", "_NoteEventBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "Float32Field", "NoteEventRepeatBox", "_NoteEventRepeatBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "Int32Field", "Float32Field", "NoteEventCollectionBox", "_NoteEventCollectionBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "Field", "NoteRegionBox", "_NoteRegionBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "BooleanField", "StringField", "ClipPlaybackFields", "_ClipPlaybackFields", "ObjectField", "construct", "BooleanField", "NoPointers", "Int32Field", "NoteClipBox", "_NoteClipBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "ClipPlaybackFields", "BooleanField", "StringField", "ValueEventBox", "_ValueEventBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "Float32Field", "ValueEventCollectionBox", "_ValueEventCollectionBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "Field", "ValueEventCurveBox", "_ValueEventCurveBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "Float32Field", "ValueRegionBox", "_ValueRegionBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "BooleanField", "StringField", "ValueClipBox", "_ValueClipBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "ClipPlaybackFields", "BooleanField", "StringField", "AudioRegionBox", "_AudioRegionBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "BooleanField", "StringField", "Float32Field", "AudioClipBox", "_AudioClipBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "ClipPlaybackFields", "BooleanField", "StringField", "Float32Field", "MarkerBox", "_MarkerBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "StringField", "AudioFileBox", "_AudioFileBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "Int32Field", "NoPointers", "StringField", "AudioUnitBox", "_AudioUnitBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "StringField", "NoPointers", "PointerField", "Field", "Int32Field", "Float32Field", "BooleanField", "AudioBusBox", "_AudioBusBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "Field", "BooleanField", "StringField", "AuxSendBox", "_AuxSendBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "Int32Field", "Float32Field", "StepAutomationBox", "_StepAutomationBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "Float32Field", "GrooveShuffleBox", "_GrooveShuffleBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "StringField", "NoPointers", "Float32Field", "Int32Field", "DeviceInterfaceKnobBox", "_DeviceInterfaceKnobBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "Int32Field", "Float32Field", "StringField", "DeviceUserInterface", "_DeviceUserInterface", "ObjectField", "construct", "Field", "Pointers", "ModularDeviceBox", "_ModularDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "StringField", "BooleanField", "DeviceUserInterface", "ClashStep", "_ClashStep", "ObjectField", "construct", "BooleanField", "Pointers", "ClashPattern", "_ClashPattern", "ObjectField", "construct", "ArrayField", "NoPointers", "ClashStep", "Int32Field", "DeviceClashBox", "_DeviceClashBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "StringField", "BooleanField", "Float32Field", "ArrayField", "ClashPattern", "StereoToolDeviceBox", "_StereoToolDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "StringField", "BooleanField", "Float32Field", "DelayDeviceBox", "_DelayDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "StringField", "BooleanField", "Float32Field", "RevampPass", "_RevampPass", "ObjectField", "construct", "BooleanField", "Pointers", "Float32Field", "Int32Field", "RevampShelf", "_RevampShelf", "ObjectField", "construct", "BooleanField", "Pointers", "Float32Field", "RevampBell", "_RevampBell", "ObjectField", "construct", "BooleanField", "Pointers", "Float32Field", "RevampDeviceBox", "_RevampDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "StringField", "BooleanField", "RevampPass", "RevampShelf", "RevampBell", "Float32Field", "ReverbDeviceBox", "_ReverbDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "StringField", "BooleanField", "Float32Field", "VaporisateurDeviceBox", "_VaporisateurDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "StringField", "BooleanField", "Float32Field", "Int32Field", "NanoDeviceBox", "_NanoDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "StringField", "BooleanField", "Float32Field", "PlayfieldDeviceBox", "_PlayfieldDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "StringField", "BooleanField", "Field", "PlayfieldSampleBox", "_PlayfieldSampleBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Field", "Int32Field", "StringField", "BooleanField", "Float32Field", "TapeDeviceBox", "_TapeDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "StringField", "BooleanField", "Float32Field", "ArpeggioDeviceBox", "_ArpeggioDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "StringField", "BooleanField", "Float32Field", "PitchDeviceBox", "_PitchDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "StringField", "BooleanField", "Float32Field", "ZeitgeistDeviceBox", "_ZeitgeistDeviceBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "PointerField", "NoPointers", "Int32Field", "StringField", "BooleanField", "ModularBox", "_ModularBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "Field", "StringField", "ModuleConnectionBox", "_ModuleConnectionBox", "Box", "graph", "uuid", "constructor", "NoPointers", "construct", "visitor", "safeExecute", "PointerField", "Pointers", "ModuleAttributes", "_ModuleAttributes", "ObjectField", "construct", "PointerField", "NoPointers", "Pointers", "StringField", "Int32Field", "BooleanField", "ModularAudioInputBox", "_ModularAudioInputBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "ModuleAttributes", "NoPointers", "Field", "ModularAudioOutputBox", "_ModularAudioOutputBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "ModuleAttributes", "NoPointers", "Field", "ModuleDelayBox", "_ModuleDelayBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "ModuleAttributes", "NoPointers", "Field", "Float32Field", "ModuleMultiplierBox", "_ModuleMultiplierBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "ModuleAttributes", "NoPointers", "Field", "Float32Field", "ModuleGainBox", "_ModuleGainBox", "Box", "graph", "uuid", "constructor", "Pointers", "construct", "visitor", "safeExecute", "ModuleAttributes", "NoPointers", "Field", "Float32Field", "InterpolationFieldAdapter", "field", "value", "curveBox", "Pointers", "isDefined", "assertInstanceOf", "ValueEventCurveBox", "UUID", "box", "Interpolation", "panic", "ValueEventBoxAdapter", "_ValueEventBoxAdapter", "a", "b", "positionDiff", "indexDiff", "#terminator", "Terminator", "#context", "#box", "#interpolation", "#interpolationSubscription", "#isSelected", "context", "box", "Cache", "InterpolationFieldAdapter", "invalidateInterpolation", "collection", "Propagation", "update", "updatedFieldKeys", "indexChanged", "Arrays", "positionChanged", "targetVertex", "Terminable", "Pointers", "region", "value", "vertex", "ValueEventCollectionBoxAdapter", "options", "eventBox", "ValueEventBox", "UUID", "ValueEventCollectionBoxAdapter", "_ValueEventCollectionBoxAdapter", "#terminator", "Terminator", "#context", "#box", "#changeNotifier", "#adapters", "#events", "context", "box", "Notifier", "UUID", "adapter", "EventCollection", "ValueEventBoxAdapter", "addValueProcedure", "asDefined", "#onEventsChanged", "uuid", "position", "fallback", "ValueEvent", "graph", "boxCopy", "ValueEventCollectionBox", "source", "low", "high", "Option", "p0", "v0", "p1", "v1", "linear", "y0", "y1", "steps", "cutOffset", "curve", "Curve", "cutValue", "lowSlope", "InterpolationFieldAdapter", "Interpolation", "panic", "observer", "index", "value", "interpolation", "eventBox", "ValueEventBox", "Pointers", "ValueClipBoxAdapter", "#terminator", "Terminator", "#context", "#box", "#selectedValue", "#changeNotifier", "#isConstructing", "#eventCollectionSubscription", "Terminable", "context", "box", "DefaultObservableValue", "Notifier", "#dispatchChange", "Propagation", "_update", "targetVertex", "ValueEventCollectionBoxAdapter", "position", "fallback", "content", "observer", "visitor", "safeExecute", "consolidate", "events", "ValueClipBox", "UUID", "collection", "vertex", "Option", "TrackBoxAdapter", "adapter", "PPQN", "AudioFileBoxAdapter", "#context", "#box", "context", "box", "AudioClipBoxAdapter", "#terminator", "Terminator", "#context", "#box", "#selectedValue", "#changeNotifier", "#isConstructing", "#fileAdapter", "Option", "#fileSubscription", "context", "box", "DefaultObservableValue", "Notifier", "#dispatchChange", "pointerField", "vertex", "AudioFileBoxAdapter", "subscription", "adapter", "Propagation", "_update", "observer", "visitor", "safeExecute", "_mirrored", "AudioClipBox", "UUID", "TrackBoxAdapter", "PPQN", "NoteEventBoxAdapter", "_NoteEventBoxAdapter", "#context", "#box", "#subscription", "#isSelected", "context", "box", "Propagation", "update", "collection", "updatedFieldKeys", "pitchChanged", "Arrays", "positionChanged", "region", "vertex", "NoteEventCollectionBoxAdapter", "minPitch", "maxPitch", "options", "NoteEventBox", "UUID", "ratio", "NoteEvent", "playCount", "events", "adapters", "index", "a", "b", "NoteEventCollectionBoxAdapter", "_NoteEventCollectionBoxAdapter", "#terminator", "Terminator", "#context", "#box", "#changeNotifier", "#adapters", "#events", "#minPitch", "#maxPitch", "#maxDuration", "#computedExtremas", "context", "box", "Notifier", "UUID", "adapter", "EventCollection", "NoteEvent", "addNoteProcedure", "asDefined", "NoteEventBoxAdapter", "#onEventsChanged", "uuid", "graph", "boxCopy", "NoteEventCollectionBox", "source", "position", "duration", "velocity", "pitch", "chance", "playCount", "cent", "NoteEventBox", "observer", "coordinates", "element", "Iterables", "begin", "end", "events", "Intervals", "Pointers", "#computeExtremas", "min", "max", "maxDuration", "NoteClipBoxAdapter", "#terminator", "Terminator", "#context", "#box", "#selectedValue", "#changeNotifier", "#isConstructing", "#eventCollectionSubscription", "Terminable", "context", "box", "DefaultObservableValue", "Notifier", "#dispatchChange", "Propagation", "_update", "targetVertex", "NoteEventCollectionBoxAdapter", "observer", "visitor", "safeExecute", "consolidate", "events", "NoteClipBox", "UUID", "collection", "vertex", "Option", "TrackBoxAdapter", "adapter", "PPQN", "ClipAdapters", "boxAdapters", "box", "asDefined", "NoteClipBoxAdapter", "ValueClipBoxAdapter", "AudioClipBoxAdapter", "TrackClips", "#trackBoxAdapter", "#terminator", "#changeNotifier", "#collection", "adapter", "boxAdapters", "Terminator", "Notifier", "SortedBoxAdapterCollection", "box", "ClipAdapters", "Pointers", "observer", "AudioRegionBoxAdapter", "_AudioRegionBoxAdapter", "#terminator", "#context", "#box", "#changeNotifier", "#fileAdapter", "Option", "#fileSubscription", "#isSelected", "#constructing", "context", "box", "Terminator", "Notifier", "#dispatchChange", "pointerField", "vertex", "AudioFileBoxAdapter", "subscription", "adapter", "Propagation", "update", "track", "observer", "visitor", "safeExecute", "duration", "fileBoxAdapter", "startInSeconds", "totalInSeconds", "PPQN", "state", "TrackBoxAdapter", "params", "AudioRegionBox", "UUID", "_regions", "NoteRegionBoxAdapter", "_NoteRegionBoxAdapter", "#terminator", "Terminator", "#context", "#box", "#changeNotifier", "#isConstructing", "#isSelected", "#eventCollectionSubscription", "Terminable", "context", "box", "Notifier", "#dispatchChange", "Propagation", "update", "track", "targetVertex", "NoteEventCollectionBoxAdapter", "observer", "visitor", "safeExecute", "position", "optContent", "content", "local", "LoopableRegion", "event", "vertex", "Option", "TrackBoxAdapter", "adapter", "params", "eventCollection", "eventTarget", "NoteRegionBox", "UUID", "source", "graph", "target", "NoteEventCollectionBox", "regions", "Arrays", "a", "b", "region", "sorted", "RegionCollection", "first", "last", "rangeMin", "rangeMax", "trackBoxAdapter", "collectionBox", "overlapping", "anyRegion", "resultStart", "resultEnd", "rawStart", "searchStart", "searchEnd", "PPQN", "ValueRegionBoxAdapter", "_ValueRegionBoxAdapter", "#terminator", "Terminator", "#context", "#box", "#changeNotifier", "#isSelected", "#isConstructing", "#eventCollectionSubscription", "Terminable", "context", "box", "Notifier", "#dispatchChange", "Propagation", "update", "track", "targetVertex", "ValueEventCollectionBoxAdapter", "position", "fallback", "content", "LoopableRegion", "optContent", "observer", "visitor", "safeExecute", "collection", "vertex", "Option", "TrackBoxAdapter", "adapter", "params", "eventCollection", "eventTarget", "ValueRegionBox", "UUID", "events", "graph", "collectionBox", "ValueEventCollectionBox", "_regions", "regions", "sorted", "RegionCollection", "first", "Arrays", "last", "rangeMin", "rangeMax", "trackBoxAdapter", "overlapping", "region", "anyRegion", "resultStart", "resultEnd", "rawStart", "searchStart", "searchEnd", "_event", "PPQN", "RegionComparator", "a", "b", "RegionAdapters", "boxAdapters", "box", "asDefined", "NoteRegionBoxAdapter", "AudioRegionBoxAdapter", "ValueRegionBoxAdapter", "TrackRegions", "#trackBoxAdapter", "#terminator", "#changeNotifier", "#collection", "#adapters", "adapter", "boxAdapters", "Terminator", "Notifier", "RegionCollection", "RegionComparator", "UUID", "box", "RegionAdapters", "added", "assert", "uuid", "Pointers", "observer", "IconSymbol", "symbol", "name", "TrackType", "type", "IconSymbol", "DeviceAccepts", "type", "TrackType", "panic", "Devices", "adapter", "value", "box", "asDefined", "devices", "assert", "Arrays", "a", "b", "device", "Pointers", "index", "UUID", "indexField", "AudioUnitTracks", "#adapter", "#regionNotifier", "Notifier", "#collection", "#subscriptions", "#subscription", "adapter", "boxAdapters", "SortedBoxAdapterCollection", "box", "TrackBoxAdapter", "Pointers", "UUID", "uuid", "_adapter", "type", "target", "index", "graph", "tracks", "TrackBox", "Option", "adapters", "deleteIndex", "panic", "listener", "observer", "subscription", "AudioBusBoxAdapter", "#context", "#box", "context", "box", "observer", "Propagation", "IconSymbol", "Devices", "AudioUnitInput", "#terminator", "#labelNotifier", "#iconValue", "#observable", "#subscription", "Terminable", "pointerHub", "boxAdapters", "Terminator", "Notifier", "DefaultObservableValue", "IconSymbol", "Option", "owner", "labelField", "iconField", "field", "box", "assert", "input", "AudioBusBox", "AudioBusBoxAdapter", "Devices", "Pointers", "observer", "value", "ParameterAdapterSet", "#context", "#parameters", "context", "SortedSet", "adapter", "NumberArrayComparator", "parameter", "fieldIndices", "field", "valueMapping", "stringMapping", "name", "anchor", "AutomatableParameterFieldAdapter", "added", "assert", "AuxSendBoxAdapter", "#context", "#box", "#terminator", "#busChangeNotifier", "#sendPan", "#sendGain", "#subscription", "Terminable", "context", "box", "Terminator", "Notifier", "Option", "adapter", "AutomatableParameterFieldAdapter", "ValueMapping", "StringMapping", "observer", "AudioBusBoxAdapter", "target", "AudioUnitOutput", "#pointerField", "#boxAdapters", "#terminator", "#busChangeNotifier", "#subscription", "Terminable", "pointerField", "boxAdapters", "Terminator", "Notifier", "Option", "adapter", "observer", "target", "box", "AudioBusBoxAdapter", "AudioUnitBoxAdapter", "#terminator", "Terminator", "#context", "#box", "#parametric", "#tracks", "#input", "#midiEffects", "#audioEffects", "#auxSends", "#output", "context", "box", "ParameterAdapterSet", "AudioUnitTracks", "AudioUnitInput", "SortedBoxAdapterCollection", "Devices", "Pointers", "AuxSendBoxAdapter", "AudioUnitOutput", "#wrapParameters", "adapter", "output", "input", "adapters", "startIndex", "unitType", "min", "max", "delta", "ValueMapping", "StringMapping", "UpdateClockRate", "PPQN", "TrackBoxAdapter", "#context", "#box", "#terminator", "#clips", "#regions", "#listIndex", "context", "box", "Terminator", "TrackClips", "TrackRegions", "DefaultObservableValue", "observer", "path", "Option", "updater", "option", "Terminable", "#catchupAndSubscribeTargetDeviceName", "#catchupAndSubscribeTargetControlName", "targetVertex", "vertex", "AudioUnitBox", "AudioUnitBoxAdapter", "StringField", "owner", "type", "TrackType", "target", "panic", "asInstanceOf", "value", "subject", "position", "fallback", "intervals", "UpdateClockRate", "optClip", "sectionFrom", "region", "firstRegion", "isInstanceOf", "ValueRegionBoxAdapter", "clip", "ValueClipBoxAdapter", "ExternalControlTypes", "Pointers", "AutomatableParameterFieldAdapter", "#context", "#field", "#valueMapping", "#stringMapping", "#name", "#anchor", "#terminator", "Terminator", "#valueChangeNotifier", "#controlSource", "#trackBoxAdapter", "Option", "#automationHandle", "#controlledValue", "#midiControlled", "context", "field", "valueMapping", "stringMapping", "name", "anchor", "Notifier", "Listeners", "pointer", "mapPointerToControlSource", "box", "assert", "adapter", "TrackBoxAdapter", "value", "handle", "position", "optTrack", "track", "observer", "text", "result", "clamp", "panic", "BoxAdapterCollection", "#entries", "#listeners", "#subscription", "pointerHub", "provider", "pointers", "UUID", "adapter", "Listeners", "pointer", "added", "assert", "uuid", "listener", "DelayDeviceBoxAdapter", "_DelayDeviceBoxAdapter", "Fraction", "StringMapping", "n", "d", "#context", "#box", "#parametric", "context", "box", "ParameterAdapterSet", "#wrapParameters", "Devices", "ValueMapping", "ReverbDeviceBoxAdapter", "#context", "#box", "#parametric", "context", "box", "ParameterAdapterSet", "#wrapParameters", "Devices", "fieldIndices", "ValueMapping", "StringMapping", "RevampDeviceBoxAdapter", "#context", "#box", "#parametric", "context", "box", "ParameterAdapterSet", "#wrapParameters", "Devices", "fieldIndices", "createPass", "createShelf", "createBell", "FrequencyMapping", "ValueMapping", "GainMapping", "QMapping", "parametric", "pass", "name", "StringMapping", "shelf", "bell", "MarkerBoxAdapter", "a", "b", "#terminator", "Terminator", "#context", "#box", "context", "box", "Propagation", "update", "track", "vertex", "TimelineBoxAdapter", "UUID", "MarkerTrackAdapter", "#context", "#object", "#adapters", "#events", "#subscription", "context", "object", "Notifier", "UUID", "adapter", "EventCollection", "MarkerBoxAdapter", "box", "MarkerBox", "added", "assert", "uuid", "observer", "TimelineBoxAdapter", "#box", "#markerTrack", "context", "box", "MarkerTrackAdapter", "ModuleConnectionAdapter", "#box", "_context", "box", "AbstractModuleAdapter", "#context", "#box", "#terminator", "#attributes", "#parameters", "#selected", "context", "box", "Terminator", "ParameterAdapterSet", "terminable", "terminables", "ModularAdapter", "Direction", "ModuleConnectorAdapter", "_ModuleConnectorAdapter", "boxAdapters", "field", "direction", "name", "#boxAdapters", "#field", "#direction", "#name", "other", "accepts", "type", "Arrays", "Pointers", "box", "ModuleConnectionAdapter", "ModuleDelayAdapter", "AbstractModuleAdapter", "#parameterTime", "#voltageInput", "#voltageOutput", "context", "box", "ValueMapping", "StringMapping", "ModuleConnectorAdapter", "Direction", "ModularAudioOutputAdapter", "AbstractModuleAdapter", "#voltageInput", "context", "box", "ModuleConnectorAdapter", "Direction", "Arrays", "ModuleGainAdapter", "AbstractModuleAdapter", "#parameterGain", "#voltageInput", "#voltageOutput", "context", "box", "ValueMapping", "StringMapping", "ModuleConnectorAdapter", "Direction", "ModuleMultiplierAdapter", "AbstractModuleAdapter", "#voltageInputX", "#voltageInputY", "#voltageOutput", "context", "box", "ModuleConnectorAdapter", "Direction", "ModularAudioInputAdapter", "AbstractModuleAdapter", "#voltageOutput", "context", "box", "ModuleConnectorAdapter", "Direction", "Arrays", "Modules", "vertex", "adapters", "box", "asDefined", "ModuleGainAdapter", "ModuleDelayAdapter", "ModuleMultiplierAdapter", "ModularAudioInputAdapter", "ModularAudioOutputAdapter", "DeviceInterfaceKnobAdapter", "#context", "#box", "context", "box", "Modules", "#parameterTarget", "ModularDeviceBoxAdapter", "#context", "#box", "context", "box", "_fieldIndices", "panic", "Devices", "ModularAdapter", "Pointers", "pointer", "DeviceInterfaceKnobAdapter", "ModularAdapter", "#terminator", "Terminator", "#listeners", "#context", "#box", "#modules", "#connections", "context", "box", "Listeners", "UUID", "adapter", "addModule", "pointer", "Modules", "removeModule", "addConnection", "ModuleConnectionAdapter", "removeConnection", "Pointers", "listener", "ifDefined", "fn", "asDefined", "ModularDeviceBoxAdapter", "GrooveShuffleBoxAdapter", "_GrooveShuffleBoxAdapter", "n", "d", "PPQN", "#terminator", "Terminator", "#context", "#box", "#parametric", "#groove", "GroovePattern", "#duration", "x", "moebiusEase", "#amount", "y", "context", "box", "ParameterAdapterSet", "#wrapParameters", "owner", "squashUnit", "position", "fieldIndices", "ValueMapping", "StringMapping", "FieldAdapter", "#field", "#valueMapping", "#stringMapping", "#name", "#anchor", "#terminator", "Terminator", "#valueChangeNotifier", "#trackBoxAdapter", "Option", "field", "valueMapping", "stringMapping", "name", "anchor", "Notifier", "observer", "value", "text", "result", "clamp", "PianoModeAdapter", "#object", "#keyboard", "#timeRangeInQuarters", "#noteScale", "#noteLabels", "#transpose", "object", "FieldAdapter", "ValueMapping", "StringMapping", "observer", "Propagation", "RootBoxAdapter", "#context", "#box", "#audioUnits", "#audioBusses", "#pianoMode", "context", "box", "SortedBoxAdapterCollection", "AudioUnitBoxAdapter", "Pointers", "BoxAdapterCollection", "AudioBusBoxAdapter", "PianoModeAdapter", "adapter", "track", "GrooveShuffleBoxAdapter", "TimelineBoxAdapter", "TapeDeviceBoxAdapter", "#context", "#box", "#parametric", "context", "box", "ParameterAdapterSet", "#wrapParameters", "TrackType", "Devices", "fieldIndices", "ValueMapping", "StringMapping", "VaporisateurDeviceBoxAdapter", "#context", "#box", "#parametric", "context", "box", "ParameterAdapterSet", "#wrapParameters", "TrackType", "Devices", "fieldIndices", "ValueMapping", "StringMapping", "ArpeggioDeviceBoxAdapter", "_ArpeggioDeviceBoxAdapter", "Fraction", "StringMapping", "n", "d", "#context", "#box", "#parametric", "context", "box", "ParameterAdapterSet", "#wrapParameters", "fieldIndices", "Devices", "ValueMapping", "PitchDeviceBoxAdapter", "#context", "#box", "#parametric", "context", "box", "ParameterAdapterSet", "#wrapParameters", "Devices", "fieldIndices", "ValueMapping", "StringMapping", "NanoDeviceBoxAdapter", "#context", "#box", "#parametric", "context", "box", "ParameterAdapterSet", "#wrapParameters", "TrackType", "Devices", "fieldIndices", "ValueMapping", "StringMapping", "PlayfieldSampleBoxAdapter", "#terminator", "Terminator", "#context", "#box", "#midiEffects", "#audioEffects", "#parametric", "#file", "Option", "context", "box", "SortedBoxAdapterCollection", "Devices", "Pointers", "ParameterAdapterSet", "#wrapParameters", "pointer", "AudioFileBoxAdapter", "file", "TrackType", "index", "PlayfieldSampleBox", "UUID", "PlayfieldDeviceBoxAdapter", "ValueMapping", "StringMapping", "PlayfieldDeviceBoxAdapter", "#context", "#box", "#samples", "#parametric", "context", "box", "SortedBoxAdapterCollection", "PlayfieldSampleBoxAdapter", "Pointers", "ParameterAdapterSet", "adapter", "TrackType", "Devices", "fieldIndices", "StereoToolDeviceBoxAdapter", "#context", "#box", "#parametric", "context", "box", "ParameterAdapterSet", "#wrapParameters", "Devices", "ValueMapping", "StringMapping", "GrooveAdapter", "adapter", "ZeitgeistDeviceBoxAdapter", "#context", "#box", "context", "box", "Devices", "GrooveAdapter", "observer", "pointer", "BoxAdapters", "#context", "#adapters", "#deleted", "#terminable", "context", "UUID", "adapter", "update", "isDefined", "box", "checkType", "panic", "#create", "added", "assert", "unknownBox", "asDefined", "RootBoxAdapter", "ArpeggioDeviceBoxAdapter", "PitchDeviceBoxAdapter", "StereoToolDeviceBoxAdapter", "DelayDeviceBoxAdapter", "ReverbDeviceBoxAdapter", "RevampDeviceBoxAdapter", "PlayfieldDeviceBoxAdapter", "PlayfieldSampleBoxAdapter", "ModularDeviceBoxAdapter", "TapeDeviceBoxAdapter", "NanoDeviceBoxAdapter", "VaporisateurDeviceBoxAdapter", "ModularAdapter", "ModuleConnectionAdapter", "ModuleDelayAdapter", "ModuleGainAdapter", "ModuleMultiplierAdapter", "ModularAudioInputAdapter", "ModularAudioOutputAdapter", "DeviceInterfaceKnobAdapter", "AudioUnitBoxAdapter", "AudioBusBoxAdapter", "AuxSendBoxAdapter", "AudioFileBoxAdapter", "AudioClipBoxAdapter", "AudioRegionBoxAdapter", "NoteEventBoxAdapter", "NoteEventCollectionBoxAdapter", "NoteClipBoxAdapter", "NoteRegionBoxAdapter", "ValueEventBoxAdapter", "ValueEventCollectionBoxAdapter", "ValueClipBoxAdapter", "ValueRegionBoxAdapter", "TrackBoxAdapter", "TimelineBoxAdapter", "MarkerBoxAdapter", "ZeitgeistDeviceBoxAdapter", "GrooveShuffleBoxAdapter", "ExportStemsConfiguration", "config", "configuration", "name", "sanitizedNames", "getUniqueName", "baseName", "count", "newName", "key", "entry", "EngineStateSchema", "Schema", "NoteBroadcaster", "#terminator", "Terminator", "#broadcaster", "#address", "#bits", "broadcaster", "address", "Bits", "EmptyExec", "note", "NoteSustainer", "sender", "note", "velocity", "playing", "ParameterFieldAdapters", "#set", "Address", "adapter", "address", "ProjectDecoder", "arrayBuffer", "input", "ByteArrayInput", "assert", "boxGraphChunkLength", "boxGraphChunk", "boxGraph", "BoxGraph", "Option", "BoxIO", "readMandatoryBoxes", "rootBox", "UUID", "userInterfaceBox", "masterBusBox", "masterAudioUnit", "timelineBox", "RingBuffer", "sab", "numChunks", "numChannels", "bufferSize", "append", "running", "pointers", "audio", "planarChunk", "canBlock", "step", "readPtr", "writePtr", "offset", "channels", "channel", "start", "end", "panic", "index", "UnionBoxTypes", "box", "_box", "UnionAdapterTypes", "adapter", "UnionBoxTypes", "Gate", "RegionEditing", "region", "cut", "consolidate", "UnionAdapterTypes", "position", "complete", "loopOffset", "loopDuration", "mod", "panic", "begin", "end", "BlockFlags", "transporting", "discontinuous", "playing", "tempoChanged", "AudioBuffer", "_AudioBuffer", "#channels", "numberOfChannels", "Arrays", "start", "end", "channel", "channelIndex", "assert", "number", "output", "target", "outL", "outR", "inp", "i", "inpL", "inpR", "PeakBroadcaster", "_PeakBroadcaster", "#broadcaster", "#address", "#values", "#rms", "#terminable", "#peakL", "#peakR", "#rmsL", "#rmsR", "broadcaster", "address", "Arrays", "RMS", "outL", "outR", "fromIndex", "toIndex", "rmsL", "rmsR", "i", "l", "r", "AutomatableParameter", "#terminator", "Terminator", "#context", "#adapter", "#notifier", "#broadcasting", "Option", "#value", "context", "adapter", "Notifier", "owner", "observer", "assert", "position", "value", "terminable", "terminables", "EventBuffer", "#events", "ArrayMultimap", "Arrays", "Event", "index", "event", "procedure", "AbstractProcessor", "#terminator", "Terminator", "#context", "#eventInput", "#parameters", "#automatedParameters", "#updateClockConnection", "Option", "context", "EventBuffer", "parameter", "panic", "adapter", "AutomatableParameter", "_pointer", "Arrays", "connection", "Pointers", "position", "terminable", "terminables", "UpdateEvent", "event", "UpdateClock", "AbstractProcessor", "#outputs", "context", "output", "Arrays", "blocks", "p0", "p1", "flags", "index", "Bits", "position", "Fragmentor", "UpdateClockRate", "AudioProcessor", "AbstractProcessor", "context", "blocks", "block", "index", "p0", "s0", "s1", "bpm", "anyEvents", "fromIndex", "event", "pulses", "toIndex", "PPQN", "assert", "UpdateEvent", "_block", "_event", "panic", "DelayDeviceDsp", "_DelayDeviceDsp", "#FilterMapping", "ValueMapping", "#delaySize", "#delayBuffer", "#biquad", "#biquadCoeff", "#interpolationLength", "#deltaOffset", "#writePosition", "#currentOffset", "#targetOffset", "#alphaPosition", "#processed", "#interpolating", "maxFrames", "interpolationLength", "pow2Size", "nextPowOf2", "BiquadMono", "BiquadCoeff", "biquad", "delay", "#initDelayTime", "value", "assert", "#updateDelayTime", "input", "output", "fromIndex", "toIndex", "#processInterpolate", "#processSteady", "delayMask", "delayBuffer", "feedback", "pWetLevel", "pDryLevel", "writePosition", "readPosition", "iL", "iR", "oL", "oR", "bL", "bR", "dL", "dR", "i", "inpL", "inpR", "dReadL", "dReadR", "diff", "crossL", "crossR", "readPositionInt", "alpha", "d00", "d10", "d0", "d1", "DelayDeviceProcessor", "_DelayDeviceProcessor", "AudioProcessor", "#id", "#adapter", "#output", "#peaks", "#delayLines", "#source", "Option", "#updateDelayTime", "context", "adapter", "AudioBuffer", "PeakBroadcaster", "delay", "feedback", "cross", "filter", "dry", "wet", "maxFrames", "PPQN", "Fraction", "DelayDeviceBoxAdapter", "interpolationDuration", "DelayDeviceDsp", "source", "_event", "bpm", "flags", "from", "to", "Bits", "offsetIndex", "offsetInPulses", "parameter", "dbToGain", "NopDeviceProcessor", "_NopDeviceProcessor", "AbstractProcessor", "#id", "#adapter", "#output", "#peaks", "#source", "Option", "context", "adapter", "AudioBuffer", "PeakBroadcaster", "source", "_processInfo", "input", "inpL", "inpR", "outL", "outR", "i", "_parameter", "AudioBusProcessor", "_AudioBusProcessor", "AbstractProcessor", "#id", "#adapter", "#audioOutput", "#peaks", "#sources", "context", "adapter", "AudioBuffer", "PeakBroadcaster", "Option", "output", "Arrays", "_processInfo", "outL", "outR", "source", "srcL", "srcR", "i", "_parameter", "NoteLifecycleEvent", "position", "duration", "pitch", "velocity", "cent", "$id", "source", "id", "event", "NoteEventInstrument", "#terminator", "Terminator", "#receiver", "#broadcaster", "#source", "Option", "receiver", "broadcaster", "address", "NoteBroadcaster", "source", "assert", "Terminable", "index", "p0", "p1", "flags", "event", "#showEvent", "NoteLifecycleEvent", "VaporisateurDeviceProcessor", "AudioProcessor", "#adapter", "#voices", "#noteEventInstrument", "#audioOutput", "#peakBroadcaster", "#parameterVolume", "#parameterOctave", "#parameterTune", "#parameterAttack", "#parameterRelease", "#parameterWaveform", "#parameterCutoff", "#parameterResonance", "#parameterFilterEnvelope", "Waveform", "context", "adapter", "NoteEventInstrument", "AudioBuffer", "PeakBroadcaster", "Option", "block", "source", "event", "NoteLifecycleEvent", "Voice", "voice", "_block", "fromIndex", "toIndex", "i", "parameter", "dbToGain", "device", "BandLimitedOscillator", "BiquadCoeff", "BiquadMono", "output", "frequency", "midiToHz", "gain", "velocityToGain", "waveform", "attack", "release", "cutoffMapping", "cutoff", "resonance", "filterEnvelope", "l", "r", "env", "clamp", "amp", "TapeDeviceProcessor", "AbstractProcessor", "#adapter", "#audioOutput", "#peaks", "context", "adapter", "AudioBuffer", "PeakBroadcaster", "Option", "blocks", "outL", "outR", "trackBoxAdapter", "TrackType", "block", "p0", "p1", "flags", "Bits", "intervals", "optClip", "sectionFrom", "sectionTo", "region", "isInstanceOf", "AudioRegionBoxAdapter", "optData", "data", "cycle", "LoopableRegion", "#processPass", "clip", "AudioClipBoxAdapter", "_parameter", "output", "s0", "s1", "numberOfFrames", "frames", "framesL", "framesR", "sn", "pn", "wp0", "wp1", "r0", "r1", "bp0", "bp1", "bpn", "step", "assert", "i", "j", "read", "readInt", "readAlpha", "l0", "EventProcessor", "AbstractProcessor", "blocks", "block", "index", "p0", "p1", "anyEvents", "position", "event", "UpdateEvent", "_block", "VelocityMatrix", "matrix", "velocity", "ArpeggioModes", "stack", "octaves", "stepIndex", "position", "duration", "velocityMatrix", "count", "amount", "localIndex", "octave", "event", "NoteLifecycleEvent", "processLength", "sequenceLength", "sequenceIndex", "processIndex", "ArpeggioDeviceProcessor", "EventProcessor", "#adapter", "#stack", "#retainer", "#modeIndexParameter", "#rateParameter", "#gateParameter", "#repeatParameter", "#numOctaveParameter", "#velocityParameter", "#velocityMatrix", "VelocityMatrix", "#source", "Option", "#strategy", "ArpeggioModes", "#rate", "#gate", "#repeat", "#numOctaves", "context", "adapter", "EventSpanRetainer", "source", "assert", "Terminable", "from", "to", "flags", "Bits", "event", "NoteLifecycleEvent", "_", "onlyExternal", "position", "index", "Fragmentor", "stack", "stepIndex", "duration", "NoteEvent", "_block", "_from", "_to", "parameter", "Fraction", "ArpeggioDeviceBoxAdapter", "velocity", "_event", "PitchDeviceProcessor", "EventProcessor", "#adapter", "#noteBroadcaster", "#octavesParameter", "#semiTonesParameter", "#centParameter", "#source", "Option", "context", "adapter", "NoteBroadcaster", "source", "assert", "Terminable", "from", "to", "flags", "event", "NoteLifecycleEvent", "cent", "octaves", "semiTones", "Objects", "position", "onlyExternal", "_block", "_from", "_to", "parameter", "_event", "SpectrumAnalyser", "_SpectrumAnalyser", "#fftSize", "#numBins", "#fft", "#real", "#imag", "#window", "#bins", "#index", "n", "FFT", "Window", "left", "right", "fromIndex", "toIndex", "i", "#update", "scale", "re", "im", "energy", "RevampDeviceProcessor", "_RevampDeviceProcessor", "AudioProcessor", "#id", "#adapter", "#output", "#peaks", "#spectrumAnalyser", "#spectrum", "#biquadCoeff", "#biquadLowPassProcessors", "#biquadHighPassProcessors", "#biquadProcessors", "#enabled", "#parameterHighPassEnabled", "#parameterHighPassFrequency", "#parameterHighPassQ", "#parameterHighPassOrder", "#parameterLowShelfEnabled", "#parameterLowShelfFrequency", "#parameterLowShelfGain", "#parameterLowBellEnabled", "#parameterLowBellFrequency", "#parameterLowBellGain", "#parameterLowBellQ", "#parameterMidBellEnabled", "#parameterMidBellFrequency", "#parameterMidBellGain", "#parameterMidBellQ", "#parameterHighBellEnabled", "#parameterHighBellFrequency", "#parameterHighBellGain", "#parameterHighBellQ", "#parameterHighShelfEnabled", "#parameterHighShelfFrequency", "#parameterHighShelfGain", "#parameterLowPassEnabled", "#parameterLowPassFrequency", "#parameterLowPassQ", "#parameterLowPassOrder", "#source", "Option", "context", "adapter", "AudioBuffer", "PeakBroadcaster", "SpectrumAnalyser", "Arrays", "BiquadCoeff", "BiquadStack", "BiquadMono", "namedParameter", "pair", "processor", "source", "_block", "fromIndex", "toIndex", "outL", "outR", "input", "b", "inpL", "inpR", "coeff", "index", "fltL", "fltR", "i", "parameter", "order", "frequency", "q", "gain", "FreeVerb", "#buf0", "#buf1", "#buf2", "#buf3", "#buf4", "#buf5", "#buf6", "#buf7", "#buf8", "#buf9", "#buf10", "#buf11", "#buf12", "#buf13", "#buf14", "#buf15", "#buf16", "#buf17", "#buf18", "#buf19", "#buf20", "#buf21", "#buf22", "#buf23", "#delaySize", "#delayBuffer", "#v9_1", "#v8_1", "#v11_1", "#v10_1", "#v13_1", "#v12_1", "#v15_1", "#v14_1", "#v17_1", "#v16_1", "#v19_1", "#v18_1", "#v21_1", "#v20_1", "#v23_1", "#v22_1", "#v6_1", "#v4_1", "#v2_1", "#v0_1", "#v33_1", "#v32_1", "#v35_1", "#v34_1", "#v37_1", "#v36_1", "#v39_1", "#v38_1", "#v41_1", "#v40_1", "#v43_1", "#v42_1", "#v45_1", "#v44_1", "#v47_1", "#v46_1", "#v30_1", "#v28_1", "#v26_1", "#v24_1", "#index", "#delayPosition", "MaxPreDelaySec", "nextPowOf2", "outBuffer", "inpBuffer", "fromIndex", "toIndex", "inputL", "inputR", "outputL", "outputR", "p0", "p1", "p2", "i", "inpL", "inpR", "delayRead", "i2", "magic_gain", "readL", "readR", "p", "lt0", "lt1", "lt2", "lt3", "rt0", "rt1", "rt2", "rt3", "ReverbDeviceProcessor", "_ReverbDeviceProcessor", "AudioProcessor", "#id", "#adapter", "#output", "#peaks", "#reverb", "#parameterDecay", "#parameterPreDelay", "#parameterDamp", "#parameterWet", "#parameterDry", "#source", "Option", "context", "adapter", "AudioBuffer", "PeakBroadcaster", "FreeVerb", "decay", "preDelay", "damp", "wet", "dry", "source", "_block", "fromIndex", "toIndex", "outL", "outR", "parameter", "dbToGain", "NanoDeviceProcessor", "AudioProcessor", "#adapter", "#voices", "#audioOutput", "#noteEventProcessor", "#peakBroadcaster", "#parameterVolume", "#parameterRelease", "Option", "context", "adapter", "AudioBuffer", "NoteEventInstrument", "PeakBroadcaster", "pointer", "box", "block", "source", "event", "NoteLifecycleEvent", "Voice", "voice", "_block", "fromIndex", "toIndex", "i", "parameter", "dbToGain", "#device", "#event", "#speed", "#position", "#envPosition", "#decayPosition", "device", "output", "optLoader", "loader", "data", "outL", "outR", "inpL", "inpR", "numberOfFrames", "rateRatio", "gain", "release", "releaseInverse", "intPosition", "frac", "env", "l", "r", "PlayfieldSequencer", "EventProcessor", "#device", "#noteEventInstrument", "context", "device", "NoteEventInstrument", "block", "source", "_block", "_from", "_to", "index", "event", "NoteLifecycleEvent", "eventInput", "MixProcessor", "AudioProcessor", "#device", "#audioOutput", "#peaksBroadcaster", "#sources", "#eventBuffer", "context", "device", "AudioBuffer", "PeakBroadcaster", "EventBuffer", "source", "Arrays", "_block", "_fromIndex", "_toIndex", "outL", "outR", "srcL", "srcR", "i", "InsertReturnAudioChain", "_InsertReturnAudioChain", "context", "collection", "sourceProcessor", "targetProcessor", "#terminator", "Terminator", "#effects", "#disconnector", "#orderedEffects", "#needsWiring", "UUID", "device", "adapter", "AudioEffectDeviceProcessorFactory", "added", "assert", "subscription", "_adapter", "phase", "source", "Arrays", "uuid", "target", "FAST_RELEASE", "SampleVoice", "#sample", "#parameters", "#event", "#data", "#gate", "#gain", "#envPosition", "#decayPosition", "#attack", "#release", "#start", "#end", "#position", "#envelope", "#active", "#released", "sample", "parameters", "data", "event", "velocityToGain", "attack", "release", "sampleStart", "sampleEnd", "force", "#releaseEnvelope", "Gate", "output", "fromIndex", "toIndex", "outL", "outR", "frames", "numberOfFrames", "inpL", "inpR", "pitch", "distance", "sign", "rateRatio", "env", "i", "intPosition", "frac", "l", "r", "SampleProcessor", "AudioProcessor", "#device", "#adapter", "#voices", "#audioOutput", "#peaksBroadcaster", "#parameters", "context", "device", "adapter", "mixProcessor", "AudioBuffer", "PeakBroadcaster", "sampleStart", "sampleEnd", "attack", "release", "pitch", "positions", "InsertReturnAudioChain", "slices", "position", "index", "event", "NoteLifecycleEvent", "optData", "file", "mute", "solo", "polyphone", "exclude", "isMute", "isSolo", "voice", "SampleVoice", "_block", "fromIndex", "toIndex", "i", "_parameter", "PlayfieldDeviceProcessor", "#terminator", "Terminator", "#adapter", "#sequencer", "#mixProcessor", "#sampleSet", "context", "adapter", "PlayfieldSequencer", "MixProcessor", "UUID", "entry", "processor", "SampleProcessor", "terminable", "_adapter", "source", "Option", "note", "exclude", "_parameter", "StereoToolDeviceProcessor", "AudioProcessor", "#adapter", "#output", "#peaks", "#matrix", "Ramp", "#params", "#volume", "#panning", "#stereo", "#invertL", "#invertR", "#swap", "#source", "Option", "#mixing", "StereoMatrix", "#needsUpdate", "#processed", "context", "adapter", "AudioBuffer", "PeakBroadcaster", "owner", "source", "_block", "fromIndex", "toIndex", "target", "parameter", "dbToGain", "ZeitgeistDeviceProcessor", "EventProcessor", "#adapter", "#noteBroadcaster", "#groove", "Option", "#source", "context", "adapter", "NoteBroadcaster", "pointer", "GrooveAdapter", "Terminable", "source", "assert", "from", "to", "flags", "groove", "identity", "Groove", "event", "NoteLifecycleEvent", "Objects", "clamp", "position", "onlyExternal", "_parameter", "_block", "_event", "_from", "_to", "InstrumentDeviceProcessorFactory", "context", "box", "AudioBusProcessor", "AudioBusBoxAdapter", "VaporisateurDeviceProcessor", "VaporisateurDeviceBoxAdapter", "NanoDeviceProcessor", "NanoDeviceBoxAdapter", "TapeDeviceProcessor", "TapeDeviceBoxAdapter", "PlayfieldDeviceProcessor", "PlayfieldDeviceBoxAdapter", "MidiEffectDeviceProcessorFactory", "asDefined", "ArpeggioDeviceProcessor", "ArpeggioDeviceBoxAdapter", "PitchDeviceProcessor", "PitchDeviceBoxAdapter", "ZeitgeistDeviceProcessor", "ZeitgeistDeviceBoxAdapter", "AudioEffectDeviceProcessorFactory", "StereoToolDeviceProcessor", "StereoToolDeviceBoxAdapter", "DelayDeviceProcessor", "DelayDeviceBoxAdapter", "ReverbDeviceProcessor", "ReverbDeviceBoxAdapter", "RevampDeviceProcessor", "RevampDeviceBoxAdapter", "NopDeviceProcessor", "ModularDeviceBoxAdapter", "AuxSendProcessor", "AudioProcessor", "#adapter", "#audioOutput", "#rampGainL", "#rampGainR", "#parameterSendGain", "#parameterSendPan", "#source", "Option", "#needsUpdate", "#processing", "context", "adapter", "AudioBuffer", "Ramp", "source", "_block", "fromIndex", "toIndex", "gain", "dbToGain", "panning", "outL", "outR", "srcL", "srcR", "i", "gainL", "gainR", "_parameter", "ChannelStripProcessor", "AudioProcessor", "#adapter", "#audioOutput", "#rawBuffer", "#peaks", "#parameterVolume", "#parameterPanning", "#parameterMute", "#parameterSolo", "#gainL", "Ramp", "#gainR", "#outGain", "#source", "Option", "#updateGain", "#processing", "context", "adapter", "AudioBuffer", "PeakBroadcaster", "_event", "_block", "fromIndex", "toIndex", "mixer", "isSolo", "silent", "gain", "dbToGain", "panning", "source", "srcL", "srcR", "outL", "outR", "rawL", "rawR", "i", "l", "r", "gainL", "gainR", "outGain", "parameter", "AudioDeviceChain", "#terminator", "Terminator", "#audioUnit", "#options", "#auxSends", "#channelStrip", "#effects", "#disconnector", "#orderedEffects", "#needsWiring", "audioUnit", "options", "UUID", "device", "ChannelStripProcessor", "adapter", "AudioEffectDeviceProcessorFactory", "added", "assert", "subscription", "_adapter", "AuxSendProcessor", "uuid", "_owner", "phase", "#wire", "isOutputUnit", "context", "optInput", "optOutput", "source", "Arrays", "target", "auxSend", "audioBus", "NoteSequencer", "#terminator", "Terminator", "#context", "#adapter", "#noteBroadcaster", "#random", "#externalNotes", "#retainer", "context", "adapter", "NoteBroadcaster", "Random", "EventSpanRetainer", "phase", "note", "pitch", "velocity", "Option", "entry", "from", "to", "flags", "read", "Bits", "#releaseAll", "#releasecompleted", "duration", "event", "NoteLifecycleEvent", "tracks", "TrackType", "track", "optClip", "sectionFrom", "sectionTo", "#processRegions", "#processClip", "position", "onlyEnternal", "NoteEvent", "clip", "p0", "p1", "collection", "clipDuration", "clipStart", "quantizeFloor", "clipEnd", "#processCollection", "trackBoxAdapter", "region", "isInstanceOf", "NoteRegionBoxAdapter", "optCollection", "resultStart", "resultEnd", "rawStart", "LoopableRegion", "start", "end", "delta", "localStart", "localEnd", "source", "chance", "playCount", "playCurve", "searchStart", "searchLimit", "searchIndex", "searchPosition", "a", "b", "clamp", "MidiDeviceChain", "#terminator", "Terminator", "#audioUnit", "#noteSequencer", "#effects", "#disconnector", "#needsWiring", "audioUnit", "NoteSequencer", "UUID", "device", "adapter", "MidiEffectDeviceProcessorFactory", "added", "assert", "subscription", "_adapter", "phase", "#wire", "optInput", "unit", "input", "source", "target", "AudioUnit", "_AudioUnit", "#id", "#terminator", "Terminator", "#context", "#adapter", "#midiDeviceChain", "#audioDeviceChain", "#input", "Option", "context", "adapter", "options", "MidiDeviceChain", "AudioDeviceChain", "owner", "input", "InstrumentDeviceProcessorFactory", "asInstanceOf", "AudioBusProcessor", "Mixer", "#channelStrips", "#solo", "#virtualSolo", "#needsUpdate", "UUID", "processor", "channelStrip", "Terminable", "#requestUpdateSolo", "touched", "visitChannelStrip", "input", "Pointers", "pointer", "asDefined", "uuid", "targetVertex", "Browser", "hasLocation", "hasNavigator", "Compression", "buffer", "format", "stream", "writer", "ConsoleCommands", "path", "callback", "store", "init", "observableValue", "DefaultObservableValue", "input", "value", "getter", "setter", "EmptyProcedure", "error", "global", "scope", "attributes", "levels", "name", "current", "level", "ellipsis", "Context2d", "context", "text", "maxWidth", "width", "ellipseWidth", "l", "r", "mid", "result", "CssUtils", "term", "size", "em", "regex", "result", "replace", "digits", "unit", "number", "panic", "customCursors", "identifier", "data", "doc", "AnimationFrame", "nonrecurring", "recurring", "queue", "id", "exec", "exe", "Events", "eventTarget", "type", "listener", "options", "lastDownTime", "event", "now", "target", "isDefined", "Keyboard", "ctrlKey", "metaKey", "Browser", "altKey", "event", "Events", "Dragging", "target", "factory", "options", "processCycle", "Terminator", "Terminable", "Events", "event", "Browser", "option", "process", "pointerId", "moveEvent", "Keyboard", "AnimationFrame", "cancel", "_event", "Errors", "error", "Files", "arrayBuffer", "options", "isDefined", "handle", "writable", "blob", "url", "anchor", "status", "fileHandles", "error", "Promises", "fileHandle", "resolve", "reject", "fileInput", "event", "files", "Arrays", "index", "asDefined", "Html", "source", "template", "panic", "child", "element", "elements", "selectors", "parent", "asDefined", "id", "classDefinition", "prefix", "assert", "className", "sheet", "input", "x", "cssValues", "colors", "value", "Color", "target", "callback", "options", "observer", "first", "elemRect", "Rect", "owner", "range", "selection", "isDefined", "property", "limit", "document", "ModfierKeys", "Mac", "Win", "Browser", "Stream", "reader", "chunks", "done", "value", "length", "acc", "val", "output", "position", "chunk", "Svg", "#d", "x", "y", "x1", "y1", "x2", "y2", "rx", "ry", "deg", "largeArc", "sweep", "cx", "cy", "radius", "a0", "a1", "x0", "y0", "range", "TerminatorUtils", "weakRefs", "key", "subscribe", "weakRef", "terminable", "startWatchWeak", "id", "index", "entry", "key", "PackageType", "Lock", "Flags", "LiveStreamBroadcaster", "_LiveStreamBroadcaster", "messenger", "name", "#packages", "#lock", "#lockArray", "#sender", "#output", "ByteArrayOutput", "#sabOption", "Option", "#availableUpdate", "#version", "#capacity", "#invalid", "#lockShared", "Communicator", "dispatchAndForget", "lock", "buffer", "update", "#updateAvailable", "capacity", "#computeCapacity", "size", "nextPowOf2", "data", "Lock", "#flushData", "address", "provider", "#storeChunk", "PackageType", "output", "values", "value", "#compileStructure", "reason", "option", "#sumRequiredCapacity", "Arrays", "assert", "requiredCapacity", "Flags", "pack", "sum", "#invalidate", "type", "Peaks", "_Peaks", "input", "assert", "numStages", "stages", "i", "dataOffset", "numPeaks", "shift", "mask", "numData", "data", "array", "numFrames", "numChannels", "unitsPerPixel", "output", "ByteArrayOutput", "width", "ratio", "ShiftPadding", "maxShift", "Arrays", "index", "Stage", "bits", "Float16", "Unhandled", "PeakWorker", "messenger", "Communicator", "progress", "shifts", "frames", "numFrames", "numChannels", "generatePeaks", "panic", "State", "time", "stopwatch", "numShifts", "stages", "dataOffset", "initStages", "data", "Arrays", "minMask", "total", "count", "channel", "channelData", "channelFrames", "states", "min", "max", "position", "i", "frame", "stage", "state", "pack", "Peaks", "index", "shift", "numPeaks", "f0", "f1", "bits0", "Float16", "bits1", "PeaksPainter", "path", "peaks", "channelIndex", "u0", "u1", "v0", "v1", "x0", "x1", "y0", "y1", "unitsEachPixel", "stage", "scale", "unitsEachPeak", "pixelOverFlow", "peaksEachPixel", "from", "indexFrom", "min", "max", "data", "x", "to", "indexTo", "swap", "bits", "Peaks", "yMin", "yMax", "ry0", "ry1", "tmp", "OpfsWorker", "readLimiter", "Promises", "writeLimiter", "messenger", "Communicator", "path", "data", "#resolveFile", "handle", "size", "buffer", "segments", "pathToSegments", "#resolveFolder", "folder", "asDefined", "status", "Arrays", "result", "name", "kind", "options", "segment", "noSlashes", "key", "Metronome", "#output", "AudioBuffer", "#clicks", "blocks", "p0", "p1", "bpm", "s0", "s1", "flags", "Bits", "position", "Fragmentor", "PPQN", "assert", "distanceToEvent", "Click", "i", "#frequency", "#position", "#startIndex", "timeCode", "startIndex", "buffer", "start", "end", "l", "r", "attack", "release", "index", "env", "amp", "TAU", "BlockRenderer", "#context", "#callbacks", "#tempoChanged", "#currentMarker", "#someMarkersChanged", "#freeRunningPosition", "#playEvents", "context", "SetMultimap", "value", "position", "callback", "Terminable", "procedure", "markerChanged", "timeInfo", "timelineBox", "markerTrack", "bpm", "transporting", "blocks", "p0", "s0", "index", "discontinuous", "marker", "isDefined", "sn", "p1", "PPQN", "action", "actionPosition", "markers", "Iterables", "prev", "next", "from", "to", "enabled", "loopTo", "s1", "BlockFlags", "advanceToEvent", "processInfo", "AudioLoaderWorklet", "uuid", "engineToClient", "data", "#data", "Option", "#state", "_observer", "Terminable", "AudioManagerWorklet", "#engineToClient", "#set", "UUID", "handler", "_uuid", "TrackState", "uuid", "Option", "ClipSequencingAudioContext", "#boxGraph", "#states", "#started", "#stopped", "#obsolete", "boxGraph", "update", "state", "playing", "#onStop", "UUID", "optWaiting", "identity", "clipAdapter", "trackState", "optClip", "waiting", "Arrays", "clip", "trackKey", "p0", "p1", "optNextClip", "scheduleDuration", "PPQN", "scheduleEnd", "quantizeFloor", "#onStart", "changes", "clipKey", "AudioUnitOptions", "DEBUG", "#terminator", "#messenger", "#boxGraph", "#timeInfo", "#engineToClient", "#boxAdapters", "#audioManager", "#audioUnits", "#rootBoxAdapter", "#timelineBoxAdapter", "#parameterFieldAdapters", "#audioGraph", "#audioGraphSorting", "#notifier", "#mixer", "#liveStreamBroadcaster", "#clipSequencing", "#updateClock", "#peaks", "#metronome", "#renderer", "#stateSender", "#stemExports", "#processQueue", "Option", "#primaryOutput", "#context", "#panic", "#running", "sab", "project", "exportConfiguration", "boxGraph", "rootBox", "timelineBox", "ProjectDecoder", "Terminator", "Messenger", "TimeInfo", "Communicator", "dispatcher", "message", "uuid", "changes", "state", "AudioManagerWorklet", "UUID", "unit", "ParameterFieldAdapters", "BoxAdapters", "RootBoxAdapter", "TimelineBoxAdapter", "Graph", "TopologicalSort", "Notifier", "Mixer", "Metronome", "BlockRenderer", "SyncStream", "EngineStateSchema", "x", "LiveStreamBroadcaster", "UpdateClock", "PeakBroadcaster", "Address", "ClipSequencingAudioContext", "createSyncTarget", "value", "position", "metronomeEnabled", "PPQN", "subscription", "processor", "box", "pitch", "velocity", "clipIds", "clipId", "optClipBox", "clipAdapter", "ClipAdapters", "trackIds", "trackId", "TrackBoxAdapter", "context", "adapter", "uuidAsString", "options", "isDefined", "AudioUnitOptions", "audioUnit", "AudioUnit", "added", "assert", "EmptyExec", "Arrays", "configuration", "uuidString", "inputs", "outputs", "error", "_inputs", "output", "panic", "index", "processors", "processInfo", "l", "r", "observer", "source", "target"]
|
7
|
-
}
|