@libraz/libsonare 1.3.3 → 1.4.0

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/worklet.d.ts CHANGED
@@ -1,9 +1,16 @@
1
- import { ProgressCallback, WasmNnlsChromaResult, WasmFourierTempogramResult, WasmCyclicTempogramResult, WasmFrameResult, WasmTempogramResult, WasmTrimResult, WasmDecomposeResult, WasmHpssWithResidualResult, WasmLufsResult, WasmMatrix2dResult, WasmEngineAutomationPoint, WasmEngineBounceOptions, WasmEngineBounceResult, WasmEngineCaptureStatus, WasmEngineClip, WasmEngineFreezeOptions, WasmEngineFreezeResult, WasmEngineGraphSpec, WasmEngineMarker, WasmEngineMeterTelemetry, WasmEngineMetronomeConfig, WasmEngineParameterInfo, WasmEngineTelemetry, WasmEngineTempoSegment, WasmEngineTimeSignatureSegment, WasmEngineTransportState, WasmClipPageRequest, WasmEngineProcessWithMonitorResult, SonareModule } from './sonare.js';
1
+ import { ProgressCallback, WasmNnlsChromaResult, WasmFourierTempogramResult, WasmCyclicTempogramResult, WasmFrameResult, WasmTempogramResult, WasmTrimResult, WasmDecomposeResult, WasmHpssWithResidualResult, WasmLufsResult, WasmMatrix2dResult, WasmEngineAutomationPoint, WasmEngineBounceOptions, WasmEngineBounceResult, WasmEngineCaptureStatus, WasmEngineClip, WasmEngineFreezeOptions, WasmEngineFreezeResult, WasmEngineGraphSpec, WasmEngineMarker, WasmEngineMeterTelemetry, WasmEngineMeterTelemetryWide, WasmEngineMetronomeConfig, WasmEngineParameterInfo, WasmEngineScopeTelemetry, WasmEngineTelemetry, WasmEngineTempoSegment, WasmEngineTimeSignatureSegment, WasmEngineTransportState, WasmClipPageRequest, WasmEngineProcessWithMonitorResult, SonareModule } from './sonare.js';
2
2
 
3
3
  /**
4
4
  * Per-call validation options accepted by guarded wrappers. Empty-buffer
5
5
  * checks are always performed; pass `{ validate: false }` to opt out of the
6
6
  * O(n) NaN/Inf scan on hot paths.
7
+ *
8
+ * `{ validate: false }` only skips this JS-side pre-scan (which raises a
9
+ * `RangeError` naming the exact offending index). It is NOT a way to push
10
+ * non-finite samples into the core: the native layer always re-validates the
11
+ * buffer (see `validate_offline_audio_input` in the C++ core), matching the C
12
+ * ABI / Node / Python surfaces, so an NaN/Inf buffer still throws — just with a
13
+ * generic native message instead of the indexed JS one.
7
14
  */
