@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/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/generators.js", "../../../lib/std/dist/geom.js", "../../../lib/std/dist/hash.js", "../../../lib/std/dist/intervals.js", "../../../lib/std/dist/sets.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/dsp/dist/bpm-tools.js", "../../../lib/dsp/dist/chords.js", "../../../lib/dsp/dist/events.js", "../../../lib/dsp/dist/ppqn.js", "../../../lib/dsp/dist/fractions.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", "../../core-processors/src/MeterProcessor.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 { 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", "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", "export class Sets {\n static #EMPTY = Object.freeze(new Set());\n static empty = () => Sets.#EMPTY;\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", "/**\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", "// 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", "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 {PeakMeterProcessorOptions} from \"@opendaw/studio-adapters\"\nimport {RenderQuantum} from \"./constants\"\nimport {RMS} from \"@opendaw/lib-dsp\"\nimport {Arrays, int, Schema, SyncStream} from \"@opendaw/lib-std\"\n\nregisterProcessor(\"peak-meter-processor\", class extends AudioWorkletProcessor {\n readonly #numberOfChannels: int\n readonly #maxPeak: Float32Array\n readonly #maxSquared: Float32Array\n readonly #rmsChannels: ReadonlyArray<RMS>\n readonly #writer: SyncStream.Writer\n\n #blocksProcessed: int = 0 | 0\n\n constructor({processorOptions: {sab, numberOfChannels, rmsWindowInSeconds, valueDecay}}: {\n processorOptions: PeakMeterProcessorOptions\n } & AudioNodeOptions) {\n super()\n\n this.#numberOfChannels = numberOfChannels\n this.#maxPeak = new Float32Array(numberOfChannels)\n this.#maxSquared = new Float32Array(numberOfChannels)\n this.#rmsChannels = Arrays.create(() => new RMS(sampleRate * rmsWindowInSeconds), numberOfChannels)\n\n const io = Schema.createBuilder({\n peak: Schema.floats(numberOfChannels),\n rms: Schema.floats(numberOfChannels)\n })()\n\n this.#writer = SyncStream.writer(io, sab, x => {\n const valueDecayMultiplier = Math.exp(-(128.0 * this.#blocksProcessed) / (sampleRate * valueDecay))\n for (let channelIndex: number = 0; channelIndex < numberOfChannels; ++channelIndex) {\n const peak = this.#maxPeak[channelIndex]\n const square = this.#maxSquared[channelIndex]\n x.peak[channelIndex] = peak\n x.rms[channelIndex] = Math.sqrt(square)\n this.#maxPeak[channelIndex] = peak * valueDecayMultiplier\n this.#maxSquared[channelIndex] = square * valueDecayMultiplier\n }\n this.#blocksProcessed = 0\n })\n }\n\n process([input]: ReadonlyArray<ReadonlyArray<Float32Array>>): boolean {\n for (let channel: int = 0; channel < this.#numberOfChannels; ++channel) {\n const inputChannel: Float32Array = input[channel]\n if (undefined === inputChannel) {\n this.#maxPeak[channel] = 0.0\n this.#maxSquared[channel] = 0.0\n } else {\n const rms: RMS = this.#rmsChannels[channel]\n let peak: number = this.#maxPeak[channel]\n let squared: number = this.#maxSquared[channel]\n for (let i: int = 0 | 0; i < RenderQuantum; ++i) {\n const inp = inputChannel[i] // we pass the signal\n peak = Math.max(peak, Math.abs(inp))\n squared = Math.max(squared, rms.pushPop(inp * inp))\n }\n this.#maxPeak[channel] = peak\n this.#maxSquared[channel] = squared\n }\n }\n this.#blocksProcessed++\n this.#writer.tryWrite()\n return true\n }\n})"],
|
5
|
-
"mappings": "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",
|
6
|
-
"names": ["isDefined", "value", "asDefined", "value", "fail", "panic", "getOrProvide", "value", "Unhandled", "empty", "panic", "issue", "assert", "condition", "fail", "getOrProvide", "EmptyExec", "Sorting", "Arrays", "#empty", "array", "newValues", "procedure", "index", "fail", "asDefined", "factory", "n", "a", "b", "i", "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", "Color", "color", "colorValues", "isDefined", "value", "NumberComparator", "a", "b", "TAU", "PI_HALF", "PI_QUART", "INVERSE_SQRT_2", "clamp", "value", "min", "max", "mod", "value", "range", "fract", "nextPowOf2", "n", "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", "_", "ByteArrayInput", "#view", "#position", "buffer", "byteOffset", "value", "panic", "read", "array", "i", "length", "result", "count", "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", "Sets", "_Sets", "#EMPTY", "Objects", "u", "v", "keys", "key", "panic", "obj", "result", "exclude", "value", "target", "patch", "Terminable", "EmptyExec", "exec", "terminables", "ObservableValue", "value", "_observer", "Terminable", "observer", "MutableObservableValue", "_", "observableValue", "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", "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", "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", "s", "#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", "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", "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", "Groove", "position", "MidiKeys", "bits", "keyIndex", "note", "PredefinedScaleImpl", "#name", "#bits", "name", "keys", "other", "NoteEvent", "event", "a", "b", "positionDiff", "pitchDiff", "ratio", "curve", "diffComplete", "EventSpan", "Waveform", "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", "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", "#numberOfChannels", "#maxPeak", "#maxSquared", "#rmsChannels", "#writer", "#blocksProcessed", "sab", "numberOfChannels", "rmsWindowInSeconds", "valueDecay", "Arrays", "RMS", "io", "Schema", "SyncStream", "x", "valueDecayMultiplier", "channelIndex", "peak", "square", "input", "channel", "inputChannel", "rms", "squared", "i", "inp"]
|
7
|
-
}
|