The deepest audio lever: a score carries no recording, only note events. A deterministic trig-free reference synth (phase-accumulator oscillator + linear ADSR, all in the Fx floor) reconstructs a canonical i16 PCM mixdown; conformance is mixdown-equivalence, the music counterpart of spatial audio. A soundfont/neural instrument is the sink's presentation. - wai-rs `score` feature: WSCR container + reference synth + mixdown/ score hashes; corpus (scale/chord/arp) via wai_score_vectors; registered + tiered Lossless. - wai-web ScoreSink + the /score browser sink (in-tab verify + Web Audio). - extensions/score.md, SPEC §5 row, content-taxonomy music → ✅. Green: wai-rs all features (68 lib + integration) + clippy, wai-web wasm. Co-Authored-By: Claude Opus 4.8 <[email protected]>
38 lines
1.5 KiB
Markdown
38 lines
1.5 KiB
Markdown
# Score Conformance Corpus
|
|
|
|
Vectors for the score extension (`wai.audio.score`). The criterion is
|
|
**mixdown-equivalence**: given the same score, a conforming sink MUST
|
|
render the identical canonical `i16` PCM via the deterministic reference
|
|
synth, hence the identical BLAKE3 — on every machine, no tolerance
|
|
parameter. The music counterpart of spatial audio's
|
|
mixdown-equivalence, with the recorded sound objects replaced by note
|
|
events.
|
|
|
|
The reference synth is trig-free: a phase accumulator drives a
|
|
piecewise-linear oscillator (saw / square / triangle / pulse) shaped by
|
|
a linear ADSR envelope, all in the `wai.det.fixed64` floor. Pitch is
|
|
carried as a per-sample phase increment authored off-line, so the floor
|
|
never evaluates an exponential. A sink with a soundfont or neural
|
|
instrument renders the same score richly — that is presentation, not
|
|
conformance.
|
|
|
|
## Layout
|
|
|
|
- `vectors/<name>.wscr` — the `WSCR` container (contract + note events).
|
|
- `expected_hashes.json` — per score: `notes`, `duration`, `score_hash`
|
|
(identity), and `mixdown_hash` (the conformance quantity).
|
|
|
|
Vectors:
|
|
- `scale` — a C-major scale ascending (saw).
|
|
- `chord` — a C-major triad held together (triangle, polyphony).
|
|
- `arp` — a four-step arpeggio that changes timbre across the phrase.
|
|
|
|
## Running
|
|
|
|
```
|
|
cd ../wai-rs
|
|
cargo run --features score --bin wai_score_vectors -- verify ../score-conformance
|
|
cargo run --features score --bin wai_score_vectors -- gen ../score-conformance # regenerate
|
|
```
|
|
|
|
Pass = mixdown-hash and score-hash equality.
|