The registration is completed as §8 permits: the row named the generator and no byte layout. The payload is one canonical JSON object naming the model by its SHA-256 and giving the prompt, the seed, the steps and every size a sink makes, each within stated bounds and with one serialization per object, so an envelope's content hash names the instructions. A sink makes only listed sizes, with that model only; conformance is generation-equivalence at each listed size, and a sink holding a size's SHA-256 does not present a picture that differs or accept one on a 64-bit FNV-1a alone. The envelope's intent is `create`: a generator does not back `replicate` (§7), and this keeps that rule. The registry row names the payload; §8 lists the completion. score §2.3 documents the integer authoring form `wai score build` reads, and §4 the pcm_sha256 every vector now states. CI builds the `wai` binary with `generate` and `score` in both profiles of the integer-kernel steps and runs tests/cli_generate_score.rs there; the two larger listed sizes of instr-v0.json run in the release step. Co-Authored-By: Claude Opus 5.5 <[email protected]>
2.3 KiB
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.
Provenance. Generated here: wai_score_vectors gen writes every score from notes authored in code. No recording.
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— theWSCRcontainer (contract + note events).notes/<name>.json— the same score in the authoring form (score §2.3): the contract and every note field as an integer, the input ofwai score build.expected_hashes.json— per score:notes,duration,score_hash(identity),mixdown_hash(the conformance quantity), andpcm_sha256, the SHA-256 of the samei16lesamples (SPEC §7 Digests).
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, PCM SHA-256 and score-hash equality, and each
notes/<name>.json exactly the vector's notes in the authoring form.
With the wai tool (a build with score):
wai score build ../score-conformance/notes/scale.json -o scale.wscr # the committed WSCR, byte for byte
wai score render scale.wscr --pcm scale.s16 --json # samples, pcm_sha256, mixdown_blake3, score_hash
tests/cli_generate_score.rs runs both over every vector.