@libraz/libsonare 1.3.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,6 +21,11 @@ no model weights.
21
21
  > If you need to read WAV/MP3/M4A files directly in Node, use the native
22
22
  > N-API package [`@libraz/libsonare-native`](https://github.com/libraz/libsonare/tree/main/bindings/node) instead.
23
23
 
24
+ > **Platform constraints:** the WebAssembly build is single-threaded (analysis
25
+ > runs to completion on the calling thread — there is no non-blocking variant),
26
+ > has no host filesystem access, and expects pre-decoded `Float32Array` sample
27
+ > buffers. Drive long-running calls from a Web Worker to keep the UI responsive.
28
+
24
29
  ## Installation
25
30
 
26
31
  ```bash
@@ -124,6 +129,54 @@ const room = analyzeImpulseResponse(irSamples, sampleRate);
124
129
  console.log(blind.rt60, room.c50);
125
130
  ```
126
131
 
132
+ Acoustic simulation adds `synthesizeRir` (synthesize a shoebox-room impulse
133
+ response from geometry), `estimateRoom` (recover an equivalent room from a
134
+ recording or IR), and `roomMorph` (creatively re-reverberate audio toward a
135
+ target room — not dereverberation).
136
+
137
+ ```typescript
138
+ import { init, synthesizeRir, estimateRoom, roomMorph } from '@libraz/libsonare';
139
+
140
+ await init();
141
+
142
+ const { rir, hasError } = synthesizeRir({
143
+ lengthM: 6,
144
+ widthM: 4,
145
+ heightM: 3,
146
+ absorption: 0.2,
147
+ sampleRate: 48000,
148
+ });
149
+
150
+ const room = estimateRoom(samples, 48000); // { volume, length, width, height, ... }
151
+ const morphed = roomMorph(samples, sampleRate, { lengthM: 12, widthM: 9, wet: 0.5 });
152
+ ```
153
+
154
+ ### Error handling
155
+
156
+ Native (C++) failures are thrown as a `SonareError` carrying a numeric `code`
157
+ (an `ErrorCode` value) and its canonical `codeName`, so you can branch on the
158
+ cause instead of matching message text. Use the `isSonareError` type guard in a
159
+ `catch`:
160
+
161
+ ```typescript
162
+ import { init, analyze, ErrorCode, isSonareError } from '@libraz/libsonare';
163
+
164
+ await init();
165
+
166
+ try {
167
+ const result = analyze(samples, sampleRate);
168
+ } catch (error) {
169
+ if (isSonareError(error)) {
170
+ console.error(`${error.codeName} (${error.code}): ${error.message}`);
171
+ if (error.code === ErrorCode.InvalidParameter) {
172
+ // recover...
173
+ }
174
+ } else {
175
+ throw error;
176
+ }
177
+ }
178
+ ```
179
+
127
180
  ### Decoding files in the browser
128
181
 
129
182
  ```typescript
@@ -331,6 +384,149 @@ try {
331
384
  }
332
385
  ```
333
386
 
387
+ #### Clip warp
388
+
389
+ A clip can be time-warped during an offline `bounce`. `setClipWarpMode` selects
390
+ the playback mode (`ProjectWarpMode`: `'off'` | `'repitch'` | `'tempo-sync'`),
391
+ `setClipWarpRef` binds it to a warp map, and `setWarpMap` registers a first-class
392
+ warp map (anchors mapping warp-timeline samples to source samples).
393
+
394
+ ```typescript
395
+ project.setWarpMap({
396
+ id: 1,
397
+ name: 'main',
398
+ anchors: [
399
+ { warpSample: 0, sourceSample: 0 },
400
+ { warpSample: 48000, sourceSample: 24000 },
401
+ ],
402
+ });
403
+ project.setClipWarpRef(clipId, 1);
404
+ project.setClipWarpMode(clipId, 'tempo-sync');
405
+ ```
406
+
407
+ > Warp is an offline `Project.bounce` feature only. Realtime warp playback is
408
+ > **not** available in `RealtimeEngine`.
409
+
410
+ ### Instruments and synthesis
411
+
412
+ MIDI tracks bounce silently unless an instrument is bound. `Project` offers
413
+ three instrument backends, each as a `bounceWith…` variant that takes a binding
414
+ (or array of bindings) plus the usual `ProjectBounceOptions`:
415
+
416
+ - `bounceWithBuiltinInstrument(binding?, options?)` — simple built-in oscillator
417
+ synth (`BuiltinSynthConfig` / `BuiltinSynthBinding`: waveform + ADSR + gain).
418
+ - `bounceWithSynthInstrument(patchOrName?, options?)` — patch-driven NativeSynth
419
+ (`SynthPatch`, or a preset-name string like `'saw-lead'`).
420
+ - `bounceWithSf2Instrument(config?, options?)` — GS-compatible SoundFont player
421
+ (`Sf2InstrumentConfig`), fed by `loadSoundFont()`.
422
+
423
+ Discover NativeSynth presets with `synthPresetNames()` and fetch one as an
424
+ editable patch with `synthPresetPatch(name)`.
425
+
426
+ ```typescript
427
+ import { init, Project, synthPresetNames, synthPresetPatch } from '@libraz/libsonare';
428
+
429
+ await init();
430
+
431
+ const project = new Project();
432
+ try {
433
+ const { clipId } = project.addMidiClip(0, 4);
434
+ project.setMidiEvents(clipId, [
435
+ Project.midiNoteOn(0, 0, 0, 60, 100),
436
+ Project.midiNoteOff(1, 0, 0, 60),
437
+ ]);
438
+
439
+ // Built-in oscillator synth.
440
+ const a = project.bounceWithBuiltinInstrument({ waveform: 'saw' }, { numChannels: 2 });
441
+
442
+ // NativeSynth from a named preset, tweaked.
443
+ const patch = synthPresetPatch(synthPresetNames()[0]);
444
+ patch.cutoffHz = 4000;
445
+ const b = project.bounceWithSynthInstrument(patch, { numChannels: 2 });
446
+
447
+ // SoundFont player (requires loadSoundFont first).
448
+ project.loadSoundFont(sf2Bytes);
449
+ const c = project.bounceWithSf2Instrument({ gain: 0.6 }, { numChannels: 2 });
450
+ } finally {
451
+ project.delete();
452
+ }
453
+ ```
454
+
455
+ ### Real-time engine
456
+
457
+ `RealtimeEngine` is a control-thread-driven transport + render engine: it plays
458
+ a clip/automation timeline, hosts MIDI instruments, accepts live MIDI, and
459
+ renders blocks (or bounces offline). Bind it to an AudioWorklet for browser
460
+ playback — see the [AudioWorklet bridge](#audioworklet-bridge) below; the engine
461
+ is the offline/headless half, the worklet is the audio-thread half.
462
+
463
+ ```typescript
464
+ import { init, RealtimeEngine } from '@libraz/libsonare';
465
+
466
+ await init();
467
+
468
+ const engine = new RealtimeEngine(48000, 128); // sampleRate, maxBlockSize
469
+ try {
470
+ engine.setSynthInstrument('saw-lead', 0); // patch (or name), destinationId
471
+ engine.play();
472
+ engine.pushMidiNoteOn(0, 0, 0, 60, 100); // destination, group, channel, note, velocity
473
+ engine.pushMidiNoteOff(0, 0, 0, 60);
474
+
475
+ const blockL = new Float32Array(128);
476
+ const blockR = new Float32Array(128);
477
+ const out = engine.process([blockL, blockR]); // Float32Array[] per channel
478
+ const telemetry = engine.drainTelemetry();
479
+ } finally {
480
+ engine.destroy();
481
+ }
482
+ ```
483
+
484
+ Capabilities:
485
+
486
+ - **Transport**: `play` / `stop` / `seekSample` / `seekPpq` / `setTempo` /
487
+ `setTimeSignature` / `setLoop`, plus `getTransportState`.
488
+ - **Instruments**: `setBuiltinInstrument` / `setSynthInstrument` /
489
+ `setSf2Instrument` (+ `loadSoundFont`) per MIDI destination id.
490
+ - **Live MIDI**: `pushMidiNoteOn` / `pushMidiNoteOff` / `pushMidiCc` /
491
+ `pushMidiPanic`, and `bindMidiCc(channel, controller, paramId, options?)` to
492
+ map a CC to an automation parameter.
493
+ - **Process / bounce**: `process` (real-time blocks), the allocation-free
494
+ `prepareChannels` + `getChannelBuffer` + `processPrepared` worklet path,
495
+ `renderOffline`, `bounceOffline`, `freezeOffline`.
496
+ - **Clip page providers**: `createClipPageProvider` + `supplyClipPage` for
497
+ streaming large clip audio in pages; pair with the OPFS helpers
498
+ (`createOpfsClipPageProvider`).
499
+ - **Telemetry**: `drainTelemetry` / `drainMeterTelemetry`. Inspect runtime
500
+ capabilities (ABI compatibility, SharedArrayBuffer/Atomics) via
501
+ `engineCapabilities()`.
502
+
503
+ ### Real-time voice changer
504
+
505
+ `RealtimeVoiceChanger` runs a block-by-block voice transformation chain (retune,
506
+ formant shaping, EQ, gate, compressor). Construct it from a preset id (see
507
+ `realtimeVoiceChangerPresetNames()`) or a full config object, then process blocks.
508
+
509
+ ```typescript
510
+ import { init, RealtimeVoiceChanger, voiceChangeRealtime } from '@libraz/libsonare';
511
+
512
+ await init();
513
+
514
+ const changer = new RealtimeVoiceChanger('bright-idol');
515
+ try {
516
+ changer.prepare(48000, 128, 1); // sampleRate, maxBlockSize, channels
517
+ const out = changer.processMono(block);
518
+ } finally {
519
+ changer.delete();
520
+ }
521
+
522
+ // Whole-buffer convenience wrapper (constructs/prepares/disposes internally).
523
+ const processed = voiceChangeRealtime(samples, { preset: 'deep-narrator', sampleRate: 48000 });
524
+ ```
525
+
526
+ For a simple offline pitch + formant shift without the full chain, use
527
+ `voiceChange(samples, sampleRate, { pitchSemitones: -2, formantFactor: 1.1 })`.
528
+ Inspect a preset with `realtimeVoiceChangerPresetJson(name)`.
529
+
334
530
  ### AudioWorklet bridge
335
531
 
336
532
  The package exposes an optional worklet entry that uses the same `sonare.wasm`
@@ -427,6 +623,51 @@ function readMeters() {
427
623
  }
428
624
  ```
429
625
 
626
+ #### RealtimeEngine AudioWorklet facade
627
+
628
+ For browser DAW-style playback, `SonareEngine` keeps a main-thread
629
+ `RealtimeEngine` mirror for offline renders and synchronizes the live worklet
630
+ engine through control messages. The default runtime target is the embind engine;
631
+ the `sonare-rt` runtime remains a transport-focused fallback.
632
+
633
+ ```typescript
634
+ import { init } from '@libraz/libsonare';
635
+ import { init as initWorklet, SonareEngine } from '@libraz/libsonare/worklet';
636
+
637
+ await init();
638
+ await audioContext.audioWorklet.addModule('/worklet.js');
639
+ await initWorklet();
640
+
641
+ const engine = await SonareEngine.create(audioContext, { mode: 'sab' });
642
+ engine.setTrackLanes([{ trackId: 1 }]);
643
+ engine.setTrackStripJson(1, trackSceneJson);
644
+ engine.addClip(1, [clipL, clipR], 0);
645
+ engine.setTempoSegments([{ startPpq: 0, bpm: 120 }]);
646
+ engine.setTimeSignatureSegments([{ startPpq: 0, numerator: 4, denominator: 4 }]);
647
+ engine.transport.play();
648
+ ```
649
+
650
+ | Need | Facade/API |
651
+ |---|---|
652
+ | Track routing, fader, pan, solo/mute | `setTrackLanes`, `setStripGain`, `setStripPan`, `setSoloMute` |
653
+ | Track/master inserts and EQ | `setTrackStripJson`, `setMasterStripJson`, `setTrackStripEqBand`, `setMasterStripEqBand`, insert bypass methods |
654
+ | Sends and buses | `setSends`, `setBusGain`, `setBusStripJson` |
655
+ | MIDI clips and live MIDI | `setMidiClips`, `pushMidiNoteOn`, `pushMidiNoteOff`, `pushMidiCc`, `pushMidiPanic` |
656
+ | Instruments | `setBuiltinInstrument`, `setSynthInstrument`, `loadSoundFont`, `setSf2Instrument` |
657
+ | Recording and monitoring | `configureCapture` (incl. the `inputMonitor` option), `armRecord`, `punch`, `capturedAudio`, `captureStatus` |
658
+ | Transport, tempo, markers | `getTransportState`, `cachedTransportState`, `setTempoSegments`, `setTimeSignatureSegments`, marker methods, `setLoopFromMarkers` |
659
+ | Clip updates | `addClip`, `removeClip`; the facade sends clip deltas while the processor keeps full-sync compatibility |
660
+ | Meters | `onMeter` messages or the meter SharedArrayBuffer ring; records include master, lane, bus, and input target ids |
661
+
662
+ Studio integration notes:
663
+
664
+ - If a host worklet entry filters message names before forwarding, add every
665
+ `sync*`, `captureRequest`, and `transportRequest` message used above to that
666
+ allowlist; otherwise the host may silently drop the new control messages.
667
+ - If a host vendors built worklet bundles, regenerate and reimport
668
+ `worklet.js`, `worklet.d.ts`, `sonare.js`, `sonare.wasm`,
669
+ `sonare-rt.js`, `sonare-rt-module.js`, and `sonare-rt.wasm` together.
670
+
430
671
  ### Progress callback
431
672
 
432
673
  `masteringChainWithProgress` (and its stereo variant) is `masteringChain` with
@@ -476,17 +717,50 @@ chain.reset();
476
717
  chain.delete(); // release WASM memory
477
718
  ```
478
719
 
720
+ ### Streaming equalizer and retune
721
+
722
+ `StreamingEqualizer` wraps the unified `EqualizerProcessor` (up to 24 bands,
723
+ RBJ/Vicanek biquads, dynamic EQ, linear-phase FIR, mid/side, auto-gain) with
724
+ state maintained across calls. `StreamingRetune` is a block-by-block mono voice
725
+ retune / pitch shifter.
726
+
727
+ ```typescript
728
+ import { init, StreamingEqualizer, StreamingRetune } from '@libraz/libsonare';
729
+
730
+ await init();
731
+
732
+ const eq = new StreamingEqualizer({ sampleRate: 48000, maxBlockSize: 512 });
733
+ try {
734
+ eq.setBand(0, { type: 'HighShelf', frequencyHz: 8000, gainDb: 6, enabled: true });
735
+ const { left: eqL, right: eqR } = eq.processStereo(left, right);
736
+ } finally {
737
+ eq.delete();
738
+ }
739
+
740
+ const retune = new StreamingRetune({ semitones: 2, mix: 1.0 });
741
+ try {
742
+ retune.prepare(48000, 512); // sampleRate, maxBlockSize
743
+ const shifted = retune.processMono(monoBlock);
744
+ } finally {
745
+ retune.delete();
746
+ }
747
+ ```
748
+
479
749
  ## Features
480
750
 
481
- - **Detection**: BPM, key, beats, onsets, chords, sections
751
+ - **Detection**: `detectBeats`, `detectOnsets`, `detectDownbeats`, `detectChords`, `detectKey`, `detectKeyCandidates`, `chordFunctionalAnalysis`, sections
752
+ - **Analysis**: `analyze`, `analyzeWithProgress`, `analyzeBpm`, `analyzeRhythm`, `analyzeDynamics`, `analyzeTimbre`; `hasFfmpegSupport` capability check
482
753
  - **Effects**: HPSS, HPSS with residual, time stretch, phase vocoder, pitch shift, normalize, trim, remix
483
754
  - **Mastering**: EQ, compressor, tape/exciter, air band, stereo imaging,
484
755
  true-peak limiting, loudness optimization
485
756
  - **Features**: STFT, mel spectrogram, MFCC, chroma, CQT/VQT, spectral contrast, poly features, zero crossings
486
757
  - **Pitch**: YIN, pYIN algorithms with optional `fillNa`
487
758
  - **Decomposition & loudness**: NMF decomposition, nearest-neighbour filtering, multichannel LUFS, EBU R128 LRA
488
- - **Streaming**: Real-time analysis with progressive estimates
489
- - **Headless DAW**: `Project` arrangement model — audio/MIDI tracks & clips, undo/redo, MIDI sequencing, SMF / MIDI 2.0 Clip File I/O, deterministic JSON, offline `bounce`
759
+ - **Streaming**: Real-time analysis with progressive estimates; streaming mastering chain, equalizer, and retune
760
+ - **Instruments**: built-in synth, patch-driven NativeSynth, SoundFont (SF2) player bound to `Project` bounces or the `RealtimeEngine`
761
+ - **Real-time**: `RealtimeEngine` transport/MIDI/render, `RealtimeVoiceChanger`, AudioWorklet bridge
762
+ - **Room acoustics**: blind RT60/EDT, impulse-response clarity metrics, RIR synthesis, room estimation, room morphing
763
+ - **Headless DAW**: `Project` arrangement model — audio/MIDI tracks & clips, undo/redo, MIDI sequencing, clip warp, SMF / MIDI 2.0 Clip File I/O, deterministic JSON, offline `bounce`
490
764
  - **Conversions**: Hz/mel/MIDI/note, frames/time, resample
491
765
 
492
766
  ## Also available
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { A as AcousticOptions, a as AcousticResult, b as AnalysisResult, c as AnalyzeBpmOptions, d as AnalyzeDynamicsOptions, e as AnalyzeRhythmOptions, f as AnalyzeSectionsOptions, g as AnalyzeTimbreOptions, h as AnalyzerStats, i as Audio, j as AutomationCurve, B as BarChord, k as Beat, l as BindMicrophoneInputOptions, m as BindWebMidiOptions, n as BpmAnalysisResult, o as BpmCandidate, p as BrowserAudioDecodeOptions, q as BuiltinSynthBinding, r as BuiltinSynthConfig, s as BuiltinSynthWaveform, C as Chord, t as ChordAnalysisResult, u as ChordChange, v as ChordDetectionOptions, w as ChordQuality, x as ChromaResult, y as ClippingRegion, z as ClippingReport, D as CompressorDetector, E as CompressorOptions, F as CqtResult, G as DeclickOptions, H as DeclipOptions, I as DecomposeResult, J as DecrackleMode, K as DecrackleOptions, L as DehumOptions, M as DenoiseClassicalMode, N as DenoiseClassicalNoiseEstimator, O as DenoiseClassicalOptions, P as DereverbClassicalOptions, Q as DynamicRangeReport, R as Dynamics, S as DynamicsAnalysisResult, T as DynamicsResult, U as EXPECTED_ENGINE_ABI_VERSION, V as EXPECTED_PROJECT_ABI_VERSION, W as EngineAutomationPoint, X as EngineBounceOptions, Y as EngineBounceResult, Z as EngineCapabilities, _ as EngineCaptureStatus, $ as EngineClip, a0 as EngineFreezeOptions, a1 as EngineFreezeResult, a2 as EngineGraphSpec, a3 as EngineMarker, a4 as EngineMeterTelemetry, a5 as EngineMetronomeConfig, a6 as EngineParameterInfo, a7 as EngineTelemetry, a8 as EngineTransportState, a9 as EqBand, aa as EqBandPhase, ab as EqBandType, ac as EqCoeffMode, ad as EqMatchOptions, ae as EqSpectrumSnapshot, af as EqStereoPlacement, ag as FrameBuffer, ah as GateOptions, ai as GoniometerPoint, aj as HpssResult, ak as HpssWithResidualResult, al as Key, am as KeyCandidate, an as KeyDetectionOptions, ao as KeyProfile, ap as KeyProfileName, aq as LufsResult, ar as MasteringChainConfig, as as MasteringChainResult, at as MasteringOptions, au as MasteringPreset, av as MasteringProcessorParams, aw as MasteringResult, ax as MasteringStereoChainResult, ay as MasteringStereoResult, az as Matrix2dResult, aA as MelPowerResult, aB as MelSpectrogramResult, aC as MelodyOptions, aD as MelodyPoint, aE as MelodyResult, aF as MeterTap, aG as MeteringDetectClippingOptions, aH as MeteringDynamicRangeOptions, aI as MfccResult, aJ as MicrophoneInputBinding, aK as MidiCcBindOptions, aL as MidiCcLearnOptions, aM as MixMeterSnapshot, aN as MixOptions, aO as MixResult, aP as Mixer, aQ as MixerProcessResult, aR as MixerRealtimeBuffer, aS as Mode, aT as NoteStretchOptions, aU as OpfsClipPageProviderBinding, aV as OpfsClipPageProviderOptions, aW as PairAnalysis, aX as PairProcessor, aY as PanLaw, aZ as PanMode, a_ as PatternScore, a$ as PhaseScopeReport, b0 as Pitch, b0 as PitchClass, b1 as PitchResult, b2 as ProgressiveEstimate, b3 as Project, b4 as ProjectAssistSidecar, b5 as ProjectAutomationCurve, b6 as ProjectAutomationLaneDesc, b7 as ProjectAutomationPoint, b8 as ProjectBounceOptions, b9 as ProjectChordSymbol, ba as ProjectClipCompSegment, bb as ProjectClipDesc, bc as ProjectClipFade, bd as ProjectClipTake, be as ProjectCompileResult, bf as ProjectFadeCurve, bg as ProjectKeySegment, bh as ProjectLoopMode, bi as ProjectLoopRecordingDesc, bj as ProjectLoopRecordingResult, bk as ProjectMidiClipResult, bl as ProjectMidiEvent, bm as ProjectNotePairValidation, bn as ProjectTrackDesc, bo as ProjectTrackKind, bp as ProjectWarpAnchor, bq as ProjectWarpMapDesc, br as RealtimeEngine, bs as RealtimeVoiceChanger, bt as RealtimeVoiceChangerConfigInput, bu as RealtimeVoiceChangerInterleavedBuffer, bv as RealtimeVoiceChangerMonoBuffer, bw as RealtimeVoiceChangerPlanarBuffer, bx as RealtimeVoiceChangerPodConfig, by as RhythmAnalysisResult, bz as RhythmFeatures, bA as RirResult, bB as RirSynthOptions, bC as RoomEstimateOptions, bD as RoomEstimateResult, bE as RoomGeometryOptions, bF as RoomMorphOptions, bG as SYNTH_BODY_TYPES, bH as SYNTH_ENGINE_MODES, bI as SYNTH_FILTER_MODELS, bJ as SYNTH_FILTER_OUTPUTS, bK as SYNTH_MOD_DESTINATIONS, bL as SYNTH_MOD_SOURCES, bM as SYNTH_OSC_WAVEFORMS, bN as Section, bO as SectionType, bP as SendTiming, bQ as Sf2InstrumentConfig, bR as Sf2ProgramStatus, bS as SoloProcessor, bT as SourceBackend, bU as SpectrumOptions, bV as SpectrumReport, bW as StereoAnalysis, bX as StftPowerResult, bY as StftResult, bZ as StreamAnalyzer, b_ as StreamConfig, b$ as StreamConfigDefaults, c0 as StreamFramesI16, c1 as StreamFramesU8, c2 as StreamQuantizeConfig, c3 as StreamingEqualizer, c4 as StreamingEqualizerConfig, c5 as StreamingMasteringChain, c6 as StreamingMasteringChainConfig, c7 as StreamingPlatform, c8 as StreamingRetune, c9 as StreamingRetuneConfig, ca as SynthBodyType, cb as SynthEngineMode, cc as SynthEnumTables, cd as SynthFilterModel, ce as SynthFilterOutput, cf as SynthModDestination, cg as SynthModRouting, ch as SynthModSource, ci as SynthOscWaveform, cj as SynthPatch, ck as TempogramMode, cl as Timbre, cm as TimbreAnalysisResult, cn as TimbreFrame, co as TimeSignature, cp as TransientShaperOptions, cq as TrimSilenceMode, cr as TrimSilenceOptions, cs as ValidateOptions, ct as VectorscopeReport, cu as VoiceChangeOptions, cv as VoiceChangeRealtimeOptions, cw as VoicePresetId, cx as WaveformPeakPyramidOptions, cy as WaveformPeaksOptions, cz as WaveformPeaksReport, cA as WebMidiBinding, cB as WebMidiCcBinding, cC as WebMidiInputInfo, cD as amplitudeToDb, cE as analyze, cF as analyzeBpm, cG as analyzeDynamics, cH as analyzeImpulseResponse, cI as analyzeMelody, cJ as analyzeRhythm, cK as analyzeSections, cL as analyzeTimbre, cM as analyzeWithProgress, cN as bassChroma, cO as bindMicrophoneInput, cP as bindWebMidi, cQ as chordFunctionalAnalysis, cR as chroma, cS as chromaCens, cT as cqt, cU as createOpfsClipPageProvider, cV as createOpfsClipPageWorker, cW as cyclicTempogram, cX as dbToAmplitude, cY as dbToPower, cZ as decompose, c_ as decomposeWithInit, c$ as deemphasis, d0 as detectAcoustic, d1 as detectBeats, d2 as detectBpm, d3 as detectChords, d4 as detectDownbeats, d5 as detectKey, d6 as detectKeyCandidates, d7 as detectOnsets, d8 as ebur128LoudnessRange, d9 as engineAbiVersion, da as engineCapabilities, db as estimateRoom, dc as estimateTuning, dd as fixFrames, de as fixLength, df as fourierTempogram, dg as frameSignal, dh as framesToSamples, di as framesToTime, dj as harmonic, dk as hasFfmpegSupport, dl as hpss, dm as hpssWithResidual, dn as hybridCqt, dp as hzToMel, dq as hzToMidi, dr as hzToNote, init, isInitialized, ds as isWebMidiAvailable, dt as lufs, du as lufsInterleaved, dv as masterAudio, dw as masterAudioStereo, dx as masterAudioStereoWithProgress, dy as masterAudioWithProgress, dz as mastering, dA as masteringAssistantSuggest, dB as masteringAudioProfile, dC as masteringChain, dD as masteringChainStereo, dE as masteringChainStereoWithProgress, dF as masteringChainWithProgress, dG as masteringDynamicsCompressor, dH as masteringDynamicsGate, dI as masteringDynamicsTransientShaper, dJ as masteringInsertNames, dK as masteringPairAnalysisNames, dL as masteringPairAnalyze, dM as masteringPairProcess, dN as masteringPairProcessorNames, dO as masteringPresetNames, dP as masteringProcess, dQ as masteringProcessStereo, dR as masteringProcessorNames, dS as masteringRepairDeclick, dT as masteringRepairDeclip, dU as masteringRepairDecrackle, dV as masteringRepairDehum, dW as masteringRepairDenoiseClassical, dX as masteringRepairDereverbClassical, dY as masteringRepairTrimSilence, dZ as masteringStereoAnalysisNames, d_ as masteringStereoAnalyze, d$ as masteringStreamingPreview, e0 as melSpectrogram, e1 as melToAudio, e2 as melToHz, e3 as melToStft, e4 as meteringCrestFactorDb, e5 as meteringDcOffset, e6 as meteringDetectClipping, e7 as meteringDynamicRange, e8 as meteringPeakDb, e9 as meteringPhaseScope, ea as meteringPhaseScopeDecimated, eb as meteringRmsDb, ec as meteringSpectrum, ed as meteringSpectrumFrame, ee as meteringStereoCorrelation, ef as meteringStereoWidth, eg as meteringTruePeakDb, eh as meteringVectorscope, ei as meteringVectorscopeDecimated, ej as mfcc, ek as mfccToAudio, el as mfccToMel, em as midiToHz, en as mixStereo, eo as mixingScenePresetJson, ep as mixingScenePresetNames, eq as momentaryLufs, er as nnFilter, es as nnlsChroma, et as normalize, eu as noteStretch, ev as noteToHz, ew as onsetEnvelope, ex as onsetStrengthMulti, ey as opfsClipPageWorkerSource, ez as padCenter, eA as pcen, eB as peakPick, eC as percussive, eD as phaseVocoder, eE as pitchCorrectToMidi, eF as pitchCorrectToMidiTimevarying, eG as pitchPyin, eH as pitchShift, eI as pitchTuning, eJ as pitchYin, eK as plp, eL as polyFeatures, eM as powerToDb, eN as preemphasis, eO as projectAbiVersion, eP as pseudoCqt, eQ as realtimeVoiceChangerPresetConfig, eR as realtimeVoiceChangerPresetJson, eS as realtimeVoiceChangerPresetNames, eT as remix, eU as resample, eV as rmsEnergy, eW as roomMorph, eX as samplesToFrames, eY as scaleCorrectionSemitones, eZ as scalePitchClassEnabled, e_ as scaleQuantizeMidi, e$ as shortTermLufs, f0 as spectralBandwidth, f1 as spectralCentroid, f2 as spectralContrast, f3 as spectralFlatness, f4 as spectralRolloff, f5 as splitSilence, f6 as stft, f7 as stftDb, f8 as streamAnalyzerConfigDefaults, f9 as synthEnumTables, fa as synthPresetNames, fb as synthPresetPatch, fc as synthesizeRir, fd as tempogram, fe as tempogramRatio, ff as timeStretch, fg as timeToFrames, fh as tonnetz, fi as trim, fj as trimSilence, fk as validateRealtimeVoiceChangerPresetJson, fl as vectorNormalize, fm as version, fn as voiceChange, fo as voiceChangeRealtime, fp as voiceChangerAbiVersion, fq as voiceCharacterPresetId, fr as vqt, fs as waveformPeakPyramid, ft as waveformPeaks, fu as zeroCrossingRate, fv as zeroCrossings } from './worklet.js';
1
+ export { A as AcousticOptions, a as AcousticResult, b as AnalysisResult, c as AnalyzeBpmOptions, d as AnalyzeDynamicsOptions, e as AnalyzeRhythmOptions, f as AnalyzeSectionsOptions, g as AnalyzeTimbreOptions, h as AnalyzerStats, i as Audio, j as AutomationCurve, B as BarChord, k as Beat, l as BindMicrophoneInputOptions, m as BindWebMidiOptions, n as BpmAnalysisResult, o as BpmCandidate, p as BrowserAudioDecodeOptions, q as BuiltinSynthBinding, r as BuiltinSynthConfig, s as BuiltinSynthWaveform, C as Chord, t as ChordAnalysisResult, u as ChordChange, v as ChordDetectionOptions, w as ChordQuality, x as ChromaResult, y as ClippingRegion, z as ClippingReport, D as CompressorDetector, E as CompressorOptions, F as CqtResult, G as DeclickOptions, H as DeclipOptions, I as DecomposeResult, J as DecrackleMode, K as DecrackleOptions, L as DehumOptions, M as DenoiseClassicalMode, N as DenoiseClassicalNoiseEstimator, O as DenoiseClassicalOptions, P as DereverbClassicalOptions, Q as DynamicRangeReport, R as Dynamics, S as DynamicsAnalysisResult, T as DynamicsResult, U as EXPECTED_ENGINE_ABI_VERSION, V as EXPECTED_PROJECT_ABI_VERSION, W as EngineAutomationPoint, X as EngineBounceOptions, Y as EngineBounceResult, Z as EngineBus, _ as EngineCapabilities, $ as EngineCaptureStatus, a0 as EngineClip, a1 as EngineFreezeOptions, a2 as EngineFreezeResult, a3 as EngineGraphSpec, a4 as EngineMarker, a5 as EngineMeterTelemetry, a6 as EngineMetronomeConfig, a7 as EngineMidiClipSchedule, a8 as EngineMidiEvent, a9 as EngineParameterInfo, aa as EngineTelemetry, ab as EngineTempoSegment, ac as EngineTimeSignatureSegment, ad as EngineTrackLane, ae as EngineTrackSend, af as EngineTransportState, ag as EqBand, ah as EqBandPhase, ai as EqBandType, aj as EqCoeffMode, ak as EqMatchOptions, al as EqSpectrumSnapshot, am as EqStereoPlacement, an as ErrorCode, ao as FrameBuffer, ap as GateOptions, aq as GoniometerPoint, ar as HpssResult, as as HpssWithResidualResult, at as Key, au as KeyCandidate, av as KeyDetectionOptions, aw as KeyProfile, ax as KeyProfileName, ay as LufsResult, az as MasteringChainConfig, aA as MasteringChainResult, aB as MasteringOptions, aC as MasteringPreset, aD as MasteringProcessorParams, aE as MasteringResult, aF as MasteringStereoChainResult, aG as MasteringStereoResult, aH as Matrix2dResult, aI as MelPowerResult, aJ as MelSpectrogramResult, aK as MelodyOptions, aL as MelodyPoint, aM as MelodyResult, aN as MeterTap, aO as MeteringDetectClippingOptions, aP as MeteringDynamicRangeOptions, aQ as MfccResult, aR as MicrophoneInputBinding, aS as MidiCcBindOptions, aT as MidiCcLearnOptions, aU as MixMeterSnapshot, aV as MixOptions, aW as MixResult, aX as Mixer, aY as MixerProcessResult, aZ as MixerRealtimeBuffer, a_ as Mode, a$ as NoteStretchOptions, b0 as OpfsClipPageProviderBinding, b1 as OpfsClipPageProviderOptions, b2 as PairAnalysis, b3 as PairProcessor, b4 as PanLaw, b5 as PanMode, b6 as PatternScore, b7 as PhaseScopeReport, b8 as Pitch, b8 as PitchClass, b9 as PitchResult, ba as ProgressiveEstimate, bb as Project, bc as ProjectAssistSidecar, bd as ProjectAutomationCurve, be as ProjectAutomationLaneDesc, bf as ProjectAutomationPoint, bg as ProjectBounceOptions, bh as ProjectChordSymbol, bi as ProjectClipCompSegment, bj as ProjectClipDesc, bk as ProjectClipFade, bl as ProjectClipTake, bm as ProjectCompileResult, bn as ProjectFadeCurve, bo as ProjectKeySegment, bp as ProjectLoopMode, bq as ProjectLoopRecordingDesc, br as ProjectLoopRecordingResult, bs as ProjectMidiClipResult, bt as ProjectMidiEvent, bu as ProjectNotePairValidation, bv as ProjectTrackDesc, bw as ProjectTrackKind, bx as ProjectWarpAnchor, by as ProjectWarpMapDesc, bz as RealtimeEngine, bA as RealtimeVoiceChanger, bB as RealtimeVoiceChangerConfigInput, bC as RealtimeVoiceChangerInterleavedBuffer, bD as RealtimeVoiceChangerMonoBuffer, bE as RealtimeVoiceChangerPlanarBuffer, bF as RealtimeVoiceChangerPodConfig, bG as RhythmAnalysisResult, bH as RhythmFeatures, bI as RirResult, bJ as RirSynthOptions, bK as RoomEstimateOptions, bL as RoomEstimateResult, bM as RoomGeometryOptions, bN as RoomMorphOptions, bO as SYNTH_BODY_TYPES, bP as SYNTH_ENGINE_MODES, bQ as SYNTH_FILTER_MODELS, bR as SYNTH_FILTER_OUTPUTS, bS as SYNTH_MOD_DESTINATIONS, bT as SYNTH_MOD_SOURCES, bU as SYNTH_OSC_WAVEFORMS, bV as Section, bW as SectionType, bX as SendTiming, bY as Sf2InstrumentConfig, bZ as Sf2ProgramStatus, b_ as SoloProcessor, b$ as SonareError, c0 as SourceBackend, c1 as SpectrumOptions, c2 as SpectrumReport, c3 as StereoAnalysis, c4 as StftPowerResult, c5 as StftResult, c6 as StreamAnalyzer, c7 as StreamConfig, c8 as StreamConfigDefaults, c9 as StreamFramesI16, ca as StreamFramesU8, cb as StreamQuantizeConfig, cc as StreamingEqualizer, cd as StreamingEqualizerConfig, ce as StreamingMasteringChain, cf as StreamingMasteringChainConfig, cg as StreamingPlatform, ch as StreamingRetune, ci as StreamingRetuneConfig, cj as SynthBodyType, ck as SynthEngineMode, cl as SynthEnumTables, cm as SynthFilterModel, cn as SynthFilterOutput, co as SynthModDestination, cp as SynthModRouting, cq as SynthModSource, cr as SynthOscWaveform, cs as SynthPatch, ct as TempogramMode, cu as Timbre, cv as TimbreAnalysisResult, cw as TimbreFrame, cx as TimeSignature, cy as TransientShaperOptions, cz as TrimSilenceMode, cA as TrimSilenceOptions, cB as ValidateOptions, cC as VectorscopeReport, cD as VoiceChangeOptions, cE as VoiceChangeRealtimeOptions, cF as VoicePresetId, cG as WaveformPeakPyramidOptions, cH as WaveformPeaksOptions, cI as WaveformPeaksReport, cJ as WebMidiBinding, cK as WebMidiCcBinding, cL as WebMidiInputInfo, cM as amplitudeToDb, cN as analyze, cO as analyzeBpm, cP as analyzeDynamics, cQ as analyzeImpulseResponse, cR as analyzeMelody, cS as analyzeRhythm, cT as analyzeSections, cU as analyzeTimbre, cV as analyzeWithProgress, cW as bassChroma, cX as bindMicrophoneInput, cY as bindWebMidi, cZ as chordFunctionalAnalysis, c_ as chroma, c$ as chromaCens, d0 as cqt, d1 as createOpfsClipPageProvider, d2 as createOpfsClipPageWorker, d3 as cyclicTempogram, d4 as dbToAmplitude, d5 as dbToPower, d6 as decompose, d7 as decomposeWithInit, d8 as deemphasis, d9 as detectAcoustic, da as detectBeats, db as detectBpm, dc as detectChords, dd as detectDownbeats, de as detectKey, df as detectKeyCandidates, dg as detectOnsets, dh as ebur128LoudnessRange, di as engineAbiVersion, dj as engineCapabilities, dk as estimateRoom, dl as estimateTuning, dm as fixFrames, dn as fixLength, dp as fourierTempogram, dq as frameSignal, dr as framesToSamples, ds as framesToTime, dt as harmonic, du as hasFfmpegSupport, dv as hpss, dw as hpssWithResidual, dx as hybridCqt, dy as hzToMel, dz as hzToMidi, dA as hzToNote, init, isInitialized, dB as isSonareError, dC as isWebMidiAvailable, dD as lufs, dE as lufsInterleaved, dF as masterAudio, dG as masterAudioStereo, dH as masterAudioStereoWithProgress, dI as masterAudioWithProgress, dJ as mastering, dK as masteringAssistantSuggest, dL as masteringAudioProfile, dM as masteringChain, dN as masteringChainStereo, dO as masteringChainStereoWithProgress, dP as masteringChainWithProgress, dQ as masteringDynamicsCompressor, dR as masteringDynamicsGate, dS as masteringDynamicsTransientShaper, dT as masteringInsertNames, dU as masteringInsertParamNames, dV as masteringPairAnalysisNames, dW as masteringPairAnalyze, dX as masteringPairProcess, dY as masteringPairProcessorNames, dZ as masteringPresetNames, d_ as masteringProcess, d$ as masteringProcessStereo, e0 as masteringProcessorNames, e1 as masteringRepairDeclick, e2 as masteringRepairDeclip, e3 as masteringRepairDecrackle, e4 as masteringRepairDehum, e5 as masteringRepairDenoiseClassical, e6 as masteringRepairDereverbClassical, e7 as masteringRepairTrimSilence, e8 as masteringStereoAnalysisNames, e9 as masteringStereoAnalyze, ea as masteringStreamingPreview, eb as melSpectrogram, ec as melToAudio, ed as melToHz, ee as melToStft, ef as meteringCrestFactorDb, eg as meteringDcOffset, eh as meteringDetectClipping, ei as meteringDynamicRange, ej as meteringPeakDb, ek as meteringPhaseScope, el as meteringPhaseScopeDecimated, em as meteringRmsDb, en as meteringSpectrum, eo as meteringSpectrumFrame, ep as meteringStereoCorrelation, eq as meteringStereoWidth, er as meteringTruePeakDb, es as meteringVectorscope, et as meteringVectorscopeDecimated, eu as mfcc, ev as mfccToAudio, ew as mfccToMel, ex as midiToHz, ey as mixStereo, ez as mixingScenePresetJson, eA as mixingScenePresetNames, eB as momentaryLufs, eC as nnFilter, eD as nnlsChroma, eE as normalize, eF as noteStretch, eG as noteToHz, eH as onsetEnvelope, eI as onsetStrengthMulti, eJ as opfsClipPageWorkerSource, eK as padCenter, eL as pcen, eM as peakPick, eN as percussive, eO as phaseVocoder, eP as pitchCorrectToMidi, eQ as pitchCorrectToMidiTimevarying, eR as pitchPyin, eS as pitchShift, eT as pitchTuning, eU as pitchYin, eV as plp, eW as polyFeatures, eX as powerToDb, eY as preemphasis, eZ as projectAbiVersion, e_ as pseudoCqt, e$ as realtimeVoiceChangerPresetConfig, f0 as realtimeVoiceChangerPresetJson, f1 as realtimeVoiceChangerPresetNames, f2 as remix, f3 as resample, f4 as rmsEnergy, f5 as roomMorph, f6 as samplesToFrames, f7 as scaleCorrectionSemitones, f8 as scalePitchClassEnabled, f9 as scaleQuantizeMidi, fa as shortTermLufs, fb as spectralBandwidth, fc as spectralCentroid, fd as spectralContrast, fe as spectralFlatness, ff as spectralRolloff, fg as splitSilence, fh as stft, fi as stftDb, fj as streamAnalyzerConfigDefaults, fk as synthEnumTables, fl as synthPresetNames, fm as synthPresetPatch, fn as synthesizeRir, fo as tempogram, fp as tempogramRatio, fq as timeStretch, fr as timeToFrames, fs as tonnetz, ft as trim, fu as trimSilence, fv as validateRealtimeVoiceChangerPresetJson, fw as vectorNormalize, fx as version, fy as voiceChange, fz as voiceChangeRealtime, fA as voiceChangerAbiVersion, fB as voiceCharacterPresetId, fC as vqt, fD as waveformPeakPyramid, fE as waveformPeaks, fF as zeroCrossingRate, fG as zeroCrossings } from './worklet.js';
2
2
  export { ProgressCallback } from './sonare.js';