Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
4af521c
feat(util): Extend shared types, exceptions, and top-level headers fo…
libraz May 19, 2026
f74cf9f
feat(analysis): Add acoustic analyzer with RT60/EDT/C50/C80/D50 estim…
libraz May 20, 2026
f07b32e
feat(analysis): Add downbeat detector and meter/time-signature classi…
libraz May 20, 2026
1481f36
feat(analysis): Add HMM chord smoothing, chord inversions, and key-co…
libraz May 20, 2026
bf2661c
feat(feature): Add NNLS chroma and tempogram (Fourier/cyclic/ratio)
libraz May 20, 2026
f8b27ea
feat(analysis): Enhance key, BPM, beat, rhythm, and music analyzers
libraz May 20, 2026
ae95662
feat(mastering): Add EBU R128 LUFS metering and expand presets and ch…
libraz May 20, 2026
2000040
feat(capi): Expand C API and WASM embind surface for new analysis mod…
libraz May 21, 2026
51657d8
feat(bindings): Expose new APIs in Node, Python, and WASM with full t…
libraz May 21, 2026
12eb306
feat(cli): Add subcommands and fix boolean-flag registration
libraz May 21, 2026
3c7f83c
test: Add analyzer tests, librosa-parity tests, EBU R128 compliance, …
libraz May 23, 2026
7799d95
chore(build): Update CMake, CI workflow, docs, and Python packaging f…
libraz May 24, 2026
eba3cc5
feat(capi): Expose onset_strength, tempogram, nnls_chroma, and LUFS i…
libraz May 24, 2026
a71c9a5
feat(bindings): Expose onset_strength, tempogram, nnls_chroma, and LU…
libraz May 24, 2026
d673a00
feat(cli): Add acoustic, lufs, onset-envelope, fourier-tempogram, tem…
libraz May 24, 2026
70e250f
test: Add C API, Node, Python, and WASM tests for onset, tempogram, n…
libraz May 24, 2026
b800187
docs: Document onset envelope, tempogram family, NNLS chroma, and LUF…
libraz May 24, 2026
9234ef1
feat(feature): Add inverse CQT (icqt) reconstruction
libraz May 24, 2026
29a71af
feat(feature): Add probabilistic YIN (pyin) pitch tracking
libraz May 24, 2026
522dc27
test(librosa): Add PLP pulse statistics reference test
libraz May 24, 2026
4b6c411
refactor(mastering): Split chain into json/params/streaming translati…
libraz May 24, 2026
44ce31b
feat(mastering): Add nine genre presets
libraz May 24, 2026
fb41bdf
feat(mastering): Add rule-based mastering assistant
libraz May 24, 2026
5de58eb
feat(mastering): Linear-phase EQ true biquad response and tube harmon…
libraz May 24, 2026
dff535b
docs(mastering): Clarify denoise_classical scope and out-of-scope items
libraz May 24, 2026
db0094f
test(mastering): Add golden-hash regression, property tests, and fixt…
libraz May 24, 2026
3369124
docs(bindings): List new genre presets in binding READMEs
libraz May 24, 2026
d7ed8a3
feat(daw): Add DAW DSP engine, routing graph, creative FX, pitch/time…
libraz May 24, 2026
4718e7b
feat(mixing): Expand channel strip with EQ, aux sends, and BS.1770 LU…
libraz May 24, 2026
9f62178
feat(mixing): Add automation lanes, scene/preset API, and full bindin…
libraz May 24, 2026
dc0c92c
perf(analysis): Use fast NNLS chroma profile in chord recognizer and …
libraz May 24, 2026
22aa885
perf(analysis): Halve RT60 ML grid and add adaptive decay search
libraz May 24, 2026
20cf2a1
test(analysis): Shorten synthetic signal durations to cut test runtime
libraz May 24, 2026
8e5e5ef
feat(rt): Add automatable parameter API and per-output-port latency
libraz May 24, 2026
ca2f527
feat(dsp): Implement set_parameter across mastering, effects, and ins…
libraz May 24, 2026
0f9506a
feat(mixing): Route strips through graph with insert/send automation …
libraz May 24, 2026
408a92d
feat(bindings): Expose mixing routing and automation in node/python/wasm
libraz May 24, 2026
e45ed42
feat(eq): Add unified equalizer engine with dynamic EQ, routing, and …
libraz May 25, 2026
1dd2d98
test(eq): Add golden/unit tests, mixing integration, and benchmark fo…
libraz May 25, 2026
a48e545
feat(bindings): Expose unified equalizer engine through C API, WASM, …
libraz May 25, 2026
37032cd
refactor(python): Split analyzer into submodules and add equalizer su…
libraz May 25, 2026
5750678
docs: Update mastering feature table wording in README
libraz May 25, 2026
4e86d08
feat(mixing): Add AudioWorklet bridge, bus inserts, input trim, sidec…
libraz May 25, 2026
ddc0672
feat(mixing): Expand runtime mixer surface across C API, WASM, Node, …
libraz May 25, 2026
d6a8098
feat(editing): Expose audio editing surface across Node, Python, and …
libraz May 25, 2026
296b142
feat(rt): Add lock-free RT primitives and transport/timeline layer
libraz May 25, 2026
34cca3f
feat(automation): Add sample-accurate parameter automation layer
libraz May 25, 2026
f38ad4a
feat(engine): Add real-time playback engine with full component suite
libraz May 25, 2026
65cee8d
feat(capi): Expose real-time engine through C ABI and WASM rt module
libraz May 25, 2026
b527fb4
feat(bindings): Expose real-time engine across Node, Python, and WASM…
libraz May 25, 2026
fe1a1e8
refactor(editing): Relocate pitch_editor and voice_changer from analy…
libraz May 26, 2026
524455b
feat(core): Add periodic vs symmetric window option
libraz May 26, 2026
77ee888
feat(feature): Add explicit sr param to inverse functions and refine VQT
libraz May 26, 2026
7fff1b7
feat(analysis): Rework section classification and improve analysis ac…
libraz May 26, 2026
6d076f4
feat(engine): Expand real-time engine with sample-accurate processing
libraz May 26, 2026
4caab90
feat(mastering): Expand multiband processors and add make_insert_with_ir
libraz May 26, 2026
6eceefe
fix(effects): Fix chorus buffer sizing and dattorro mono output clobb…
libraz May 26, 2026
5cc6036
feat(capi): Expose section analysis, melody, CQT/VQT, and engine APIs
libraz May 26, 2026
49520c3
feat(bindings): Expose section analysis, melody, CQT/VQT, and engine …
libraz May 26, 2026
ae16779
refactor(metering): Promote metering module from analysis/meter/ to t…
libraz May 26, 2026
e2930de
fix(core): Realize iirt as biquad cascade, drain resample tail exactl…
libraz May 26, 2026
3aef3c7
fix(feature): Align chroma pitch-class origin with librosa and refact…
libraz May 26, 2026
4f9a0ef
feat(metering): Centralize ITU-R BS.1770 K-weighting design in double…
libraz May 26, 2026
3cec10c
refactor(mastering): Add shared biquad helpers, fix per-channel HPF s…
libraz May 26, 2026
64c4dd4
fix(rt): Enforce single-lane-acquisition contract and fix muted-strip…
libraz May 26, 2026
d908dad
feat(capi): Expose inverse Mel/MFCC reconstruction and streaming anal…
libraz May 26, 2026
db66d78
feat(bindings): Expose streaming analyzer and inverse Mel/MFCC recons…
libraz May 26, 2026
706ef74
refactor(rt): Centralize first-order biquad/loudness helpers and use …
libraz May 26, 2026
880d1ca
refactor: Centralize numeric constants in util/constants.h
libraz May 26, 2026
8be5501
fix(feature): DSP correctness for spectral, VQT, iirt, melody, and CQT
libraz May 26, 2026
573eeab
fix(mastering): Per-channel state init, config validation, and numeri…
libraz May 26, 2026
a341a9a
fix(automation): Require explicit lane acquisition from caller
libraz May 26, 2026
0740fdc
fix(streaming): Exact cumulative sample counting and bounded chroma h…
libraz May 26, 2026
482a1d5
feat(capi): Expose streaming chord/pattern progression and extended c…
libraz May 26, 2026
a1d50b3
feat(bindings): Expose expanded streaming config and chord/pattern st…
libraz May 26, 2026
393f47b
refactor(analysis): Extract chord progression patterns and key matchi…
libraz May 26, 2026
b86bc3c
refactor: Centralize numeric constants (n_mels, epsilon, C1)
libraz May 26, 2026
b6d2835
refactor(rt): Route IIR, crossover, and mastering filters through sha…
libraz May 26, 2026
8a55534
feat(capi): Add stream window/output-format config and mel-inversion …
libraz May 26, 2026
cb04ce0
feat(bindings): Expose stream window/output-format and mel-inversion …
libraz May 26, 2026
ee2cad8
refactor(rt): Add rbj_bandpass_raw_d and route iirt/wavelet through s…
libraz May 26, 2026
4328e83
refactor(rt): Extract butterworth_stage_q, one_pole_lowpass_alpha, an…
libraz May 26, 2026
f3bad1c
feat: Add shared headers, repair stages, and DSP feature additions
libraz May 26, 2026
686b6d4
fix(dsp): Correct iSTFT windowing, chroma folding, K-weighting, and L…
libraz May 26, 2026
fa5fd27
fix(rt): Make engine counters/smoothing atomic and exclude shared strips
libraz May 26, 2026
9afdce3
fix(mastering): Preserve per-channel state on channel-count change
libraz May 26, 2026
6578f91
feat(mastering): Register ducking and loudnessOptimize processors
libraz May 26, 2026
117e442
feat(mastering): Add assistant/profile/streaming-preview JSON and C API
libraz May 26, 2026
8f8829a
feat(mixing): Add hold/s-curve curves and per-target insert/send lanes
libraz May 26, 2026
66b3167
feat(bindings): Expose mastering assistant/profile/preview, ducking, …
libraz May 26, 2026
4bef905
fix(node): Drop sidechain reset in streaming equalizer process
libraz May 26, 2026
f502e17
docs: Refresh README descriptions across core and bindings
libraz May 26, 2026
b7fd881
refactor(core): Share reflect-padding helper and fix Griffin-Lim length
libraz May 26, 2026
7cf2f0b
refactor: Default dB amin/threshold to constants::kEpsilon
libraz May 26, 2026
a00dad3
refactor(rt): Relocate one-pole highpass design into rt layer
libraz May 26, 2026
d30c80b
refactor(feature): Reuse shared chroma column normalization
libraz May 26, 2026
dde91c7
refactor(mastering/dynamics): Consolidate envelope coefficient helper
libraz May 26, 2026
81b8c01
feat(mastering/dynamics): Add de-esser bandpass Q and preserve stereo…
libraz May 26, 2026
6f668d5
feat(mastering/assistant): Configurable speech mono-maker amount
libraz May 26, 2026
c50c534
feat(engine): Automation bind feedback, monitor bus routing, sample-a…
libraz May 26, 2026
42d1be4
feat(editing): Derive streaming-retune grain size from sample rate
libraz May 26, 2026
e2b5ac6
fix(analysis): Interpolate dynamics percentiles and guard timbre MFCC…
libraz May 26, 2026
98c24c0
refactor(mastering): Use spectrum epsilon for dereverb and rename cro…
libraz May 26, 2026
c9b8a51
docs(feature): Correct tempogram autocorrelation note
libraz May 26, 2026
ce1cbdf
chore(bindings): Expose progressive chordStartTime and stream type stubs
libraz May 26, 2026
ac143f3
feat(mastering): Make dynamics processors real-time-safe with pre-all…
libraz May 26, 2026
0b930f1
feat(mastering): Resolve loudness targets per platform and honor stre…
libraz May 26, 2026
0217d66
refactor(feature): Replace inline chroma normalization loops with nor…
libraz May 26, 2026
bb87565
fix(analysis): Use linear interpolation in percentile helper to match…
libraz May 26, 2026
20b707a
feat(feature): Add cosine similarity mode to tempogram
libraz May 26, 2026
c1a78bd
feat(engine): Add monitor bus output and automation telemetry diagnos…
libraz May 26, 2026
37f94c5
refactor(mastering): Centralise channel preallocation limit in channe…
libraz May 26, 2026
60615bc
chore(release): Bump version to 1.2.0 and update CHANGELOG
libraz May 26, 2026
9512499
chore(deps): Update binding dependencies and fix biome 2.4.15 lint
libraz May 26, 2026
7597bfd
ci: Run ctest in parallel in Makefile and publish workflow
libraz May 26, 2026
cd6f093
fix(build): Make the MSVC /W4 /WX build pass
libraz May 26, 2026
59562c5
test: Fix cross-platform and parallel-contention test failures
libraz May 26, 2026
b247935
style: clang-format tools/sonare_cli.cpp
libraz May 26, 2026
4c2b53a
fix(mixing): Own sidechain key pointers to fix use-after-scope
libraz May 26, 2026
a356337
fix(build): Mark fetched Eigen headers as system includes
libraz May 26, 2026
ec1d679
test(maximizer): Prepare AdaptiveRelease for the processed block size
libraz May 26, 2026
3546fd3
fix(build): Fetch Eigen headers-only and silence MSVC C4996
libraz May 26, 2026
131caec
test(engine): Split concurrent mutation test into paced CI + hidden soak
libraz May 27, 2026
c91c667
fix(build): Suppress MSVC C4244/C4267/C4305 to match the GCC/Clang bar
libraz May 27, 2026
63d0ea0
fix(wasm): Make worklet bundle self-contained with independent module…
libraz May 27, 2026
ae4ee67
ci: Add lightweight develop-branch workflow for fast feedback
libraz May 27, 2026
e360401
fix(build): Split mastering chain param dispatch to avoid MSVC C1061
libraz May 27, 2026
8945584
fix(tests): Fix MSVC portability (M_PI, lambda constexpr, aligned alloc)
libraz May 27, 2026
1f45ed2
fix(tests): Suppress MSVC C4996 for deprecated icqt in cqt tests
libraz May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
134 changes: 134 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,20 @@ concurrency:
cancel-in-progress: true

