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

6.6 KiB
Raw Blame History

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

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

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.