8
15
  interface ValidateOptions {
9
16
  validate?: boolean;
@@ -227,6 +234,36 @@ interface NoteStretchOptions {
227
234
  /** Stretch ratio (0.5 = double duration, 2.0 = half duration). Default 1. */
228
235
  stretchRatio?: number;
229
236
  }
237
+ /** How a `spectralEdit` region op modifies the masked bins. */
238
+ type SpectralEditMode = 'gain' | 'attenuate' | 'mute' | 'heal';
239
+ /** Analysis/synthesis window used by `spectralEdit`. */
240
+ type SpectralEditWindow = 'hann' | 'hamming' | 'blackman' | 'rectangular';
241
+ /** One time x frequency rectangle edit op for `spectralEdit`. */
242
+ interface SpectralRegionOp {
243
+ /** Region time start (input samples); clamped to [0, length]. Default 0. */
244
+ startSample?: number;
245
+ /** Region time end, exclusive (input samples); clamped to [0, length]. Default = signal length. */
246
+ endSample?: number;
247
+ /** Region frequency low edge in Hz; clamped to [0, nyquist]. Default 0. */
248
+ lowHz?: number;
249
+ /** Region frequency high edge in Hz; <=0 or >= nyquist means nyquist. Default 0. */
250
+ highHz?: number;
251
+ /** Linear gain in dB for 'gain'/'attenuate'; ignored by 'mute'/'heal'. Default 0. */
252
+ gainDb?: number;
253
+ /** Edit mode. Default 'gain'. */
254
+ mode?: SpectralEditMode;
255
+ }
256
+ /** STFT + heal parameters for `spectralEdit`. All fields are optional. */
257
+ interface SpectralEditOptions {
258
+ /** FFT size; must be a power of two (>= 2). Default 2048. */
259
+ nFft?: number;
260
+ /** Hop length; must satisfy 0 < hop <= nFft/2. Default 512. */
261
+ hopLength?: number;
262
+ /** Analysis + synthesis window. Default 'hann'. */
263
+ window?: SpectralEditWindow;
264
+ /** Neighbour frames each side used by 'heal' (>= 1). Default 2. */
265
+ healRadiusFrames?: number;
266
+ }
230
267
  /**
231
268
  * Detected beat
232
269
  */
@@ -490,6 +527,23 @@ interface MasteringResult {
490
527
  }
491
528
  type MasteringProcessorParams = Record<string, number | boolean>;
492
529
  type PanMode = 'balance' | 'stereoPan' | 'stereo-pan' | 'dualPan' | 'dual-pan' | number;
530
+ /**
531
+ * Surround pan position for a strip feeding a >2-channel bus. Phase 1 honors
532
+ * `azimuth`/`divergence`/`lfe`; `elevation`/`distance` are reserved. All fields
533
+ * are optional and default to a centered point source.
534
+ */
535
+ interface SurroundPan {
536
+ /** -180..180 deg, 0 = front-center, positive = right. */
537
+ azimuth?: number;
538
+ /** Reserved (no height beds in phase 1). */
539
+ elevation?: number;
540
+ /** 0 = point source, 1 = spread across the front. */
541
+ divergence?: number;
542
+ /** 0..1 scalar send into the LFE plane. */
543
+ lfe?: number;
544
+ /** Reserved (focus/spread), defaults to 1. */
545
+ distance?: number;
546
+ }
493
547
  interface MixOptions {
494
548
  inputTrimDb?: number | number[];
495
549
  faderDb?: number | number[];
@@ -1079,6 +1133,21 @@ declare function voiceChangeRealtime(samples: Float32Array, options?: VoiceChang
1079
1133
  * @returns Normalized audio
1080
1134
  */
1081
1135
  declare function normalize(samples: Float32Array, sampleRate: number, targetDb?: number, options?: ValidateOptions): Float32Array;
1136
+ /**
1137
+ * Apply region-based spectral edits (gain/attenuate/mute/heal) to mono audio.
1138
+ *
1139
+ * Each op is a time x frequency rectangle applied in array order over a single
1140
+ * STFT buffer, so a later op observes the result of earlier ops. The output has
1141
+ * the same length and sample rate as the input; an empty `ops` list is an
1142
+ * identity transform (within the iSTFT's own tolerance).
1143
+ *
1144
+ * @param samples - Audio samples (mono, float32)
1145
+ * @param sampleRate - Sample rate in Hz
1146
+ * @param ops - Region edit ops applied in order ({@link SpectralRegionOp})
1147
+ * @param options - STFT + heal configuration ({@link SpectralEditOptions})
1148
+ * @returns Edited audio
1149
+ */
1150
+ declare function spectralEdit(samples: Float32Array, sampleRate: number, ops?: SpectralRegionOp[], options?: SpectralEditOptions & ValidateOptions): Float32Array;
1082
1151
  /**
1083
1152
  * Apply mastering loudness normalization with a true-peak ceiling.
1084
1153
  *
@@ -1106,6 +1175,62 @@ declare function masteringInsertNames(): string[];
1106
1175
  * @param name - Insert processor name (see {@link masteringInsertNames}).
1107
1176
  */
1108
1177
  declare function masteringInsertParamNames(name: string): string[];
1178
+ /** One realtime-automatable parameter of an insert processor. */
1179
+ interface MasteringInsertParamInfo {
1180
+ /** JSON-key parameter name, as used in scene insert params. */
1181
+ name: string;
1182
+ /** Integer param id for realtime automation lanes / MIDI-CC binding. */
1183
+ id: number;
1184
+ /** Whether the param can be changed live from the audio thread. */
1185
+ rtSafe: boolean;
1186
+ }
1187
+ /**
1188
+ * Returns the realtime-automatable parameter descriptors for an insert / FX
1189
+ * processor: each entry maps a JSON-key parameter name to the integer id used by
1190
+ * realtime automation and reports whether it is realtime-safe. Unlike
1191
+ * {@link masteringInsertParamNames} (every construction key), this lists only the
1192
+ * realtime-controllable subset — the keys accepted by
1193
+ * {@link RealtimeEngine.setTrackStripInsertParamByName}. Returns an empty array
1194
+ * for an unknown name or a processor with no automatable parameters.
1195
+ *
1196
+ * @param name - Insert processor name (see {@link masteringInsertNames}).
1197
+ */
1198
+ declare function masteringInsertParamInfo(name: string): MasteringInsertParamInfo[];
1199
+ /**
1200
+ * How a processor handles a buffer with more than two channels (a surround
1201
+ * bed). "multichannel" processes every plane in one call; "stereoPairOnly"
1202
+ * operates on the front L/R pair and passes any surround planes through dry.
1203
+ * "perChannel"/"passthrough" are reserved and unused by the current catalog.
1204
+ */
1205
+ type MasteringChannelPolicy = 'multichannel' | 'stereoPairOnly' | 'perChannel' | 'passthrough';
1206
+ /** One processor's realtime/offline/pair classification in the catalog. */
1207
+ interface MasteringProcessorCatalogEntry {
1208
+ /** Processor id (the name used for scene inserts / named processors). */
1209
+ id: string;
1210
+ /**
1211
+ * Primary classification, by precedence pair > realtime > offline: "pair" for
1212
+ * two-input match.* processors, "realtime" for ids that build as a realtime
1213
+ * scene insert, "offline" for whole-file-only processors.
1214
+ */
1215
+ kind: 'realtime' | 'offline' | 'pair';
1216
+ /** True exactly for ids that always succeed as a realtime scene insert. */
1217
+ realtimeInsertable: boolean;
1218
+ /** True for processors with no mono implementation (stereo-only). */
1219
+ stereoOnly: boolean;
1220
+ /**
1221
+ * How the mixer wraps the processor on a >2-channel (surround) bus insert:
1222
+ * "multichannel" (one full-buffer call) or "stereoPairOnly" (front L/R pair,
1223
+ * surround planes passed through dry).
1224
+ */
1225
+ channelPolicy: MasteringChannelPolicy;
1226
+ }
1227
+ /**
1228
+ * Returns the machine-readable classification catalog for every named processor
1229
+ * id, merging the offline registry, the realtime insert factory, and the pair
1230
+ * registry. Lets a host filter a processor picker by realtime insertability
1231
+ * instead of offering ids the realtime strip would reject.
1232
+ */
1233
+ declare function masteringProcessorCatalog(): MasteringProcessorCatalogEntry[];
1109
1234
  declare function masteringPairProcessorNames(): PairProcessor[];
1110
1235
  declare function masteringPairAnalysisNames(): PairAnalysis[];
1111
1236
  declare function masteringStereoAnalysisNames(): StereoAnalysis[];
@@ -1670,7 +1795,9 @@ declare function tempogramRatio(tempogramData: Float32Array, winLength?: number,
1670
1795
  * Measure loudness (EBU R128 / ITU-R BS.1770).
1671
1796
  *
1672
1797
  * @param samples - Audio samples (mono, float32)
1673
- * @param sampleRate - Sample rate in Hz (default: 22050)
1798
+ * @param sampleRate - Sample rate in Hz. The default (22050) is non-standard for
1799
+ * audio; pass the buffer's actual rate, as K-weighting is sample-rate
1800
+ * dependent and a wrong rate yields wrong loudness.
1674
1801
  * @returns Loudness measurement result
1675
1802
  */
1676
1803
  declare function lufs(samples: Float32Array, sampleRate?: number, options?: ValidateOptions): LufsResult;
@@ -1678,7 +1805,8 @@ declare function lufs(samples: Float32Array, sampleRate?: number, options?: Vali
1678
1805
  * Compute the momentary loudness (LUFS) over time.
1679
1806
  *
1680
1807
  * @param samples - Audio samples (mono, float32)
1681
- * @param sampleRate - Sample rate in Hz (default: 22050)
1808
+ * @param sampleRate - Sample rate in Hz. The default (22050) is non-standard and
1809
+ * K-weighting is sample-rate dependent; pass the buffer's actual rate.
1682
1810
  * @returns Momentary LUFS values over time
1683
1811
  */
1684
1812
  declare function momentaryLufs(samples: Float32Array, sampleRate?: number, options?: ValidateOptions): Float32Array;
@@ -1686,7 +1814,8 @@ declare function momentaryLufs(samples: Float32Array, sampleRate?: number, optio
1686
1814
  * Compute the short-term loudness (LUFS) over time.
1687
1815
  *
1688
1816
  * @param samples - Audio samples (mono, float32)
1689
- * @param sampleRate - Sample rate in Hz (default: 22050)
1817
+ * @param sampleRate - Sample rate in Hz. The default (22050) is non-standard and
1818
+ * K-weighting is sample-rate dependent; pass the buffer's actual rate.
1690
1819
  * @returns Short-term LUFS values over time
1691
1820
  */
1692
1821
  declare function shortTermLufs(samples: Float32Array, sampleRate?: number, options?: ValidateOptions): Float32Array;
@@ -1883,10 +2012,16 @@ declare function hpssWithResidual(samples: Float32Array, sampleRate?: number, ke
1883
2012
  * Channel-weighted multichannel integrated loudness + LRA (ITU-R BS.1770 /
1884
2013
  * EBU R128) from an interleaved buffer of `frames * channels` samples. The
1885
2014
  * per-channel frame count is derived from the buffer length and `channels`.
2015
+ *
2016
+ * Pass the buffer's actual `sampleRate`: the default (22050) is non-standard for
2017
+ * audio, and K-weighting is sample-rate dependent, so a wrong rate yields wrong
2018
+ * loudness.
1886
2019
  */
1887
2020
  declare function lufsInterleaved(samples: Float32Array, channels: number, sampleRate?: number, options?: ValidateOptions): WasmLufsResult;
1888
2021
  /**
1889
- * Standards-compliant EBU R128 loudness range (LRA) in LU.
2022
+ * Standards-compliant EBU R128 loudness range (LRA) in LU. Pass the buffer's
2023
+ * actual `sampleRate`: the default (22050) is non-standard and K-weighting is
2024
+ * sample-rate dependent.
1890
2025
  */
1891
2026
  declare function ebur128LoudnessRange(samples: Float32Array, sampleRate?: number): number;
1892
2027
  /**
@@ -2097,6 +2232,9 @@ declare function mfccToAudio(mfccCoefficients: Float32Array, nMfcc: number, nFra
2097
2232
  */
2098
2233
  declare function chroma(samples: Float32Array, sampleRate?: number, nFft?: number, hopLength?: number, options?: GuardedOptions$1): ChromaResult;
2099
2234
 
2235
+ type WorkletInput = readonly (readonly Float32Array[])[];
2236
+ type WorkletOutput = Float32Array[][];
2237
+
2100
2238
  interface SonareRtModule {
2101
2239
  _malloc(size: number): number;
2102
2240
  _free(ptr: number): void;
@@ -2154,6 +2292,179 @@ interface SonareRtModule {
2154
2292
  ): number;
2155
2293
  }
2156
2294
 
2295
+ interface SonareWorkletMeterSnapshot {
2296
+ type: 'meter';
2297
+ targetId: number;
2298
+ frame: number;
2299
+ peakDbL: number;
2300
+ peakDbR: number;
2301
+ rmsDbL: number;
2302
+ rmsDbR: number;
2303
+ correlation: number;
2304
+ truePeakDbL: number;
2305
+ truePeakDbR: number;
2306
+ momentaryLufs: number;
2307
+ shortTermLufs: number;
2308
+ integratedLufs: number;
2309
+ gainReductionDb: number;
2310
+ }
2311
+ interface SonareWorkletSpectrumSnapshot {
2312
+ type: 'spectrum';
2313
+ frame: number;
2314
+ bands: Float32Array;
2315
+ }
2316
+ declare const SONARE_METER_RING_HEADER_INTS = 4;
2317
+ declare const SONARE_METER_RING_RECORD_FLOATS = 14;
2318
+ declare const SONARE_SPECTRUM_RING_HEADER_INTS = 5;
2319
+ declare const SONARE_SCOPE_RING_HEADER_INTS = 6;
2320
+ /** Low 24 bits of a frame index (exact in Float32). */
2321
+ declare function encodeFrameLo(frame: number): number;
2322
+ /** High bits of a frame index above 2^24 (exact in Float32 up to ~2^48). */
2323
+ declare function encodeFrameHi(frame: number): number;
2324
+ /** Reconstruct a frame index from its low/high Float32 lanes. */
2325
+ declare function decodeFrame(lo: number, hi: number): number;
2326
+ declare const SONARE_ENGINE_RING_HEADER_INTS = 5;
2327
+ declare const SONARE_ENGINE_COMMAND_RECORD_BYTES = 32;
2328
+ declare const SONARE_ENGINE_TELEMETRY_RECORD_BYTES = 48;
2329
+ declare enum SonareEngineCommandType {
2330
+ SetParam = 0,
2331
+ SetParamSmoothed = 1,
2332
+ TransportPlay = 2,
2333
+ TransportStop = 3,
2334
+ TransportSeekSample = 4,
2335
+ TransportSeekPpq = 5,
2336
+ SetTempoMap = 6,
2337
+ SetLoop = 7,
2338
+ SwapGraph = 8,
2339
+ SwapAutomation = 9,
2340
+ SetSoloMute = 10,
2341
+ AddClip = 11,
2342
+ RemoveClip = 12,
2343
+ ArmRecord = 13,
2344
+ Punch = 14,
2345
+ SetMetronome = 15,
2346
+ SetMarker = 16,
2347
+ SeekMarker = 17
2348
+ }
2349
+ declare enum SonareEngineTelemetryType {
2350
+ ProcessBlock = 0,
2351
+ Error = 1
2352
+ }
2353
+ declare enum SonareEngineTelemetryError {
2354
+ None = 0,
2355
+ CommandQueueOverflow = 1,
2356
+ PendingCommandOverflow = 2,
2357
+ BoundaryOverflow = 3,
2358
+ TelemetryOverflow = 4,
2359
+ CaptureOverflow = 5,
2360
+ MaxBlockExceeded = 6,
2361
+ UnknownTarget = 7,
2362
+ NonRealtimeSafeParameter = 8,
2363
+ NotPrepared = 9,
2364
+ NonQueueableCommand = 10,
2365
+ AutomationBindTargetOverflow = 11,
2366
+ StaleAutomationLanes = 12,
2367
+ SmoothedParameterCapacity = 13
2368
+ }
2369
+ interface SonareMeterRingBuffer {
2370
+ sharedBuffer: SharedArrayBuffer;
2371
+ header: Int32Array;
2372
+ records: Float32Array;
2373
+ capacity: number;
2374
+ }
2375
+ interface SonareMeterRingReadResult {
2376
+ nextReadIndex: number;
2377
+ meters: SonareWorkletMeterSnapshot[];
2378
+ }
2379
+ interface SonareSpectrumRingBuffer {
2380
+ sharedBuffer: SharedArrayBuffer;
2381
+ header: Int32Array;
2382
+ records: Float32Array;
2383
+ capacity: number;
2384
+ bands: number;
2385
+ }
2386
+ interface SonareSpectrumRingReadResult {
2387
+ nextReadIndex: number;
2388
+ spectra: SonareWorkletSpectrumSnapshot[];
2389
+ }
2390
+ /**
2391
+ * A single target-addressed scope record drained from the realtime engine's
2392
+ * scope ring: an FFT magnitude spectrum plus a decimated goniometer/vectorscope
2393
+ * point cloud. Unlike {@link SonareWorkletSpectrumSnapshot} (the legacy
2394
+ * coarse-DFT meter spectrum), this carries a `targetId` (master/lane/bus) and a
2395
+ * stereo point cloud, mirroring the engine's `ScopeTelemetryRecord`.
2396
+ */
2397
+ interface SonareWorkletScopeSnapshot {
2398
+ type: 'scope';
2399
+ targetId: number;
2400
+ frame: number;
2401
+ /** Linear-band magnitudes in dB (length = the configured band count). */
2402
+ bands: Float32Array;
2403
+ /** Interleaved stereo goniometer points: [l0, r0, l1, r1, ...]. */
2404
+ points: Float32Array;
2405
+ }
2406
+ interface SonareScopeRingBuffer {
2407
+ sharedBuffer: SharedArrayBuffer;
2408
+ header: Int32Array;
2409
+ records: Float32Array;
2410
+ capacity: number;
2411
+ bands: number;
2412
+ maxPoints: number;
2413
+ }
2414
+ interface SonareScopeRingReadResult {
2415
+ nextReadIndex: number;
2416
+ scopes: SonareWorkletScopeSnapshot[];
2417
+ }
2418
+ interface SonareEngineCommandRecord {
2419
+ type: SonareEngineCommandType | number;
2420
+ targetId?: number;
2421
+ sampleTime?: number | bigint;
2422
+ argFloat?: number;
2423
+ argInt?: number | bigint;
2424
+ }
2425
+ interface SonareEngineTelemetryRecord {
2426
+ type: SonareEngineTelemetryType | number;
2427
+ error: SonareEngineTelemetryError | number;
2428
+ renderFrame: number;
2429
+ timelineSample: number;
2430
+ audibleTimelineSample: number;
2431
+ graphLatencySamplesQ8: number;
2432
+ value: number;
2433
+ }
2434
+ interface SonareEngineCommandRingBuffer {
2435
+ sharedBuffer: SharedArrayBuffer;
2436
+ header: Int32Array;
2437
+ view: DataView;
2438
+ capacity: number;
2439
+ }
2440
+ interface SonareEngineTelemetryRingBuffer {
2441
+ sharedBuffer: SharedArrayBuffer;
2442
+ header: Int32Array;
2443
+ view: DataView;
2444
+ capacity: number;
2445
+ }
2446
+ interface SonareEngineTelemetryRingReadResult {
2447
+ nextReadIndex: number;
2448
+ telemetry: SonareEngineTelemetryRecord[];
2449
+ }
2450
+ declare function sonareMeterRingBufferByteLength(capacity: number): number;
2451
+ declare function createSonareMeterRingBuffer(capacity?: number): SonareMeterRingBuffer;
2452
+ declare function readSonareMeterRingBuffer(ring: SonareMeterRingBuffer, readIndex?: number): SonareMeterRingReadResult;
2453
+ declare function sonareSpectrumRingBufferByteLength(capacity: number, bands?: number): number;
2454
+ declare function createSonareSpectrumRingBuffer(capacity?: number, bands?: number): SonareSpectrumRingBuffer;
2455
+ declare function readSonareSpectrumRingBuffer(ring: SonareSpectrumRingBuffer, readIndex?: number): SonareSpectrumRingReadResult;
2456
+ declare function sonareScopeRingBufferByteLength(capacity: number, bands?: number, maxPoints?: number): number;
2457
+ declare function createSonareScopeRingBuffer(capacity?: number, bands?: number, maxPoints?: number): SonareScopeRingBuffer;
2458
+ declare function readSonareScopeRingBuffer(ring: SonareScopeRingBuffer, readIndex?: number): SonareScopeRingReadResult;
2459
+ declare function sonareEngineCommandRingBufferByteLength(capacity: number): number;
2460
+ declare function sonareEngineTelemetryRingBufferByteLength(capacity: number): number;
2461
+ declare function createSonareEngineCommandRingBuffer(capacity?: number): SonareEngineCommandRingBuffer;
2462
+ declare function createSonareEngineTelemetryRingBuffer(capacity?: number): SonareEngineTelemetryRingBuffer;
2463
+ declare function pushSonareEngineCommandRingBuffer(ring: SonareEngineCommandRingBuffer, command: SonareEngineCommandRecord): boolean;
2464
+ declare function popSonareEngineCommandRingBuffer(ring: SonareEngineCommandRingBuffer): SonareEngineCommandRecord | null;
2465
+ declare function writeSonareEngineTelemetryRingBuffer(ring: SonareEngineTelemetryRingBuffer, telemetry: SonareEngineTelemetryRecord): void;
2466
+ declare function readSonareEngineTelemetryRingBuffer(ring: SonareEngineTelemetryRingBuffer, readIndex?: number): SonareEngineTelemetryRingReadResult;
2467
+
2157
2468
  interface SonareWorkletProcessorOptions {
2158
2469
  sceneJson: string;
2159
2470
  sampleRate?: number;
@@ -2184,6 +2495,10 @@ interface SonareRealtimeEngineWorkletProcessorOptions {
2184
2495
  telemetryRingCapacity?: number;
2185
2496
  meterSharedBuffer?: SharedArrayBuffer;
2186
2497
  meterRingCapacity?: number;
2498
+ scopeIntervalFrames?: number;
2499
+ scopeBands?: number;
2500
+ scopeSharedBuffer?: SharedArrayBuffer;
2501
+ scopeRingCapacity?: number;
2187
2502
  }
2188
2503
  interface SonareRealtimeVoiceChangerWorkletProcessorOptions {
2189
2504
  preset?: RealtimeVoiceChangerConfigInput;
@@ -2235,11 +2550,6 @@ interface SonareRtRealtimeEngineRuntimeOptions {
2235
2550
  telemetrySharedBuffer?: SharedArrayBuffer;
2236
2551
  telemetryRingCapacity?: number;
2237
2552
  }
2238
- interface SonareEngineOptions extends SonareRealtimeEngineNodeOptions {
2239
- offlineEngine?: RealtimeEngine;
2240
- offlineBlockSize?: number;
2241
- offlineChannelCount?: number;
2242
- }
2243
2553
  interface SonareEngineTransportFacade {
2244
2554
  play(sampleTime?: number): boolean;
2245
2555
  stop(sampleTime?: number): boolean;
@@ -2249,8 +2559,6 @@ interface SonareEngineTransportFacade {
2249
2559
  setTempoSegments(segments: readonly EngineTempoSegment[]): void;
2250
2560
  setLoop(startPpq: number, endPpq: number, enabled?: boolean): boolean;
2251
2561
  }
2252
- type WorkletInput = readonly (readonly Float32Array[])[];
2253
- type WorkletOutput = Float32Array[][];
2254
2562
  interface SonareWorkletScheduleInsertAutomationMessage {
2255
2563
  type: 'scheduleInsertAutomation';
2256
2564
  stripIndex: number;
@@ -2268,113 +2576,12 @@ interface SonareWorkletDestroyMessage {
2268
2576
  type: 'destroy';
2269
2577
  }
2270
2578
  type SonareWorkletMessage = SonareWorkletScheduleInsertAutomationMessage | SonareWorkletSetMeterIntervalMessage | SonareWorkletDestroyMessage;
2271
- interface SonareWorkletMeterSnapshot {
2272
- type: 'meter';
2273
- targetId: number;
2274
- frame: number;
2275
- peakDbL: number;
2276
- peakDbR: number;
2277
- rmsDbL: number;
2278
- rmsDbR: number;
2279
- correlation: number;
2280
- truePeakDbL: number;
2281
- truePeakDbR: number;
2282
- momentaryLufs: number;
2283
- shortTermLufs: number;
2284
- integratedLufs: number;
2285
- gainReductionDb: number;
2286
- }
2287
- interface SonareWorkletSpectrumSnapshot {
2288
- type: 'spectrum';
2289
- frame: number;
2290
- bands: Float32Array;
2291
- }
2292
2579
  type SonareWorkletTransportMessage = SonareWorkletMeterSnapshot | SonareWorkletSpectrumSnapshot | SonareEngineTelemetryRecord;
2293
- declare const SONARE_METER_RING_HEADER_INTS = 4;
2294
- declare const SONARE_METER_RING_RECORD_FLOATS = 14;
2295
- declare const SONARE_SPECTRUM_RING_HEADER_INTS = 5;
2296
- /** Low 24 bits of a frame index (exact in Float32). */
2297
- declare function encodeFrameLo(frame: number): number;
2298
- /** High bits of a frame index above 2^24 (exact in Float32 up to ~2^48). */
2299
- declare function encodeFrameHi(frame: number): number;
2300
- /** Reconstruct a frame index from its low/high Float32 lanes. */
2301
- declare function decodeFrame(lo: number, hi: number): number;
2302
- declare const SONARE_ENGINE_RING_HEADER_INTS = 5;
2303
- declare const SONARE_ENGINE_COMMAND_RECORD_BYTES = 32;
2304
- declare const SONARE_ENGINE_TELEMETRY_RECORD_BYTES = 48;
2305
- declare enum SonareEngineCommandType {
2306
- SetParam = 0,
2307
- SetParamSmoothed = 1,
2308
- TransportPlay = 2,
2309
- TransportStop = 3,
2310
- TransportSeekSample = 4,
2311
- TransportSeekPpq = 5,
2312
- SetTempoMap = 6,
2313
- SetLoop = 7,
2314
- SwapGraph = 8,
2315
- SwapAutomation = 9,
2316
- SetSoloMute = 10,
2317
- AddClip = 11,
2318
- RemoveClip = 12,
2319
- ArmRecord = 13,
2320
- Punch = 14,
2321
- SetMetronome = 15,
2322
- SetMarker = 16,
2323
- SeekMarker = 17
2324
- }
2325
- declare enum SonareEngineTelemetryType {
2326
- ProcessBlock = 0,
2327
- Error = 1
2328
- }
2329
- declare enum SonareEngineTelemetryError {
2330
- None = 0,
2331
- CommandQueueOverflow = 1,
2332
- PendingCommandOverflow = 2,
2333
- BoundaryOverflow = 3,
2334
- TelemetryOverflow = 4,
2335
- CaptureOverflow = 5,
2336
- MaxBlockExceeded = 6,
2337
- UnknownTarget = 7,
2338
- NonRealtimeSafeParameter = 8,
2339
- NotPrepared = 9,
2340
- NonQueueableCommand = 10,
2341
- AutomationBindTargetOverflow = 11,
2342
- StaleAutomationLanes = 12,
2343
- SmoothedParameterCapacity = 13
2344
- }
2345
2580
  interface WorkletTransport {
2346
2581
  postMessage?: (message: SonareWorkletTransportMessage | SonareEngineCaptureResponseMessage | SonareEngineTransportResponseMessage, transfer?: Transferable[]) => void;
2347
2582
  onMeter?: (meter: SonareWorkletMeterSnapshot) => void;
2348
2583
  onSpectrum?: (spectrum: SonareWorkletSpectrumSnapshot) => void;
2349
2584
  }
2350
- interface SonareMeterRingBuffer {
2351
- sharedBuffer: SharedArrayBuffer;
2352
- header: Int32Array;
2353
- records: Float32Array;
2354
- capacity: number;
2355
- }
2356
- interface SonareMeterRingReadResult {
2357
- nextReadIndex: number;
2358
- meters: SonareWorkletMeterSnapshot[];
2359
- }
2360
- interface SonareSpectrumRingBuffer {
2361
- sharedBuffer: SharedArrayBuffer;
2362
- header: Int32Array;
2363
- records: Float32Array;
2364
- capacity: number;
2365
- bands: number;
2366
- }
2367
- interface SonareSpectrumRingReadResult {
2368
- nextReadIndex: number;
2369
- spectra: SonareWorkletSpectrumSnapshot[];
2370
- }
2371
- interface SonareEngineCommandRecord {
2372
- type: SonareEngineCommandType | number;
2373
- targetId?: number;
2374
- sampleTime?: number | bigint;
2375
- argFloat?: number;
2376
- argInt?: number | bigint;
2377
- }
2378
2585
  interface SonareEngineSyncClipsMessage {
2379
2586
  type: 'syncClips';
2380
2587
  clips: EngineClip[];
@@ -2424,6 +2631,12 @@ interface SonareEngineSyncMixerMessage {
2424
2631
  sceneJson: string;
2425
2632
  }>;
2426
2633
  masterStripJson?: string;
2634
+ /** Lane insert sidechain bindings (replayed after lanes/strips). */
2635
+ laneSidechains?: Array<{
2636
+ trackId: number;
2637
+ insertIndex: number;
2638
+ sourceTrackId: number;
2639
+ }>;
2427
2640
  }
2428
2641
  interface SonareEngineSyncCaptureMessage {
2429
2642
  type: 'syncCapture';
@@ -2460,6 +2673,45 @@ interface SonareEngineSyncMasterStripInsertBypassedMessage {
2460
2673
  bypassed: boolean;
2461
2674
  resetOnBypass: boolean;
2462
2675
  }
2676
+ interface SonareEngineSyncTrackStripInsertParamByNameMessage {
2677
+ type: 'syncTrackStripInsertParamByName';
2678
+ trackId: number;
2679
+ insertIndex: number;
2680
+ paramName: string;
2681
+ value: number;
2682
+ }
2683
+ interface SonareEngineSyncMasterStripInsertParamByNameMessage {
2684
+ type: 'syncMasterStripInsertParamByName';
2685
+ insertIndex: number;
2686
+ paramName: string;
2687
+ value: number;
2688
+ }
2689
+ interface SonareEngineSyncTrackStripPanMessage {
2690
+ type: 'syncTrackStripPan';
2691
+ trackId: number;
2692
+ pan: number;
2693
+ }
2694
+ interface SonareEngineSyncTrackStripPanLawMessage {
2695
+ type: 'syncTrackStripPanLaw';
2696
+ trackId: number;
2697
+ panLaw: number;
2698
+ }
2699
+ interface SonareEngineSyncTrackStripPanModeMessage {
2700
+ type: 'syncTrackStripPanMode';
2701
+ trackId: number;
2702
+ panMode: number;
2703
+ }
2704
+ interface SonareEngineSyncTrackStripDualPanMessage {
2705
+ type: 'syncTrackStripDualPan';
2706
+ trackId: number;
2707
+ leftPan: number;
2708
+ rightPan: number;
2709
+ }
2710
+ interface SonareEngineSyncTrackStripChannelDelaySamplesMessage {
2711
+ type: 'syncTrackStripChannelDelaySamples';
2712
+ trackId: number;
2713
+ delaySamples: number;
2714
+ }
2463
2715
  interface SonareEngineSyncBuiltinInstrumentMessage {
2464
2716
  type: 'syncBuiltinInstrument';
2465
2717
  destinationId: number;
@@ -2507,32 +2759,7 @@ interface SonareEngineSyncMidiPanicMessage {
2507
2759
  type: 'syncMidiPanic';
2508
2760
  renderFrame: number;
2509
2761
  }
2510
- type SonareEngineSyncMessage = SonareEngineSyncClipsMessage | SonareEngineSyncClipsDeltaMessage | SonareEngineSyncMidiClipsMessage | SonareEngineSyncMarkersMessage | SonareEngineSyncMetronomeMessage | SonareEngineSyncAutomationMessage | SonareEngineSyncTempoMessage | SonareEngineSyncMixerMessage | SonareEngineSyncCaptureMessage | SonareEngineSyncTrackStripEqBandMessage | SonareEngineSyncMasterStripEqBandMessage | SonareEngineSyncTrackStripInsertBypassedMessage | SonareEngineSyncMasterStripInsertBypassedMessage | SonareEngineSyncBuiltinInstrumentMessage | SonareEngineSyncSynthInstrumentMessage | SonareEngineSyncSf2InstrumentMessage | SonareEngineSyncLoadSoundFontMessage | SonareEngineSyncMidiNoteMessage | SonareEngineSyncMidiCcMessage | SonareEngineSyncMidiPanicMessage;
2511
- interface SonareEngineTelemetryRecord {
2512
- type: SonareEngineTelemetryType | number;
2513
- error: SonareEngineTelemetryError | number;
2514
- renderFrame: number;
2515
- timelineSample: number;
2516
- audibleTimelineSample: number;
2517
- graphLatencySamplesQ8: number;
2518
- value: number;
2519
- }
2520
- interface SonareEngineCommandRingBuffer {
2521
- sharedBuffer: SharedArrayBuffer;
2522
- header: Int32Array;
2523
- view: DataView;
2524
- capacity: number;
2525
- }
2526
- interface SonareEngineTelemetryRingBuffer {
2527
- sharedBuffer: SharedArrayBuffer;
2528
- header: Int32Array;
2529
- view: DataView;
2530
- capacity: number;
2531
- }
2532
- interface SonareEngineTelemetryRingReadResult {
2533
- nextReadIndex: number;
2534
- telemetry: SonareEngineTelemetryRecord[];
2535
- }
2762
+ type SonareEngineSyncMessage = SonareEngineSyncClipsMessage | SonareEngineSyncClipsDeltaMessage | SonareEngineSyncMidiClipsMessage | SonareEngineSyncMarkersMessage | SonareEngineSyncMetronomeMessage | SonareEngineSyncAutomationMessage | SonareEngineSyncTempoMessage | SonareEngineSyncMixerMessage | SonareEngineSyncCaptureMessage | SonareEngineSyncTrackStripEqBandMessage | SonareEngineSyncMasterStripEqBandMessage | SonareEngineSyncTrackStripInsertBypassedMessage | SonareEngineSyncMasterStripInsertBypassedMessage | SonareEngineSyncTrackStripInsertParamByNameMessage | SonareEngineSyncMasterStripInsertParamByNameMessage | SonareEngineSyncTrackStripPanMessage | SonareEngineSyncTrackStripPanLawMessage | SonareEngineSyncTrackStripPanModeMessage | SonareEngineSyncTrackStripDualPanMessage | SonareEngineSyncTrackStripChannelDelaySamplesMessage | SonareEngineSyncBuiltinInstrumentMessage | SonareEngineSyncSynthInstrumentMessage | SonareEngineSyncSf2InstrumentMessage | SonareEngineSyncLoadSoundFontMessage | SonareEngineSyncMidiNoteMessage | SonareEngineSyncMidiCcMessage | SonareEngineSyncMidiPanicMessage;
2536
2763
  interface WorkletPort {
2537
2764
  postMessage?: (message: unknown, transfer?: Transferable[]) => void;
2538
2765
  onmessage?: (event: {
@@ -2568,20 +2795,12 @@ interface SonareEngineTransportResponseMessage {
2568
2795
  state?: EngineTransportState;
2569
2796
  error?: string;
2570
2797
  }
2571
- declare function sonareMeterRingBufferByteLength(capacity: number): number;
2572
- declare function createSonareMeterRingBuffer(capacity?: number): SonareMeterRingBuffer;
2573
- declare function readSonareMeterRingBuffer(ring: SonareMeterRingBuffer, readIndex?: number): SonareMeterRingReadResult;
2574
- declare function sonareSpectrumRingBufferByteLength(capacity: number, bands?: number): number;
2575
- declare function createSonareSpectrumRingBuffer(capacity?: number, bands?: number): SonareSpectrumRingBuffer;
2576
- declare function readSonareSpectrumRingBuffer(ring: SonareSpectrumRingBuffer, readIndex?: number): SonareSpectrumRingReadResult;
2577
- declare function sonareEngineCommandRingBufferByteLength(capacity: number): number;
2578
- declare function sonareEngineTelemetryRingBufferByteLength(capacity: number): number;
2579
- declare function createSonareEngineCommandRingBuffer(capacity?: number): SonareEngineCommandRingBuffer;
2580
- declare function createSonareEngineTelemetryRingBuffer(capacity?: number): SonareEngineTelemetryRingBuffer;
2581
- declare function pushSonareEngineCommandRingBuffer(ring: SonareEngineCommandRingBuffer, command: SonareEngineCommandRecord): boolean;
2582
- declare function popSonareEngineCommandRingBuffer(ring: SonareEngineCommandRingBuffer): SonareEngineCommandRecord | null;
2583
- declare function writeSonareEngineTelemetryRingBuffer(ring: SonareEngineTelemetryRingBuffer, telemetry: SonareEngineTelemetryRecord): void;
2584
- declare function readSonareEngineTelemetryRingBuffer(ring: SonareEngineTelemetryRingBuffer, readIndex?: number): SonareEngineTelemetryRingReadResult;
2798
+
2799
+ interface SonareEngineOptions extends SonareRealtimeEngineNodeOptions {
2800
+ offlineEngine?: RealtimeEngine;
2801
+ offlineBlockSize?: number;
2802
+ offlineChannelCount?: number;
2803
+ }
2585
2804
  /**
2586
2805
  * AudioWorklet-style mixer bridge backed by the package's single `sonare.wasm`.
2587
2806
  *
@@ -2633,6 +2852,7 @@ declare class SonareRealtimeEngineWorkletProcessor {
2633
2852
  private commandRing?;
2634
2853
  private telemetryRing?;
2635
2854
  private meterRing?;
2855
+ private scopeRing?;
2636
2856
  private transport?;
2637
2857
  private meterIntervalFrames;
2638
2858
  private lastMeterFrame;
@@ -2653,6 +2873,8 @@ declare class SonareRealtimeEngineWorkletProcessor {
2653
2873
  private publishTelemetryRecord;
2654
2874
  private publishMeters;
2655
2875
  private writeMeterRing;
2876
+ private publishScope;
2877
+ private writeScopeRing;
2656
2878
  private commandRingFromSharedBuffer;
2657
2879
  private telemetryRingFromSharedBuffer;
2658
2880
  }
@@ -2691,11 +2913,14 @@ declare class SonareRealtimeEngineNode {
2691
2913
  readonly commandRing?: SonareEngineCommandRingBuffer;
2692
2914
  readonly telemetryRing?: SonareEngineTelemetryRingBuffer;
2693
2915
  readonly meterRing?: SonareMeterRingBuffer;
2916
+ readonly scopeRing?: SonareScopeRingBuffer;
2694
2917
  readonly ready: Promise<void>;
2695
2918
  private telemetryReadIndex;
2696
2919
  private meterReadIndex;
2920
+ private scopeReadIndex;
2697
2921
  private telemetryListeners;
2698
2922
  private meterListeners;
2923
+ private scopeListeners;
2699
2924
  private captureRequestId;
2700
2925
  private readonly captureRequests;
2701
2926
  private transportRequestId;
@@ -2716,11 +2941,14 @@ declare class SonareRealtimeEngineNode {
2716
2941
  requestTransportState(): Promise<EngineTransportState>;
2717
2942
  pollTelemetry(): SonareEngineTelemetryRecord[];
2718
2943
  pollMeters(): SonareWorkletMeterSnapshot[];
2944
+ pollScope(): SonareWorkletScopeSnapshot[];
2719
2945
  onTelemetry(callback: (telemetry: SonareEngineTelemetryRecord) => void): () => void;
2720
2946
  onMeter(callback: (meter: SonareWorkletMeterSnapshot) => void): () => void;
2947
+ onScope(callback: (scope: SonareWorkletScopeSnapshot) => void): () => void;
2721
2948
  destroy(): void;
2722
2949
  private emitTelemetry;
2723
2950
  private emitMeter;
2951
+ private emitScope;
2724
2952
  private sendCaptureRequest;
2725
2953
  private sendTransportRequest;
2726
2954
  }
@@ -2740,6 +2968,8 @@ declare class SonareEngine {
2740
2968
  private readonly markers;
2741
2969
  private readonly trackLaneIds;
2742
2970
  private readonly trackSends;
2971
+ private readonly trackOutputBus;
2972
+ private readonly laneSidechains;
2743
2973
  private readonly buses;
2744
2974
  private readonly trackStripJson;
2745
2975
  private readonly busStripJson;
@@ -2770,6 +3000,45 @@ declare class SonareEngine {
2770
3000
  setParam(nodeId: string, param: string | number, value: number): boolean;
2771
3001
  scheduleParam(nodeId: string, param: string | number, ppq: number, value: number, curve?: number | 'linear' | 'exponential'): void;
2772
3002
  addAutomationPoint(laneId: string | number, ppq: number, value: number, curve?: number | 'linear' | 'exponential'): void;
3003
+ /**
3004
+ * Replaces the automation lane for `paramId` with the given breakpoints.
3005
+ *
3006
+ * Unlike scheduleParam (which appends a single point), this sets the whole
3007
+ * lane at once; an empty array clears the lane. The points are defensively
3008
+ * copied and sorted by ppq before being mirrored to the offline engine and
3009
+ * the live worklet engine.
3010
+ *
3011
+ * @param paramId Automation target id (registered parameter or a reserved
3012
+ * engine mixer target from automationParamId/busAutomationParamId).
3013
+ * @param points Lane breakpoints; order does not matter.
3014
+ */
3015
+ setAutomationLane(paramId: number, points: ReadonlyArray<EngineAutomationPoint>): void;
3016
+ /**
3017
+ * Returns the automation target id for a mixer strip parameter.
3018
+ *
3019
+ * The id addresses the engine's reserved mixer namespace, so it can be fed
3020
+ * straight to setAutomationLane to automate a fader or pan without
3021
+ * registering a parameter.
3022
+ *
3023
+ * @param target Track id (declares a mixer lane on first use) or 'master'.
3024
+ * @param kind Strip parameter to address.
3025
+ * @returns Reserved engine parameter id for the strip parameter.
3026
+ */
3027
+ automationParamId(target: string | number, kind: 'faderDb' | 'pan'): number;
3028
+ /**
3029
+ * Returns the automation target id for a bus fader.
3030
+ *
3031
+ * @param busId Bus id (declares the mixer bus on first use).
3032
+ * @returns Reserved engine parameter id for the bus fader gain (dB).
3033
+ */
3034
+ busAutomationParamId(busId: number): number;
3035
+ /**
3036
+ * Returns the number of automation lanes installed on the engine, including
3037
+ * lanes whose breakpoint list is currently empty.
3038
+ *
3039
+ * @returns Engine-side automation lane count.
3040
+ */
3041
+ automationLaneCount(): number;
2773
3042
  listParameters(): EngineParameterInfo[];
2774
3043
  setSoloMute(target: string | number, solo: boolean, mute: boolean): boolean;
2775
3044
  setStripGain(target: string | number, db: number): boolean;
@@ -2786,12 +3055,29 @@ declare class SonareEngine {
2786
3055
  * @param lanes Track ids or lane descriptors in the desired lane order.
2787
3056
  */
2788
3057
  setTrackLanes(lanes: ReadonlyArray<number | EngineTrackLane>): void;
3058
+ /**
3059
+ * Routes a track lane's post-fader output into a declared bus instead of
3060
+ * the master mix (group/folder routing); busId 0 restores the master mix.
3061
+ */
3062
+ setTrackOutputBus(target: string | number, busId: number): void;
3063
+ /**
3064
+ * Keys one insert of a lane strip from another lane's post-strip pre-fader
3065
+ * audio (ducking/sidechainRouter inserts). sourceTarget null removes the
3066
+ * binding.
3067
+ */
3068
+ setLaneSidechain(target: string | number, insertIndex: number, sourceTarget: string | number | null): void;
2789
3069
  setSends(target: string | number, sends: EngineTrackSend[]): void;
2790
3070
  setTrackBuses(buses: EngineBus[]): void;
2791
3071
  setBusGain(busId: number, db: number): boolean;
2792
3072
  setTrackStripJson(target: string | number, sceneJson: string): void;
2793
3073
  setTrackStripEqBand(target: string | number, bandIndex: number, band: EqBand | string): void;
2794
3074
  setTrackStripInsertBypassed(target: string | number, insertIndex: number, bypassed: boolean, resetOnBypass?: boolean): void;
3075
+ setTrackStripInsertParamByName(target: string | number, insertIndex: number, paramName: string, value: number): void;
3076
+ setTrackStripPan(target: string | number, pan: number): void;
3077
+ setTrackStripPanLaw(target: string | number, panLaw: PanLaw | number): void;
3078
+ setTrackStripPanMode(target: string | number, panMode: PanMode | number): void;
3079
+ setTrackStripDualPan(target: string | number, leftPan: number, rightPan: number): void;
3080
+ setTrackStripChannelDelaySamples(target: string | number, delaySamples: number): void;
2795
3081
  setStripEq(target: string | number, bandIndex: number, band: EqBand | string): void;
2796
3082
  setStripInsertBypassed(target: string | number, insertIndex: number, bypassed: boolean, resetOnBypass?: boolean): void;
2797
3083
  setStripInserts(target: string | number, sceneJson: string): void;
@@ -2799,6 +3085,8 @@ declare class SonareEngine {
2799
3085
  setMasterStripJson(sceneJson: string): void;
2800
3086
  setMasterStripEqBand(bandIndex: number, band: EqBand | string): void;
2801
3087
  setMasterStripInsertBypassed(insertIndex: number, bypassed: boolean, resetOnBypass?: boolean): void;
3088
+ setMasterStripInsertParamByName(insertIndex: number, paramName: string, value: number): void;
3089
+ setStripInsertParamByName(target: string | number, insertIndex: number, paramName: string, value: number): void;
2802
3090
  setMasterChain(sceneJson: string): void;
2803
3091
  addClip(trackId: string | number, buffer: Float32Array[], startPpq: number, opts?: Partial<Omit<EngineClip, 'channels' | 'startPpq'>>): number;
2804
3092
  removeClip(clipId: number): void;
@@ -2857,12 +3145,15 @@ declare class SonareEngine {
2857
3145
  setLoopFromMarkers(startMarkerId: number, endMarkerId: number): boolean;
2858
3146
  renderOffline(totalFrames: number): Promise<Float32Array[]>;
2859
3147
  onMeter(callback: (meter: SonareWorkletMeterSnapshot) => void): () => void;
3148
+ onScope(callback: (scope: SonareWorkletScopeSnapshot) => void): () => void;
2860
3149
  onTelemetry(callback: (telemetry: SonareEngineTelemetryRecord) => void): () => void;
2861
3150
  pollTelemetry(): SonareEngineTelemetryRecord[];
2862
3151
  pollMeters(): SonareWorkletMeterSnapshot[];
3152
+ pollScope(): SonareWorkletScopeSnapshot[];
2863
3153
  destroy(): void;
2864
3154
  private syncClipsDelta;
2865
3155
  private syncMidiClips;
3156
+ private mixerLanes;
2866
3157
  private syncMixer;
2867
3158
  private syncMarkers;
2868
3159
  private postInstrumentSync;
@@ -3109,6 +3400,32 @@ interface ProjectBounceOptions {
3109
3400
  /** Host-instrument PDC (latency) fed to the compiler. */
3110
3401
  instrumentLatencySamples?: number;
3111
3402
  }
3403
+ /**
3404
+ * Marker kind ordinals. Mirrors `SonareMarkerKind` in `src/sonare_c_types.h`;
3405
+ * the values are part of the ABI and must not be renumbered.
3406
+ */
3407
+ declare const MarkerKind: {
3408
+ readonly marker: 0;
3409
+ readonly text: 1;
3410
+ readonly lyric: 2;
3411
+ readonly cuePoint: 3;
3412
+ readonly keySignature: 4;
3413
+ };
3414
+ /** A project timeline marker with its kind and (for key signatures) the key. */
3415
+ interface ProjectMarker {
3416
+ /** Stable marker id (0 when allocating a new id via {@link Project.setMarkerEx}). */
3417
+ id: number;
3418
+ /** Marker position in PPQ (quarter notes). */
3419
+ ppq: number;
3420
+ /** Marker label. */
3421
+ name?: string;
3422
+ /** {@link MarkerKind} ordinal (default 0 = marker). */
3423
+ kind?: number;
3424
+ /** Key signature only: -7..7 (sharps positive). */
3425
+ keyFifths?: number;
3426
+ /** Key signature only: false = major, true = minor. */
3427
+ keyMinor?: boolean;
3428
+ }
3112
3429
  /** Oscillator waveform for the built-in synth. */
3113
3430
  type BuiltinSynthWaveform = 'sine' | 'saw' | 'sawtooth' | 'square' | 'triangle' | 0 | 1 | 2 | 3;
3114
3431
  /**
@@ -3646,6 +3963,14 @@ declare class Project {
3646
3963
  * Routes through an undoable edit command.
3647
3964
  */
3648
3965
  setTrackMidiDestination(trackId: number, destinationId: number): void;
3966
+ /** Set a track's linear playback gain (1.0 = unity; >= 0) via an undoable edit. */
3967
+ setTrackGain(trackId: number, gain: number): void;
3968
+ /** Set a track's mute flag via an undoable edit (a muted track is silent). */
3969
+ setTrackMute(trackId: number, mute: boolean): void;
3970
+ /** Set a track's solo flag via an undoable edit (when any track is soloed, only soloed tracks sound). */
3971
+ setTrackSolo(trackId: number, solo: boolean): void;
3972
+ /** Set a track's stereo balance in [-1, +1] (0 = center) via an undoable edit. */
3973
+ setTrackPan(trackId: number, pan: number): void;
3649
3974
  /** Undo the most recent edit. */
3650
3975
  undo(): void;
3651
3976
  /** Redo the most recently undone edit. */
@@ -3827,6 +4152,16 @@ declare class Project {
3827
4152
  * stable marker id (the allocated id when 0 was passed).
3828
4153
  */
3829
4154
  setMarker(markerId: number, ppq: number, name: string): number;
4155
+ /**
4156
+ * Add or replace a marker from a full {@link ProjectMarker}, including its
4157
+ * {@link MarkerKind} and (for key signatures) the key. Pass `id` 0 to allocate
4158
+ * a new id; returns the stable marker id.
4159
+ */
4160
+ setMarkerEx(marker: ProjectMarker): number;
4161
+ /** Read a project marker by index (0-based, in stored order). */
4162
+ markerByIndex(index: number): ProjectMarker;
4163
+ /** Number of markers in the project. */
4164
+ markerCount(): number;
3830
4165
  /** Number of tracks in the project. */
3831
4166
  trackCount(): number;
3832
4167
  /** Number of audio sources registered on the project. */
@@ -3865,6 +4200,8 @@ type EngineFreezeOptions = WasmEngineFreezeOptions;
3865
4200
  type EngineFreezeResult = WasmEngineFreezeResult;
3866
4201
  type EngineTelemetry = WasmEngineTelemetry;
3867
4202
  type EngineMeterTelemetry = WasmEngineMeterTelemetry;
4203
+ type EngineMeterTelemetryWide = WasmEngineMeterTelemetryWide;
4204
+ type EngineScopeTelemetry = WasmEngineScopeTelemetry;
3868
4205
  type EngineTransportState = WasmEngineTransportState;
3869
4206
  type EngineTempoSegment = WasmEngineTempoSegment;
3870
4207
  type EngineTimeSignatureSegment = WasmEngineTimeSignatureSegment;
@@ -3872,14 +4209,37 @@ interface EngineTrackSend {
3872
4209
  busId: number;
3873
4210
  levelDb?: number;
3874
4211
  enabled?: boolean;
4212
+ /**
4213
+ * Pre/post-fader tap point. Defaults to post-fader when omitted, matching the
4214
+ * historical lane-send behavior and the scene-JSON default.
4215
+ */
4216
+ sendTiming?: SendTiming | number;
3875
4217
  }
3876
4218
  interface EngineTrackLane {
3877
4219
  trackId: number;
3878
4220
  sends?: EngineTrackSend[];
4221
+ /**
4222
+ * Bus the lane's post-fader output sums into instead of the master mix
4223
+ * (group/folder routing); 0 or absent keeps the lane on the master mix.
4224
+ */
4225
+ outputBusId?: number;
4226
+ /**
4227
+ * Input channel layout of the source feeding this lane (`SonareChannelLayout`:
4228
+ * 0 mono, 1 stereo, 2 5.1, 3 7.1). Absent defaults to stereo. Stored but inert
4229
+ * until the surround DSP path lands.
4230
+ */
4231
+ sourceChannelLayout?: number;
3879
4232
  }
3880
4233
  interface EngineBus {
3881
4234
  busId: number;
3882
4235
  gainDb?: number;
4236
+ /**
4237
+ * Channel layout of the bus (`SonareChannelLayout`: 0 mono, 1 stereo, 2 5.1,
4238
+ * 3 7.1). A surround layout makes this a surround group bus: lanes routed to
4239
+ * it are surround-panned and it sums into the master plane-by-plane. Defaults
4240
+ * to stereo.
4241
+ */
4242
+ channelLayout?: number;
3883
4243
  }
3884
4244
  interface EngineMidiEvent {
3885
4245
  renderFrame: number;
@@ -4010,6 +4370,13 @@ declare class RealtimeEngine {
4010
4370
  play(renderFrame?: number): void;
4011
4371
  stop(renderFrame?: number): void;
4012
4372
  seekSample(timelineSample: number, renderFrame?: number): void;
4373
+ /**
4374
+ * Snaps every in-flight parameter ramp (engine-level smoothed params, mixer
4375
+ * lane fader/pan/gate, bus gains) to its target value. Offline renders call
4376
+ * this after a priming process() block so the first audible block renders at
4377
+ * settled values instead of ramping in from defaults.
4378
+ */
4379
+ settleParameters(): void;
4013
4380
  seekPpq(ppq: number, renderFrame?: number): void;
4014
4381
  setTempo(bpm: number): void;
4015
4382
  setTempoSegments(segments: readonly EngineTempoSegment[]): void;
@@ -4038,6 +4405,11 @@ declare class RealtimeEngine {
4038
4405
  setClips(clips: EngineClip[]): void;
4039
4406
  clipCount(): number;
4040
4407
  setTrackLanes(lanes: Array<number | EngineTrackLane>): void;
4408
+ /**
4409
+ * Keys one insert of a lane strip from another lane's post-strip audio
4410
+ * (ducking/sidechainRouter inserts). sourceTrackId 0 removes the binding.
4411
+ */
4412
+ setLaneSidechain(trackId: number, insertIndex: number, sourceTrackId: number): void;
4041
4413
  setTrackBuses(buses: EngineBus[]): void;
4042
4414
  setBusStripJson(busId: number, sceneJson: string): void;
4043
4415
  setTrackStripJson(trackId: number, sceneJson: string): void;
@@ -4048,6 +4420,29 @@ declare class RealtimeEngine {
4048
4420
  setMasterStripEqBand(bandIndex: number, band: EqBand | string): void;
4049
4421
  setMasterStripEqBandJson(bandIndex: number, bandJson: string): void;
4050
4422
  setMasterStripInsertBypassed(insertIndex: number, bypassed: boolean, resetOnBypass?: boolean): void;
4423
+ /**
4424
+ * Changes one track-strip insert parameter in realtime, addressed by the
4425
+ * processor's JSON-key parameter name (see {@link masteringInsertParamInfo}).
4426
+ * Applied at the next block head via the engine command queue; safe during
4427
+ * playback. Throws if the track, insert, or name is unknown, the param is not
4428
+ * realtime-safe, or the command queue is full.
4429
+ */
4430
+ setTrackStripInsertParamByName(trackId: number, insertIndex: number, paramName: string, value: number): void;
4431
+ /** Master-strip counterpart of {@link setTrackStripInsertParamByName}. */
4432
+ setMasterStripInsertParamByName(insertIndex: number, paramName: string, value: number): void;
4433
+ /** Sets a track lane strip's pan position in realtime (glitch-free). */
4434
+ setTrackStripPan(trackId: number, pan: number): void;
4435
+ /** Sets a track lane strip's pan law in realtime. */
4436
+ setTrackStripPanLaw(trackId: number, panLaw: PanLaw | number): void;
4437
+ /** Sets a track lane strip's pan mode in realtime. */
4438
+ setTrackStripPanMode(trackId: number, panMode: PanMode | number): void;
4439
+ /** Sets a track lane strip's dual-pan left/right positions in realtime. */
4440
+ setTrackStripDualPan(trackId: number, leftPan: number, rightPan: number): void;
4441
+ /**
4442
+ * Sets a track lane strip's inter-channel alignment delay (whole samples).
4443
+ * Adjusts strip latency, so PDC and reported graph latency are refreshed.
4444
+ */
4445
+ setTrackStripChannelDelaySamples(trackId: number, delaySamples: number): void;
4051
4446
  createClipPageProvider(numChannels: number, numSamples: number, pageFrames: number): ClipPageProvider;
4052
4447
  supplyClipPage(providerId: number, pageIndex: number, channels: Float32Array[]): void;
4053
4448
  clearClipPage(providerId: number, pageIndex: number): void;
@@ -4088,6 +4483,24 @@ declare class RealtimeEngine {
4088
4483
  freezeOffline(options: EngineFreezeOptions): EngineFreezeResult;
4089
4484
  drainTelemetry(maxRecords?: number): EngineTelemetry[];
4090
4485
  drainMeterTelemetry(maxRecords?: number): EngineMeterTelemetry[];
4486
+ /**
4487
+ * Drains pending meter telemetry as per-plane (wide) records for a surround
4488
+ * target. Use this for a surround mix target; {@link drainMeterTelemetry}
4489
+ * stays the stereo fast path. The two share one queue — call only one per
4490
+ * target. The live AudioWorklet path owns the queue via the stereo drain, so
4491
+ * this wide drain is for an offline (non-worklet) engine instance; per-plane
4492
+ * surround meters are not delivered over the live worklet meter ring.
4493
+ */
4494
+ drainMeterTelemetryWide(maxRecords?: number): EngineMeterTelemetryWide[];
4495
+ /**
4496
+ * Enables per-target spectrum + vectorscope capture. @param intervalFrames is
4497
+ * the minimum render-frame gap between snapshots (0 disables). @param bandCount
4498
+ * is the FFT band resolution (1..64); changing it re-prepares the tap. Returns
4499
+ * the band count actually applied.
4500
+ */
4501
+ configureScopeTelemetry(intervalFrames: number, bandCount: number): number;
4502
+ /** Drains pending spectrum + vectorscope snapshots (per mix target). */
4503
+ drainScopeTelemetry(maxRecords?: number): EngineScopeTelemetry[];
4091
4504
  destroy(): void;
4092
4505
  }
4093
4506
  declare class ClipPageProvider {
@@ -4378,6 +4791,11 @@ interface FrameBuffer {
4378
4791
  /** Number of mel bands; flat `mel` is `[nFrames * nMels]` row-major. */
4379
4792
  nMels: number;
4380
4793
  timestamps: Float32Array;
4794
+ /**
4795
+ * Mel spectrogram in LINEAR power (not dB) — the raw per-frame mel energies.
4796
+ * The quantized read paths (`readFramesU8` / `readFramesI16`) convert to dB
4797
+ * before packing, so their `mel` is dB-scaled; this float buffer is not.
4798
+ */
4381
4799
  mel: Float32Array;
4382
4800
  chroma: Float32Array;
4383
4801
  onsetStrength: Float32Array;
@@ -4410,6 +4828,7 @@ interface StreamFramesU8 {
4410
4828
  nFrames: number;
4411
4829
  nMels: number;
4412
4830
  timestamps: Float32Array;
4831
+ /** Row-major `[nFrames * nMels]` mel in dB, quantized over `[melDbMin, melDbMax]`. */
4413
4832
  mel: Uint8Array;
4414
4833
  chroma: Uint8Array;
4415
4834
  onsetStrength: Uint8Array;
@@ -4421,6 +4840,7 @@ interface StreamFramesI16 {
4421
4840
  nFrames: number;
4422
4841
  nMels: number;
4423
4842
  timestamps: Float32Array;
4843
+ /** Row-major `[nFrames * nMels]` mel in dB, quantized over `[melDbMin, melDbMax]`. */
4424
4844
  mel: Int16Array;
4425
4845
  chroma: Int16Array;
4426
4846
  onsetStrength: Int16Array;
@@ -4746,6 +5166,11 @@ declare class Mixer {
4746
5166
  setVcaOffsetDb(stripIndex: number, offsetDb: number): void;
4747
5167
  /** Set independent left/right pan positions (dual-pan mode). */
4748
5168
  setDualPan(stripIndex: number, leftPan: number, rightPan: number): void;
5169
+ /**
5170
+ * Set the strip's surround pan position, used when it feeds a >2-channel bus.
5171
+ * Stored on the scene; inert until the surround DSP path applies it.
5172
+ */
5173
+ setSurroundPan(stripIndex: number, pan: SurroundPan): void;
4749
5174
  /**
4750
5175
  * Add a send to a strip after construction.
4751
5176
  *
@@ -5263,4 +5688,4 @@ declare function voiceCharacterPresetId(preset: VoicePresetId | number): string
5263
5688
  */
5264
5689
  declare function realtimeVoiceChangerPresetConfig(preset: VoicePresetId | number): RealtimeVoiceChangerPodConfig | null;
5265
5690
 
5266
- export { type EngineCaptureStatus as $, type AcousticOptions as A, type BarChord as B, type Chord as C, type CompressorDetector as D, type CompressorOptions as E, type CqtResult as F, type DeclickOptions as G, type DeclipOptions as H, type DecomposeResult as I, type DecrackleMode as J, type DecrackleOptions as K, type DehumOptions as L, type DenoiseClassicalMode as M, type DenoiseClassicalNoiseEstimator as N, type DenoiseClassicalOptions as O, type DereverbClassicalOptions as P, type DynamicRangeReport as Q, type Dynamics as R, type DynamicsAnalysisResult as S, SONARE_ENGINE_COMMAND_RECORD_BYTES, SONARE_ENGINE_RING_HEADER_INTS, SONARE_ENGINE_TELEMETRY_RECORD_BYTES, SONARE_METER_RING_HEADER_INTS, SONARE_METER_RING_RECORD_FLOATS, SONARE_SPECTRUM_RING_HEADER_INTS, SonareEngine, type SonareEngineCaptureRequestMessage, type SonareEngineCaptureResponseMessage, type SonareEngineCommandRecord, type SonareEngineCommandRingBuffer, SonareEngineCommandType, type SonareEngineOptions, type SonareEngineSyncAutomationMessage, type SonareEngineSyncBuiltinInstrumentMessage, type SonareEngineSyncCaptureMessage, type SonareEngineSyncClipsDeltaMessage, type SonareEngineSyncClipsMessage, type SonareEngineSyncLoadSoundFontMessage, type SonareEngineSyncMarkersMessage, type SonareEngineSyncMasterStripEqBandMessage, type SonareEngineSyncMasterStripInsertBypassedMessage, type SonareEngineSyncMessage, type SonareEngineSyncMetronomeMessage, type SonareEngineSyncMidiCcMessage, type SonareEngineSyncMidiClipsMessage, type SonareEngineSyncMidiNoteMessage, type SonareEngineSyncMidiPanicMessage, type SonareEngineSyncMixerMessage, type SonareEngineSyncSf2InstrumentMessage, type SonareEngineSyncSynthInstrumentMessage, type SonareEngineSyncTempoMessage, type SonareEngineSyncTrackStripEqBandMessage, type SonareEngineSyncTrackStripInsertBypassedMessage, SonareEngineTelemetryError, type SonareEngineTelemetryRecord, type SonareEngineTelemetryRingBuffer, type SonareEngineTelemetryRingReadResult, SonareEngineTelemetryType, type SonareEngineTransportFacade, type SonareEngineTransportRequestMessage, type SonareEngineTransportResponseMessage, type SonareMeterRingBuffer, type SonareMeterRingReadResult, SonareRealtimeEngineNode, type SonareRealtimeEngineNodeCapabilities, type SonareRealtimeEngineNodeOptions, SonareRealtimeEngineWorkletProcessor, type SonareRealtimeEngineWorkletProcessorOptions, type SonareRealtimeVoiceChangerDestroyMessage, type SonareRealtimeVoiceChangerMessage, type SonareRealtimeVoiceChangerResetMessage, type SonareRealtimeVoiceChangerSetConfigMessage, SonareRealtimeVoiceChangerWorkletProcessor, type SonareRealtimeVoiceChangerWorkletProcessorOptions, SonareRtRealtimeEngineRuntime, type SonareRtRealtimeEngineRuntimeOptions, type SonareSpectrumRingBuffer, type SonareSpectrumRingReadResult, type SonareWorkletDestroyMessage, type SonareWorkletMessage, type SonareWorkletMeterSnapshot, SonareWorkletProcessor, type SonareWorkletProcessorOptions, type SonareWorkletScheduleInsertAutomationMessage, type SonareWorkletSetMeterIntervalMessage, type SonareWorkletSpectrumSnapshot, type SonareWorkletTransportMessage, type DynamicsResult as T, EXPECTED_ENGINE_ABI_VERSION as U, EXPECTED_PROJECT_ABI_VERSION as V, type EngineAutomationPoint as W, type EngineBounceOptions as X, type EngineBounceResult as Y, type EngineBus as Z, type EngineCapabilities as _, type AcousticResult as a, type NoteStretchOptions as a$, type EngineClip as a0, type EngineFreezeOptions as a1, type EngineFreezeResult as a2, type EngineGraphSpec as a3, type EngineMarker as a4, type EngineMeterTelemetry as a5, type EngineMetronomeConfig as a6, type EngineMidiClipSchedule as a7, type EngineMidiEvent as a8, type EngineParameterInfo as a9, type MasteringChainResult as aA, type MasteringOptions as aB, type MasteringPreset as aC, type MasteringProcessorParams as aD, type MasteringResult as aE, type MasteringStereoChainResult as aF, type MasteringStereoResult as aG, type Matrix2dResult as aH, type MelPowerResult as aI, type MelSpectrogramResult as aJ, type MelodyOptions as aK, type MelodyPoint as aL, type MelodyResult as aM, type MeterTap as aN, type MeteringDetectClippingOptions as aO, type MeteringDynamicRangeOptions as aP, type MfccResult as aQ, type MicrophoneInputBinding as aR, type MidiCcBindOptions as aS, type MidiCcLearnOptions as aT, type MixMeterSnapshot as aU, type MixOptions as aV, type MixResult as aW, Mixer as aX, type MixerProcessResult as aY, type MixerRealtimeBuffer as aZ, Mode as a_, type EngineTelemetry as aa, type EngineTempoSegment as ab, type EngineTimeSignatureSegment as ac, type EngineTrackLane as ad, type EngineTrackSend as ae, type EngineTransportState as af, type EqBand as ag, type EqBandPhase as ah, type EqBandType as ai, type EqCoeffMode as aj, type EqMatchOptions as ak, type EqSpectrumSnapshot as al, type EqStereoPlacement as am, ErrorCode as an, type FrameBuffer as ao, type GateOptions as ap, type GoniometerPoint as aq, type HpssResult as ar, type HpssWithResidualResult as as, type Key as at, type KeyCandidate as au, type KeyDetectionOptions as av, KeyProfile as aw, type KeyProfileName as ax, type LufsResult as ay, type MasteringChainConfig as az, type AnalysisResult as b, SonareError as b$, type OpfsClipPageProviderBinding as b0, type OpfsClipPageProviderOptions as b1, type PairAnalysis as b2, type PairProcessor as b3, type PanLaw as b4, type PanMode as b5, type PatternScore as b6, type PhaseScopeReport as b7, PitchClass as b8, type PitchResult as b9, RealtimeVoiceChanger as bA, type RealtimeVoiceChangerConfigInput as bB, type RealtimeVoiceChangerInterleavedBuffer as bC, type RealtimeVoiceChangerMonoBuffer as bD, type RealtimeVoiceChangerPlanarBuffer as bE, type RealtimeVoiceChangerPodConfig as bF, type RhythmAnalysisResult as bG, type RhythmFeatures as bH, type RirResult as bI, type RirSynthOptions as bJ, type RoomEstimateOptions as bK, type RoomEstimateResult as bL, type RoomGeometryOptions as bM, type RoomMorphOptions as bN, SYNTH_BODY_TYPES as bO, SYNTH_ENGINE_MODES as bP, SYNTH_FILTER_MODELS as bQ, SYNTH_FILTER_OUTPUTS as bR, SYNTH_MOD_DESTINATIONS as bS, SYNTH_MOD_SOURCES as bT, SYNTH_OSC_WAVEFORMS as bU, type Section as bV, SectionType as bW, type SendTiming as bX, type Sf2InstrumentConfig as bY, type Sf2ProgramStatus as bZ, type SoloProcessor as b_, type ProgressiveEstimate as ba, Project as bb, type ProjectAssistSidecar as bc, type ProjectAutomationCurve as bd, type ProjectAutomationLaneDesc as be, type ProjectAutomationPoint as bf, type ProjectBounceOptions as bg, type ProjectChordSymbol as bh, type ProjectClipCompSegment as bi, type ProjectClipDesc as bj, type ProjectClipFade as bk, type ProjectClipTake as bl, type ProjectCompileResult as bm, type ProjectFadeCurve as bn, type ProjectKeySegment as bo, type ProjectLoopMode as bp, type ProjectLoopRecordingDesc as bq, type ProjectLoopRecordingResult as br, type ProjectMidiClipResult as bs, type ProjectMidiEvent as bt, type ProjectNotePairValidation as bu, type ProjectTrackDesc as bv, type ProjectTrackKind as bw, type ProjectWarpAnchor as bx, type ProjectWarpMapDesc as by, RealtimeEngine as bz, type AnalyzeBpmOptions as c, chromaCens as c$, type SourceBackend as c0, type SpectrumOptions as c1, type SpectrumReport as c2, type StereoAnalysis as c3, type StftPowerResult as c4, type StftResult as c5, StreamAnalyzer as c6, type StreamConfig as c7, type StreamConfigDefaults as c8, type StreamFramesI16 as c9, type TrimSilenceOptions as cA, type ValidateOptions as cB, type VectorscopeReport as cC, type VoiceChangeOptions as cD, type VoiceChangeRealtimeOptions as cE, type VoicePresetId as cF, type WaveformPeakPyramidOptions as cG, type WaveformPeaksOptions as cH, type WaveformPeaksReport as cI, type WebMidiBinding as cJ, type WebMidiCcBinding as cK, type WebMidiInputInfo as cL, amplitudeToDb as cM, analyze as cN, analyzeBpm as cO, analyzeDynamics as cP, analyzeImpulseResponse as cQ, analyzeMelody as cR, analyzeRhythm as cS, analyzeSections as cT, analyzeTimbre as cU, analyzeWithProgress as cV, bassChroma as cW, bindMicrophoneInput as cX, bindWebMidi as cY, chordFunctionalAnalysis as cZ, chroma as c_, type StreamFramesU8 as ca, type StreamQuantizeConfig as cb, StreamingEqualizer as cc, type StreamingEqualizerConfig as cd, StreamingMasteringChain as ce, type StreamingMasteringChainConfig as cf, type StreamingPlatform as cg, StreamingRetune as ch, type StreamingRetuneConfig as ci, type SynthBodyType as cj, type SynthEngineMode as ck, type SynthEnumTables as cl, type SynthFilterModel as cm, type SynthFilterOutput as cn, type SynthModDestination as co, type SynthModRouting as cp, type SynthModSource as cq, type SynthOscWaveform as cr, createSonareEngineCommandRingBuffer, createSonareEngineTelemetryRingBuffer, createSonareMeterRingBuffer, createSonareSpectrumRingBuffer, type SynthPatch as cs, type TempogramMode as ct, type Timbre as cu, type TimbreAnalysisResult as cv, type TimbreFrame as cw, type TimeSignature as cx, type TransientShaperOptions as cy, type TrimSilenceMode as cz, type AnalyzeDynamicsOptions as d, masteringProcessStereo as d$, cqt as d0, createOpfsClipPageProvider as d1, createOpfsClipPageWorker as d2, cyclicTempogram as d3, dbToAmplitude as d4, dbToPower as d5, decompose as d6, decomposeWithInit as d7, deemphasis as d8, detectAcoustic as d9, hzToNote as dA, isSonareError as dB, isWebMidiAvailable as dC, lufs as dD, lufsInterleaved as dE, masterAudio as dF, masterAudioStereo as dG, masterAudioStereoWithProgress as dH, masterAudioWithProgress as dI, mastering as dJ, masteringAssistantSuggest as dK, masteringAudioProfile as dL, masteringChain as dM, masteringChainStereo as dN, masteringChainStereoWithProgress as dO, masteringChainWithProgress as dP, masteringDynamicsCompressor as dQ, masteringDynamicsGate as dR, masteringDynamicsTransientShaper as dS, masteringInsertNames as dT, masteringInsertParamNames as dU, masteringPairAnalysisNames as dV, masteringPairAnalyze as dW, masteringPairProcess as dX, masteringPairProcessorNames as dY, masteringPresetNames as dZ, masteringProcess as d_, detectBeats as da, detectBpm as db, detectChords as dc, detectDownbeats as dd, detectKey as de, decodeFrame, detectKeyCandidates as df, detectOnsets as dg, ebur128LoudnessRange as dh, engineAbiVersion as di, engineCapabilities as dj, estimateRoom as dk, estimateTuning as dl, fixFrames as dm, fixLength as dn, fourierTempogram as dp, frameSignal as dq, framesToSamples as dr, framesToTime as ds, harmonic as dt, hasFfmpegSupport as du, hpss as dv, hpssWithResidual as dw, hybridCqt as dx, hzToMel as dy, hzToMidi as dz, type AnalyzeRhythmOptions as e, realtimeVoiceChangerPresetConfig as e$, masteringProcessorNames as e0, masteringRepairDeclick as e1, masteringRepairDeclip as e2, masteringRepairDecrackle as e3, masteringRepairDehum as e4, masteringRepairDenoiseClassical as e5, masteringRepairDereverbClassical as e6, masteringRepairTrimSilence as e7, masteringStereoAnalysisNames as e8, masteringStereoAnalyze as e9, mixingScenePresetNames as eA, momentaryLufs as eB, nnFilter as eC, nnlsChroma as eD, normalize as eE, noteStretch as eF, noteToHz as eG, onsetEnvelope as eH, onsetStrengthMulti as eI, opfsClipPageWorkerSource as eJ, padCenter as eK, pcen as eL, peakPick as eM, percussive as eN, phaseVocoder as eO, pitchCorrectToMidi as eP, pitchCorrectToMidiTimevarying as eQ, pitchPyin as eR, pitchShift as eS, pitchTuning as eT, pitchYin as eU, plp as eV, polyFeatures as eW, powerToDb as eX, preemphasis as eY, projectAbiVersion as eZ, pseudoCqt as e_, masteringStreamingPreview as ea, melSpectrogram as eb, melToAudio as ec, melToHz as ed, melToStft as ee, meteringCrestFactorDb as ef, meteringDcOffset as eg, meteringDetectClipping as eh, meteringDynamicRange as ei, meteringPeakDb as ej, meteringPhaseScope as ek, meteringPhaseScopeDecimated as el, meteringRmsDb as em, meteringSpectrum as en, encodeFrameHi, encodeFrameLo, meteringSpectrumFrame as eo, meteringStereoCorrelation as ep, meteringStereoWidth as eq, meteringTruePeakDb as er, meteringVectorscope as es, meteringVectorscopeDecimated as et, mfcc as eu, mfccToAudio as ev, mfccToMel as ew, midiToHz as ex, mixStereo as ey, mixingScenePresetJson as ez, type AnalyzeSectionsOptions as f, realtimeVoiceChangerPresetJson as f0, realtimeVoiceChangerPresetNames as f1, remix as f2, resample as f3, rmsEnergy as f4, roomMorph as f5, samplesToFrames as f6, scaleCorrectionSemitones as f7, scalePitchClassEnabled as f8, scaleQuantizeMidi as f9, voiceChangerAbiVersion as fA, voiceCharacterPresetId as fB, vqt as fC, waveformPeakPyramid as fD, waveformPeaks as fE, zeroCrossingRate as fF, zeroCrossings as fG, shortTermLufs as fa, spectralBandwidth as fb, spectralCentroid as fc, spectralContrast as fd, spectralFlatness as fe, spectralRolloff as ff, splitSilence as fg, stft as fh, stftDb as fi, streamAnalyzerConfigDefaults as fj, synthEnumTables as fk, synthPresetNames as fl, synthPresetPatch as fm, synthesizeRir as fn, tempogram as fo, tempogramRatio as fp, timeStretch as fq, timeToFrames as fr, tonnetz as fs, trim as ft, trimSilence as fu, validateRealtimeVoiceChangerPresetJson as fv, vectorNormalize as fw, version as fx, voiceChange as fy, voiceChangeRealtime as fz, type AnalyzeTimbreOptions as g, type AnalyzerStats as h, Audio as i, init, isInitialized, type AutomationCurve as j, type Beat as k, type BindMicrophoneInputOptions as l, type BindWebMidiOptions as m, type BpmAnalysisResult as n, type BpmCandidate as o, type BrowserAudioDecodeOptions as p, popSonareEngineCommandRingBuffer, pushSonareEngineCommandRingBuffer, type BuiltinSynthBinding as q, type BuiltinSynthConfig as r, readSonareEngineTelemetryRingBuffer, readSonareMeterRingBuffer, readSonareSpectrumRingBuffer, registerSonareRealtimeEngineWorkletProcessor, registerSonareRealtimeVoiceChangerWorkletProcessor, registerSonareWorkletProcessor, type BuiltinSynthWaveform as s, sonareEngineCommandRingBufferByteLength, sonareEngineTelemetryRingBufferByteLength, sonareMeterRingBufferByteLength, sonareSpectrumRingBufferByteLength, type ChordAnalysisResult as t, type ChordChange as u, type ChordDetectionOptions as v, ChordQuality as w, writeSonareEngineTelemetryRingBuffer, type ChromaResult as x, type ClippingRegion as y, type ClippingReport as z };
5691
+ export { type EngineCaptureStatus as $, type AcousticOptions as A, type BarChord as B, type Chord as C, type CompressorDetector as D, type CompressorOptions as E, type CqtResult as F, type DeclickOptions as G, type DeclipOptions as H, type DecomposeResult as I, type DecrackleMode as J, type DecrackleOptions as K, type DehumOptions as L, type DenoiseClassicalMode as M, type DenoiseClassicalNoiseEstimator as N, type DenoiseClassicalOptions as O, type DereverbClassicalOptions as P, type DynamicRangeReport as Q, type Dynamics as R, type DynamicsAnalysisResult as S, SONARE_ENGINE_COMMAND_RECORD_BYTES, SONARE_ENGINE_RING_HEADER_INTS, SONARE_ENGINE_TELEMETRY_RECORD_BYTES, SONARE_METER_RING_HEADER_INTS, SONARE_METER_RING_RECORD_FLOATS, SONARE_SCOPE_RING_HEADER_INTS, SONARE_SPECTRUM_RING_HEADER_INTS, SonareEngine, type SonareEngineCaptureRequestMessage, type SonareEngineCaptureResponseMessage, type SonareEngineCommandRecord, type SonareEngineCommandRingBuffer, SonareEngineCommandType, type SonareEngineOptions, type SonareEngineSyncAutomationMessage, type SonareEngineSyncBuiltinInstrumentMessage, type SonareEngineSyncCaptureMessage, type SonareEngineSyncClipsDeltaMessage, type SonareEngineSyncClipsMessage, type SonareEngineSyncLoadSoundFontMessage, type SonareEngineSyncMarkersMessage, type SonareEngineSyncMasterStripEqBandMessage, type SonareEngineSyncMasterStripInsertBypassedMessage, type SonareEngineSyncMessage, type SonareEngineSyncMetronomeMessage, type SonareEngineSyncMidiCcMessage, type SonareEngineSyncMidiClipsMessage, type SonareEngineSyncMidiNoteMessage, type SonareEngineSyncMidiPanicMessage, type SonareEngineSyncMixerMessage, type SonareEngineSyncSf2InstrumentMessage, type SonareEngineSyncSynthInstrumentMessage, type SonareEngineSyncTempoMessage, type SonareEngineSyncTrackStripEqBandMessage, type SonareEngineSyncTrackStripInsertBypassedMessage, SonareEngineTelemetryError, type SonareEngineTelemetryRecord, type SonareEngineTelemetryRingBuffer, type SonareEngineTelemetryRingReadResult, SonareEngineTelemetryType, type SonareEngineTransportFacade, type SonareEngineTransportRequestMessage, type SonareEngineTransportResponseMessage, type SonareMeterRingBuffer, type SonareMeterRingReadResult, SonareRealtimeEngineNode, type SonareRealtimeEngineNodeCapabilities, type SonareRealtimeEngineNodeOptions, SonareRealtimeEngineWorkletProcessor, type SonareRealtimeEngineWorkletProcessorOptions, type SonareRealtimeVoiceChangerDestroyMessage, type SonareRealtimeVoiceChangerMessage, type SonareRealtimeVoiceChangerResetMessage, type SonareRealtimeVoiceChangerSetConfigMessage, SonareRealtimeVoiceChangerWorkletProcessor, type SonareRealtimeVoiceChangerWorkletProcessorOptions, SonareRtRealtimeEngineRuntime, type SonareRtRealtimeEngineRuntimeOptions, type SonareScopeRingBuffer, type SonareScopeRingReadResult, type SonareSpectrumRingBuffer, type SonareSpectrumRingReadResult, type SonareWorkletDestroyMessage, type SonareWorkletMessage, type SonareWorkletMeterSnapshot, SonareWorkletProcessor, type SonareWorkletProcessorOptions, type SonareWorkletScheduleInsertAutomationMessage, type SonareWorkletScopeSnapshot, type SonareWorkletSetMeterIntervalMessage, type SonareWorkletSpectrumSnapshot, type SonareWorkletTransportMessage, type DynamicsResult as T, EXPECTED_ENGINE_ABI_VERSION as U, EXPECTED_PROJECT_ABI_VERSION as V, type EngineAutomationPoint as W, type EngineBounceOptions as X, type EngineBounceResult as Y, type EngineBus as Z, type EngineCapabilities as _, type AcousticResult as a, type MixOptions as a$, type EngineClip as a0, type EngineFreezeOptions as a1, type EngineFreezeResult as a2, type EngineGraphSpec as a3, type EngineMarker as a4, type EngineMeterTelemetry as a5, type EngineMeterTelemetryWide as a6, type EngineMetronomeConfig as a7, type EngineMidiClipSchedule as a8, type EngineMidiEvent as a9, type LufsResult as aA, MarkerKind as aB, type MasteringChainConfig as aC, type MasteringChainResult as aD, type MasteringChannelPolicy as aE, type MasteringInsertParamInfo as aF, type MasteringOptions as aG, type MasteringPreset as aH, type MasteringProcessorCatalogEntry as aI, type MasteringProcessorParams as aJ, type MasteringResult as aK, type MasteringStereoChainResult as aL, type MasteringStereoResult as aM, type Matrix2dResult as aN, type MelPowerResult as aO, type MelSpectrogramResult as aP, type MelodyOptions as aQ, type MelodyPoint as aR, type MelodyResult as aS, type MeterTap as aT, type MeteringDetectClippingOptions as aU, type MeteringDynamicRangeOptions as aV, type MfccResult as aW, type MicrophoneInputBinding as aX, type MidiCcBindOptions as aY, type MidiCcLearnOptions as aZ, type MixMeterSnapshot as a_, type EngineParameterInfo as aa, type EngineScopeTelemetry as ab, type EngineTelemetry as ac, type EngineTempoSegment as ad, type EngineTimeSignatureSegment as ae, type EngineTrackLane as af, type EngineTrackSend as ag, type EngineTransportState as ah, type EqBand as ai, type EqBandPhase as aj, type EqBandType as ak, type EqCoeffMode as al, type EqMatchOptions as am, type EqSpectrumSnapshot as an, type EqStereoPlacement as ao, ErrorCode as ap, type FrameBuffer as aq, type GateOptions as ar, type GoniometerPoint as as, type HpssResult as at, type HpssWithResidualResult as au, type Key as av, type KeyCandidate as aw, type KeyDetectionOptions as ax, KeyProfile as ay, type KeyProfileName as az, type AnalysisResult as b, SYNTH_OSC_WAVEFORMS as b$, type MixResult as b0, Mixer as b1, type MixerProcessResult as b2, type MixerRealtimeBuffer as b3, Mode as b4, type NoteStretchOptions as b5, type OpfsClipPageProviderBinding as b6, type OpfsClipPageProviderOptions as b7, type PairAnalysis as b8, type PairProcessor as b9, type ProjectMidiEvent as bA, type ProjectNotePairValidation as bB, type ProjectTrackDesc as bC, type ProjectTrackKind as bD, type ProjectWarpAnchor as bE, type ProjectWarpMapDesc as bF, RealtimeEngine as bG, RealtimeVoiceChanger as bH, type RealtimeVoiceChangerConfigInput as bI, type RealtimeVoiceChangerInterleavedBuffer as bJ, type RealtimeVoiceChangerMonoBuffer as bK, type RealtimeVoiceChangerPlanarBuffer as bL, type RealtimeVoiceChangerPodConfig as bM, type RhythmAnalysisResult as bN, type RhythmFeatures as bO, type RirResult as bP, type RirSynthOptions as bQ, type RoomEstimateOptions as bR, type RoomEstimateResult as bS, type RoomGeometryOptions as bT, type RoomMorphOptions as bU, SYNTH_BODY_TYPES as bV, SYNTH_ENGINE_MODES as bW, SYNTH_FILTER_MODELS as bX, SYNTH_FILTER_OUTPUTS as bY, SYNTH_MOD_DESTINATIONS as bZ, SYNTH_MOD_SOURCES as b_, type PanLaw as ba, type PanMode as bb, type PatternScore as bc, type PhaseScopeReport as bd, PitchClass as be, type PitchResult as bf, type ProgressiveEstimate as bg, Project as bh, type ProjectAssistSidecar as bi, type ProjectAutomationCurve as bj, type ProjectAutomationLaneDesc as bk, type ProjectAutomationPoint as bl, type ProjectBounceOptions as bm, type ProjectChordSymbol as bn, type ProjectClipCompSegment as bo, type ProjectClipDesc as bp, type ProjectClipFade as bq, type ProjectClipTake as br, type ProjectCompileResult as bs, type ProjectFadeCurve as bt, type ProjectKeySegment as bu, type ProjectLoopMode as bv, type ProjectLoopRecordingDesc as bw, type ProjectLoopRecordingResult as bx, type ProjectMarker as by, type ProjectMidiClipResult as bz, type AnalyzeBpmOptions as c, analyzeImpulseResponse as c$, type Section as c0, SectionType as c1, type SendTiming as c2, type Sf2InstrumentConfig as c3, type Sf2ProgramStatus as c4, type SoloProcessor as c5, SonareError as c6, type SourceBackend as c7, type SpectralEditMode as c8, type SpectralEditOptions as c9, type SynthModRouting as cA, type SynthModSource as cB, type SynthOscWaveform as cC, type SynthPatch as cD, type TempogramMode as cE, type Timbre as cF, type TimbreAnalysisResult as cG, type TimbreFrame as cH, type TimeSignature as cI, type TransientShaperOptions as cJ, type TrimSilenceMode as cK, type TrimSilenceOptions as cL, type ValidateOptions as cM, type VectorscopeReport as cN, type VoiceChangeOptions as cO, type VoiceChangeRealtimeOptions as cP, type VoicePresetId as cQ, type WaveformPeakPyramidOptions as cR, type WaveformPeaksOptions as cS, type WaveformPeaksReport as cT, type WebMidiBinding as cU, type WebMidiCcBinding as cV, type WebMidiInputInfo as cW, amplitudeToDb as cX, analyze as cY, analyzeBpm as cZ, analyzeDynamics as c_, type SpectralEditWindow as ca, type SpectralRegionOp as cb, type SpectrumOptions as cc, type SpectrumReport as cd, type StereoAnalysis as ce, type StftPowerResult as cf, type StftResult as cg, StreamAnalyzer as ch, type StreamConfig as ci, type StreamConfigDefaults as cj, type StreamFramesI16 as ck, type StreamFramesU8 as cl, type StreamQuantizeConfig as cm, StreamingEqualizer as cn, type StreamingEqualizerConfig as co, StreamingMasteringChain as cp, type StreamingMasteringChainConfig as cq, type StreamingPlatform as cr, createSonareEngineCommandRingBuffer, createSonareEngineTelemetryRingBuffer, createSonareMeterRingBuffer, createSonareScopeRingBuffer, createSonareSpectrumRingBuffer, StreamingRetune as cs, type StreamingRetuneConfig as ct, type SynthBodyType as cu, type SynthEngineMode as cv, type SynthEnumTables as cw, type SynthFilterModel as cx, type SynthFilterOutput as cy, type SynthModDestination as cz, type AnalyzeDynamicsOptions as d, masteringDynamicsCompressor as d$, analyzeMelody as d0, analyzeRhythm as d1, analyzeSections as d2, analyzeTimbre as d3, analyzeWithProgress as d4, bassChroma as d5, bindMicrophoneInput as d6, bindWebMidi as d7, chordFunctionalAnalysis as d8, chroma as d9, fourierTempogram as dA, frameSignal as dB, framesToSamples as dC, framesToTime as dD, harmonic as dE, hasFfmpegSupport as dF, hpss as dG, hpssWithResidual as dH, hybridCqt as dI, hzToMel as dJ, hzToMidi as dK, hzToNote as dL, isSonareError as dM, isWebMidiAvailable as dN, lufs as dO, lufsInterleaved as dP, masterAudio as dQ, masterAudioStereo as dR, masterAudioStereoWithProgress as dS, masterAudioWithProgress as dT, mastering as dU, masteringAssistantSuggest as dV, masteringAudioProfile as dW, masteringChain as dX, masteringChainStereo as dY, masteringChainStereoWithProgress as dZ, masteringChainWithProgress as d_, chromaCens as da, cqt as db, createOpfsClipPageProvider as dc, createOpfsClipPageWorker as dd, cyclicTempogram as de, decodeFrame, dbToAmplitude as df, dbToPower as dg, decompose as dh, decomposeWithInit as di, deemphasis as dj, detectAcoustic as dk, detectBeats as dl, detectBpm as dm, detectChords as dn, detectDownbeats as dp, detectKey as dq, detectKeyCandidates as dr, detectOnsets as ds, ebur128LoudnessRange as dt, engineAbiVersion as du, engineCapabilities as dv, estimateRoom as dw, estimateTuning as dx, fixFrames as dy, fixLength as dz, type AnalyzeRhythmOptions as e, phaseVocoder as e$, masteringDynamicsGate as e0, masteringDynamicsTransientShaper as e1, masteringInsertNames as e2, masteringInsertParamInfo as e3, masteringInsertParamNames as e4, masteringPairAnalysisNames as e5, masteringPairAnalyze as e6, masteringPairProcess as e7, masteringPairProcessorNames as e8, masteringPresetNames as e9, meteringSpectrum as eA, meteringSpectrumFrame as eB, meteringStereoCorrelation as eC, meteringStereoWidth as eD, meteringTruePeakDb as eE, meteringVectorscope as eF, meteringVectorscopeDecimated as eG, mfcc as eH, mfccToAudio as eI, mfccToMel as eJ, midiToHz as eK, mixStereo as eL, mixingScenePresetJson as eM, mixingScenePresetNames as eN, momentaryLufs as eO, nnFilter as eP, nnlsChroma as eQ, normalize as eR, noteStretch as eS, noteToHz as eT, onsetEnvelope as eU, onsetStrengthMulti as eV, opfsClipPageWorkerSource as eW, padCenter as eX, pcen as eY, peakPick as eZ, percussive as e_, masteringProcess as ea, masteringProcessStereo as eb, masteringProcessorCatalog as ec, masteringProcessorNames as ed, masteringRepairDeclick as ee, masteringRepairDeclip as ef, masteringRepairDecrackle as eg, masteringRepairDehum as eh, masteringRepairDenoiseClassical as ei, masteringRepairDereverbClassical as ej, masteringRepairTrimSilence as ek, masteringStereoAnalysisNames as el, masteringStereoAnalyze as em, masteringStreamingPreview as en, encodeFrameHi, encodeFrameLo, melSpectrogram as eo, melToAudio as ep, melToHz as eq, melToStft as er, meteringCrestFactorDb as es, meteringDcOffset as et, meteringDetectClipping as eu, meteringDynamicRange as ev, meteringPeakDb as ew, meteringPhaseScope as ex, meteringPhaseScopeDecimated as ey, meteringRmsDb as ez, type AnalyzeSectionsOptions as f, pitchCorrectToMidi as f0, pitchCorrectToMidiTimevarying as f1, pitchPyin as f2, pitchShift as f3, pitchTuning as f4, pitchYin as f5, plp as f6, polyFeatures as f7, powerToDb as f8, preemphasis as f9, synthPresetPatch as fA, synthesizeRir as fB, tempogram as fC, tempogramRatio as fD, timeStretch as fE, timeToFrames as fF, tonnetz as fG, trim as fH, trimSilence as fI, validateRealtimeVoiceChangerPresetJson as fJ, vectorNormalize as fK, version as fL, voiceChange as fM, voiceChangeRealtime as fN, voiceChangerAbiVersion as fO, voiceCharacterPresetId as fP, vqt as fQ, waveformPeakPyramid as fR, waveformPeaks as fS, zeroCrossingRate as fT, zeroCrossings as fU, projectAbiVersion as fa, pseudoCqt as fb, realtimeVoiceChangerPresetConfig as fc, realtimeVoiceChangerPresetJson as fd, realtimeVoiceChangerPresetNames as fe, remix as ff, resample as fg, rmsEnergy as fh, roomMorph as fi, samplesToFrames as fj, scaleCorrectionSemitones as fk, scalePitchClassEnabled as fl, scaleQuantizeMidi as fm, shortTermLufs as fn, spectralBandwidth as fo, spectralCentroid as fp, spectralContrast as fq, spectralEdit as fr, spectralFlatness as fs, spectralRolloff as ft, splitSilence as fu, stft as fv, stftDb as fw, streamAnalyzerConfigDefaults as fx, synthEnumTables as fy, synthPresetNames as fz, type AnalyzeTimbreOptions as g, type AnalyzerStats as h, Audio as i, init, isInitialized, type AutomationCurve as j, type Beat as k, type BindMicrophoneInputOptions as l, type BindWebMidiOptions as m, type BpmAnalysisResult as n, type BpmCandidate as o, type BrowserAudioDecodeOptions as p, popSonareEngineCommandRingBuffer, pushSonareEngineCommandRingBuffer, type BuiltinSynthBinding as q, type BuiltinSynthConfig as r, readSonareEngineTelemetryRingBuffer, readSonareMeterRingBuffer, readSonareScopeRingBuffer, readSonareSpectrumRingBuffer, registerSonareRealtimeEngineWorkletProcessor, registerSonareRealtimeVoiceChangerWorkletProcessor, registerSonareWorkletProcessor, type BuiltinSynthWaveform as s, sonareEngineCommandRingBufferByteLength, sonareEngineTelemetryRingBufferByteLength, sonareMeterRingBufferByteLength, sonareScopeRingBufferByteLength, sonareSpectrumRingBufferByteLength, type ChordAnalysisResult as t, type ChordChange as u, type ChordDetectionOptions as v, ChordQuality as w, writeSonareEngineTelemetryRingBuffer, type ChromaResult as x, type ClippingRegion as y, type ClippingReport as z };