jobs:
clang-format:
name: clang-format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install clang-format
run: |
sudo apt-get update
sudo apt-get install -y clang-format
- name: Check formatting
run: |
git ls-files -z -- '*.h' '*.hpp' '*.c' '*.cpp' ':!:third_party/**' |
xargs -0 clang-format --dry-run --Werror

lint:
runs-on: ubuntu-latest
defaults:
Expand All @@ -40,6 +54,61 @@ jobs:
- run: yarn lint

build-and-test:
name: Native C++ (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- name: Install Linux dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y cmake build-essential libeigen3-dev
- name: Configure
run: cmake -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=ON -DBUILD_CLI=OFF -DSONARE_WITH_FFMPEG=OFF
- name: Build
run: cmake --build build --parallel
- name: Test
run: ctest --test-dir build --output-on-failure --parallel

sanitizer:
name: ASan/UBSan (ubuntu-latest)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake clang build-essential libeigen3-dev
- name: Configure with sanitizers
env:
CC: clang
CXX: clang++
run: |
cmake -B build-sanitize \
-DCMAKE_BUILD_TYPE=Debug \
-DBUILD_TESTING=ON \
-DBUILD_CLI=OFF \
-DSONARE_WITH_FFMPEG=OFF \
-DCMAKE_C_FLAGS="-fsanitize=address,undefined -fno-omit-frame-pointer" \
-DCMAKE_CXX_FLAGS="-fsanitize=address,undefined -fno-omit-frame-pointer" \
-DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address,undefined" \
-DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=address,undefined"
- name: Build
run: cmake --build build-sanitize --parallel
- name: Test
env:
ASAN_OPTIONS: detect_leaks=1:strict_string_checks=1
UBSAN_OPTIONS: print_stacktrace=1
run: ctest --test-dir build-sanitize --output-on-failure --parallel
# Windows is intentionally excluded: MSVC sanitizer coverage differs from
# Clang/GCC ASan+UBSan and would make this gate inconsistent across OSes.

coverage-wasm:
name: Coverage + WASM
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -101,6 +170,30 @@ jobs:
- name: Run C++ tests
run: ctest --test-dir build --output-on-failure --parallel

- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Audit optional fixture manifests
run: |
python -m py_compile \
tests/fixtures/json_safe.py \
tests/fixtures/audit_manifests.py \
tests/fixtures/run_optional_fixture_report.py \
tests/fixtures/evaluate_optional_fixture_targets.py \
tests/fixtures/compare_optional_fixture_reports.py
python tests/fixtures/audit_manifests.py
- name: Type-check Python stubs
working-directory: bindings/python
run: |
python -m pip install -e . mypy
python -m mypy --strict ../../tests/typing/python_smoke.py

- name: Type-check Node preset literals
working-directory: bindings/node
run: |
yarn install --immutable
yarn tsc --noEmit --ignoreConfig --strict --module NodeNext --moduleResolution NodeNext --target ES2022 --types node ../../tests/typing/node_smoke.ts

- name: Generate coverage report
run: |
mkdir -p build/coverage
Expand All @@ -125,3 +218,44 @@ jobs:
- name: Test WASM binding
working-directory: bindings/wasm
run: yarn test
- name: Report WASM size
run: |
mkdir -p build/reports
baseline_args=()
if [ -n "${WASM_BASELINE:-}" ]; then
baseline_args=(--wasm-baseline "$WASM_BASELINE")
fi
python tests/fixtures/run_optional_fixture_report.py \
--suite music \
--sonare-tests build/bin/sonare_tests \
--include-wasm-size \
--wasm-current bindings/wasm/dist/sonare.wasm \
"${baseline_args[@]}" \
--output build/reports/wasm-size-report.json
python - <<'PY'
import json
from pathlib import Path

report = json.loads(Path("build/reports/wasm-size-report.json").read_text())
observations = [
item
for run in report["runs"]
for item in run.get("observations", [])
if item.get("metric") == "wasm_size"
]
if len(observations) != 1:
raise SystemExit("expected exactly one wasm_size observation")
print(json.dumps(observations[0], sort_keys=True))
PY
if [ -n "${WASM_BASELINE:-}" ]; then
python tests/fixtures/evaluate_optional_fixture_targets.py \
build/reports/wasm-size-report.json \
--metrics wasm_size \
--require-metrics \
--output build/reports/wasm-size-evaluation.json
fi
- name: Upload WASM size report
uses: actions/upload-artifact@v4
with:
name: wasm-size-report
path: build/reports/wasm-size-*.json
74 changes: 74 additions & 0 deletions .github/workflows/develop-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Develop CI

# Fast feedback for day-to-day work on develop: formatting, linting, and a
# single-platform (Linux/Debug) build + test. The heavy, thorough validation
# (multi-OS native, ASan/UBSan, coverage, WASM) runs as the pre-release gate in
# ci.yml on pull requests to main and pushes to main.
on:
push:
branches: [develop]
tags-ignore: ['**']
paths-ignore:
- '**.md'
- 'docs/**'
- 'LICENSE'
- 'NOTICE'
pull_request:
branches: [develop]
paths-ignore:
- '**.md'
- 'docs/**'
- 'LICENSE'
- 'NOTICE'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
clang-format:
name: clang-format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install clang-format
run: |
sudo apt-get update
sudo apt-get install -y clang-format
- name: Check formatting
run: |
git ls-files -z -- '*.h' '*.hpp' '*.c' '*.cpp' ':!:third_party/**' |
xargs -0 clang-format --dry-run --Werror

lint:
runs-on: ubuntu-latest
defaults:
run:
working-directory: bindings/wasm
steps:
- uses: actions/checkout@v4
- run: corepack enable
working-directory: .
- uses: actions/setup-node@v4
with:
node-version: 22
cache: yarn
cache-dependency-path: bindings/wasm/yarn.lock
- run: yarn install --immutable
- run: yarn lint

build-and-test:
name: Native C++ (ubuntu-latest)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Linux dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake build-essential libeigen3-dev
- name: Configure
run: cmake -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=ON -DBUILD_CLI=OFF -DSONARE_WITH_FFMPEG=OFF
- name: Build
run: cmake --build build --parallel
- name: Test
run: ctest --test-dir build --output-on-failure --parallel
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=ON
cmake --build build --parallel
ctest --test-dir build --output-on-failure
ctest --test-dir build --output-on-failure --parallel

- name: Install Node deps (WASM binding)
working-directory: bindings/wasm
Expand Down
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ backup/
*.flac
*.mp3
*.ogg
*.m4a
*.aac
*.jams

# Test outputs (CMake CTest output directory)
/Testing/
Expand All @@ -56,6 +59,27 @@ output.json
output.mid
analysis.json

# Optional external fixture data and local-only fixture workflows
tests/fixtures/local/
tests/fixtures/local_eval/
tests/fixtures/reports/
tests/fixtures/music_eval/FSL10K/
tests/fixtures/music_eval/annotation/
tests/fixtures/music_eval/annotations/
tests/fixtures/music_eval/audio/
tests/fixtures/music_eval/audio_*/
tests/fixtures/music_eval/babyslakh*/
tests/fixtures/music_eval/slakh/
tests/fixtures/music_eval/Slakh*/
tests/fixtures/music_eval/Flakh*/
tests/fixtures/music_eval/guitarset_annotations/
tests/fixtures/music_eval/midi_annotations/
tests/fixtures/music_eval/local_annotations/
tests/fixtures/**/*.tar.gz
tests/fixtures/**/*.zip
tests/fixtures/**/*.pdf
tests/fixtures/**/*.json

# Binaries (in build directory only)
/build
*.exe
Expand Down
66 changes: 66 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Changelog

## Unreleased

## v1.2.0 (2026-05-26)

### Mixing engine

- Added the mixing engine surface: channel strips, pan modes, width controls,
sends, FX buses, goniometer/true-peak metering, JSON scene presets, and
offline stereo rendering.
- Added channel-strip input trim, insert gain scale/output gain/pan controls,
external sidechain parameters, bus insert hosting, graph PDC, and scene-loaded
persistent mixer APIs.
- Added hold and s-curve automation shapes plus per-target insert/send lanes.
- Added automation lanes, scene/preset API, and an AudioWorklet bridge.
- Added a native mixing benchmark target and expanded CI coverage for macOS and
Windows native builds.
- Added mixing QA coverage for golden hashes, no-allocation process checks,
graph routing/PDC integration, meter/goniometer snapshots, and CLI/binding
smoke tests.

### Mastering engine

- Added a monitor bus output with automation telemetry diagnostics and
sample-accurate, bind-feedback automation routing.
- Made the dynamics processors real-time-safe via channel pre-allocation, with a
centralised channel preallocation limit.
- Resolved loudness targets per streaming platform and honoured platform
normalisation.
- Registered ducking and loudnessOptimize processors and added a de-esser
bandpass Q with stereo preservation.
- Added assistant/profile/streaming-preview JSON output and a configurable
speech mono-maker amount.

### Analysis & features

- Added a cosine-similarity mode to the tempogram.
- Derived streaming-retune grain size from the sample rate.
- Improved DSP correctness for iSTFT windowing, chroma folding, K-weighting,
spectral/VQT/iirt/melody/CQT features, and percentile interpolation (now
matching NumPy's linear interpolation).

### Bindings & API

- Exposed mixing presets and rendering through C, Python, Node, WASM, and CLI
APIs.
- Exposed mastering assistant/profile/preview, ducking, streaming chord/pattern
progression, stream window/output-format config, and inverse Mel/MFCC
reconstruction across the C, Node, and WASM bindings.

### Fixes

- Preserved per-channel mastering state on channel-count change and tightened
config validation.
- Made engine counters and smoothing atomic and excluded shared strips.
- Fixed exact cumulative sample counting and bounded chroma history in the
streaming analyzer.
- Dropped the spurious sidechain reset in the Node streaming equalizer.

### Internal

- Centralised numeric constants in `util/constants.h` and routed IIR,
crossover, and mastering filters through shared biquad/loudness helpers.
- Fixed the stale `SONARE_VERSION_*` macros in `sonare.h` so the runtime
`version()` reports the correct value.
Loading
Loading