100 lines
6.6 KiB
Markdown
100 lines
6.6 KiB
Markdown
# 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.
|