open-standards/wai/pack-conformance/loudness
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science f4578857a4
Some checks failed
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 11s
wai-quantum energy-landscape jobs / does this change touch it (push) Successful in 11s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 1m19s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 1m19s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 1m20s
wai-app and Create / wai-app · does this change touch it (push) Successful in 1m23s
wai-key-proxy / does this change touch it (push) Successful in 50s
wai-audit collector and player integration / does this change touch it (push) Successful in 53s
wai-fleet service / does this change touch it (push) Successful in 53s
WAI operation catalogue / does this change touch it (push) Successful in 54s
wai-ledger service / does this change touch it (push) Successful in 53s
wai-quantum for JavaScript / does this change touch it (push) Successful in 53s
wai-quantum studio and desktop / does this change touch it (push) Successful in 52s
wai-sink-android native sink library / does this change touch it (push) Successful in 1m45s
WAI Studio / does this change touch it (push) Successful in 1m18s
wai-sink-swift native sink package / does this change touch it (push) Successful in 1m20s
wai-quantum energy-landscape jobs / the same bits · macos (push) Successful in 4m30s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 52s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 1m40s
wai-fleet service / service · macos (push) Successful in 43s
wai-ledger service / service · macos (push) Successful in 1m7s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Has been cancelled
wai-audit collector and player integration / collector · linux (push) Has been cancelled
WAI operation catalogue / the catalogue and every door · linux (push) Has been cancelled
wai-fleet service / service · linux (push) Has been cancelled
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Has been cancelled
wai-ledger service / service · linux (push) Has been cancelled
wai-quantum for JavaScript / javascript · linux (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Has been cancelled
wai-quantum studio and desktop / studio · browser (push) Has been cancelled
wai-quantum studio and desktop / desktop app · linux (push) Has been cancelled
wai-quantum studio and desktop / desktop app · windows (push) Has been cancelled
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Has been cancelled
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (push) Has been cancelled
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Has been cancelled
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Has been cancelled
WAI Studio / Studio in Chromium and Firefox · macos (push) Has been cancelled
WAI Studio / Studio in WebKit · linux (push) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 3m34s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 6m17s
wai-key-proxy / proxy · linux (push) Has been cancelled
wai-quantum energy-landscape jobs / the same bits · linux-arm64 (push) Has been cancelled
wai-quantum energy-landscape jobs / native against WebAssembly, over many seeds (push) Has been cancelled
wai-quantum energy-landscape jobs / reader, kernels, answers and the stated result · linux, release (push) Has been cancelled
wai-quantum energy-landscape jobs / the module under wasm32-wasip2 (wasmtime) (push) Has been cancelled
wai: loudness measured in integers, with the gain to a target in a signed statement
A packager could say nothing of a programme's loudness, and a broadcast or streaming chain must
deliver at a target (ATSC A/85, EBU R 128) and show it did.

packaging §12 measures integrated loudness as ITU-R BS.1770 does — K-weighting, 400 ms blocks
every 100 ms, the absolute gate at −70 LKFS and the relative gate 10 LU below — in integers only:
the coefficients at 48 kHz in units of 2^−30, exact sums of squares, and a stated integer
logarithm, so every implementation gives the same figure to the thousandth of an LU; BS.1770's
calibration tone measures −3 004. It states the sample peak and the gain to a target under a peak
ceiling. The packager signs a loudness statement (wai.pack.loudness, bs1770-int/1) naming the
component, the SHA-256 of its samples, every figure, the target, the ceiling, the gain and its
package receipt; a verifier holds the gain to the figures with no samples and recomputes every
figure with them. `wai-pack loudness measure` writes one from a WAV source, verified against it
before it is written, and `wai-pack loudness verify` checks one. Packaging's reasons are §13 now.

The reference is the loudness module of wai-rs; the corpus is pack-conformance/loudness/ (10
programmes given as formulas of integers, the logarithm of ten integers, 26 statements), the
tone's table and the filter's coefficients held to the text, with loudness_verify.py its second
implementation: every case agrees, 10 of 10 mutated copies fail and 12 of 12 weakened verifiers
are caught. Fourteen faults planted in the reference (the absolute gate, a 20 LU relative gate,
the surround and LFE weights, the block step, the filter's rounding, the logarithm's last bit, the
peak figure, the ceiling, the gain check, the source digest, the receipt, the first filter
section, a coefficient off by one) each fail its tests.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-08 15:23:58 -05:00
..
README.md wai: loudness measured in integers, with the gain to a target in a signed statement 2026-11-08 15:23:58 -05:00
vectors.json wai: loudness measured in integers, with the gain to a target in a signed statement 2026-11-08 15:23:58 -05:00

pack-conformance/loudness — integer loudness and the loudness statement

The corpus of extensions/packaging.md §12, in one file, vectors.json.

Provenance. Generated here by wai_loudness_vectors gen (wai-rs, feature loudness): programmes given as formulas of integers (one period of a 1 kHz tone at 48 kHz, sine_1k, which the text and the generator state; a linear congruential generator's noise; silence), their measurements, and statements signed with an Ed25519 key on a fixed 32-byte seed; no recording and no input from outside this repository.

  • programmes (§12.2, §12.3) are each a rate, a number of channels and segments, each of frames sample frames with a source a channel: zero; tone, sine_1k[k mod 48] × num / den, floored, for the segment's frame k; noise, from x = seed, each sample x ← (x × 1 103 515 245 + 12 345) mod 2^31 then ⌊x / 2^8⌋ mod (2·amp + 1) − amp; spike, the same noise with frame at at 32 767. outcome is the measurement: frames, blocks, gated, integrated_milli, peak, peak_milli.
  • logarithms (§12.3) are pairs of an integer and its L, both in decimal, the integer from 1 to 2^128 − 1.
  • statements (§12.5, §12.6) are each a statement's text, the receipt_hash a verifier expects (or null) and the programme it holds as its source (or null); outcome is verified, with the component, loudness, gain and limited, or refuse and the reason.

Everything is synthetic: the key attests nothing. The generator holds each programme to the loudness BS.1770's calibration or the programme's construction declares, and each statement's outcome is the one it was written to have.

wai_loudness_vectors verify and tests/loudness.rs check that the file regenerates byte for byte and that wai-rs reaches every stated outcome. ../loudness_verify.py is the second implementation, written from the extension's text, which also mutates copies of the corpus and drops each of its own checks in turn and requires each to be caught.