Files
troupe-standup/recoveries/music-master-verification.md

100 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Music master verification — "RECEIPTS, M'LORD", three candidates
**Date:** 2026-09-24 · **By:** Timmy · **Status:** pre-verification of the claims stated in `WORK-QUEUE.md` Q9,
run before the independent pass was asked for and recorded so that pass has something to contradict.
**Not the second opinion.** These measurements were taken on the same host, with the same tools that produced the
files. They can establish whether the *recorded numbers are true of the delivered files*; they cannot establish
that the pipeline is right about anything. The independent pass is still Zeph's to make, or nobody's.
## What was measured, and with what
```bash
cd /root/sovereign-music-daily/releases/2026-09-24/masters
sha256sum *.mp3
ffprobe -v error -show_entries stream=codec_name,sample_rate,channels,bit_rate,duration \
-show_entries format=duration,bit_rate,size,format_name -of default=noprint_wrappers=1 <file>
ffmpeg -nostdin -hide_banner -i <file> -af loudnorm=I=-14:TP=-1.0:print_format=json -f null - # input_i / input_tp / input_lra
ffmpeg -v error -nostdin -i <file> -f null - # full decode, rc + stderr
ffmpeg -v error -i <file> -f md5 - # decoded-audio identity
```
## Delivered MP3s — claim vs measurement
| candidate | sha256 (of the 7,801,965-byte file) | matches `STATE.json` | integrated LUFS | true peak dBFS | decode | dur (container) |
|---|---|---|---|---|---|---|
| `78c3791c` | `75bf91ffc2a141cc564c7cbbba83a8cd82c9685001760d4444f979c6a2ee0bff` | yes | **−14.12** | **−0.94** | clean, rc 0 | 195.024 s |
| `a381d8cf` | `c1cc8fda1785502378d78e23a85c7ee81faff325e780ae7f6bdf81e131aa0804` | yes | **−14.00** | **−1.57** | clean, rc 0 | 195.024 s |
| `e6d5e7e9` | `ca24d8a2beb8715e501df5218b29dca47e2b7f93ee1747caeefe95623cc6f40d` | yes | **−13.98** | **−0.92** | clean, rc 0 | 195.024 s |
All three: `mp3`, **48000 Hz, 2 channels, 320000 bps**. Decoded-audio MD5s are three different values
(`b57bc3b3…`, `20a02c46…`, `ccef58bc…`), so these are three distinct renditions, not three copies of one.
## Each Q9 claim, graded
| claim in Q9 | verdict | measurement |
|---|---|---|
| integrated loudness −14.0 ± 0.2 LUFS | **holds** | −14.12 / −14.00 / −13.98, max deviation 0.12 from the record |
| true peak ≤ −0.9 dBFS | **holds as written, wording should change** | −0.94 / −1.57 / −0.92. Two of three sit **inside 0.02–0.08 dB of the bound**, and `STATE.json`'s own event line states the mastering target as **−1.0 dBTP**, which none of the three meets (−0.92 and −0.94 are *above* it). Quote the measured value; the −1.0 is a loudnorm parameter, not a delivered figure. |
| full decode clean | **holds** | `ffmpeg -v error … -f null -` exits 0 with empty stderr on all three |
| 195.0 s | **holds, off by the encoder's padding** | FLAC source exactly 195.000 s; MP3 container 195.024 s |
| FLAC-source 48 kHz stereo | **holds** | 3 candidate FLACs: `flac`, 48000, 2ch, 195.000 s |
| 320 kbps MP3 | **holds** | `bit_rate=320000` (container rate 320041) |
| SHA-256s in the manifest | **holds; and "the manifest" is `STATE.json`** | all three match `STATE.json` character for character; no separate manifest file exists. The source FLACs match `logs/generated-files.json` |
| "three ACE-Step CPU renders" | **holds** | `logs/ace-result.json`: `engine` ACE-Step 1.5, `model` acestep-v15-turbo, `device` cpu, `inference_steps` 16, `seed` 4421…, `success` true, started 09:50:55Z, finished 12:18:16Z, `wall_seconds` 8840.9 |
`QC.json` (the source-file measurements) also reproduces: LUFS −13.37 / −13.28 / −13.33 against the recorded
−13.3 / −13.3 / −13.3; true peaks −0.87 / −0.74 / −0.93 against −0.9 / −0.7 / −0.9. The only figure with real
spread is loudness range — I measure 11.30 / 9.00 / 12.50 against the recorded 11.1 / 9.1 / 12.1, up to 0.4 apart.
LRA is the one number here whose definition varies between implementations, so this is recorded as a method note,
not as a discrepancy: the recorded values are not contradicted.
## Hook transcription — my own pass, 50–110 s window
```bash
ffmpeg -loglevel error -ss 50 -t 60 -i receipts-mlord-<tag>.mp3 -ac 1 -ar 16000 -c:a pcm_s16le /tmp/q9win-<tag>.wav
python3 -c 'from faster_whisper import WhisperModel; m=WhisperModel("small.en",device="cpu",compute_type="int8",local_files_only=True); \
s,i=m.transcribe("/tmp/q9win-<tag>.wav", language="en", beam_size=5, vad_filter=False, condition_on_previous_text=False); \
print([(round(x.start+50,2), x.text.strip()) for x in s])'
```
Model `Systran/faster-whisper-small.en` (int8, CPU), one 60 s window starting 50.0 s in each delivered master,
raw output kept at `/tmp/q9-transcription.json`. Wall time 96 s for the three.
**78c3791c** — chorus recovered at 77–91 s:
```
[77.00] Lord, the receipt is the proof The hats don't care who told you no
[82.00] Lord, the receipt is the proof 44 hours of tape in a row
[87.00] Say it again, the receipt is the proof
[91.00] Root around the door Keep your sure
```
**a381d8cf** — chorus at 86–105 s:
```
[86.00] Lord, the receipt is the proof
[91.00] The ask or receipt is the no
[96.00] Lord, the receipt is the proof
[101.00] Rude around the no, keep the show
```
**e6d5e7e9** — chorus at 75–99 s:
```
[75.00] Lord, the receipt is approved
[78.00] And I don't care who told you not
[81.00] The receipt is the proof
[83.00] Forty-four hours of tape in a row
```
**Reading it honestly.** The first hook line, "the receipt is the proof", is recovered verbatim in **all three**
candidates, in some case three times per window. The second hook line, "the hash don't care who told you no", is
recovered in **none** of them: ASR returns "The hats don't care…", "And I don't care…", "The ask or receipt is the
no". The word *hash* never survives. Whether the render mangles it or `small.en` simply cannot resolve it over the
mix is **not decidable by this method** — that needs a listener, or a lyric-aligned wider model, not a transcript.
Verse lines around it come back close to `lyrics.txt` but not exact ("22,000 sets/sides on a dead post",
"Recovered from a capture nobody hopes/holds"), which is the normal error rate for sung vocals.
One artifact to not be fooled by: e6d5e7e9's window ends with a spurious "Thanks for watching!" at 108–110 s. That
is a known whisper hallucination on music, not content in the file.
**Limits:** ASR on singing, one 60 s window per candidate, one model. This says nothing about mix quality,
intelligibility to a human ear, or which candidate should be released. It is not the independent pass either — the
same host made the files.