Lesson 273: Audacity Playtest VOD Loudness Spot Whisper Receipt on BUILD_RECEIPT (2026)

Direct answer: After merged playtest WAV exists with concat_ok: true but before Whisper batch scripts run, promote playtest_vod_loudness_spot_receipt_v1.json with A1–A6 gates—ffprobe duration + audio stream, Audacity −14 LUFS ±2 on a speech minute, peak < −1 dBFS, fail-closed batch jq, and BUILD_RECEIPT loudness_spot_ok: true. Pair Audacity loudness preflight (Guide #35), Audacity loudness evening tutorial, and cousin Lesson 266 (GitHub tags run after transcript exists).

Lesson hero for Audacity playtest VOD loudness spot Whisper receipt

Why this matters now (November Whisper batch nights)

November 2026 facilitators merge twelve OBS fragments, launch Whisper, and get [inaudible] or three-word hallucinations while Discord claims an hour of speech. concat_ok is true—merge integrity passed—but the merged WAV is clipped, silent on the wrong track, or menu-music-only on the spot minute. Teams blame ASR and open empty GitHub tag issues—scenario E in Whisper tags strategy.

Lesson 272 wired Ren'Py upload wall-clock; 273 wires acoustic spot before Whisper so Thursday row review diffs loudness_spot_ok beside concat_ok—not founder memory of “sounds fine in VLC.”

Promotion order on BUILD_RECEIPT: concat_okloudness_spot_ok → Whisper batch → whisper_issue_tag_ok.

Beginner path (merged WAV → spot → receipt)

Step Action Success check
1 Confirm merged WAV + concat_ok A1 path exists
2 Run ffprobe duration + stream A2 > 60 s, pcm stream
3 Audacity LUFS on speech minute A3 −12 to −16 LUFS
4 Check peak headroom A4 < −1 dBFS
5 Block batch without receipt A5 jq exit 0
6 File receipt + BUILD_RECEIPT loudness_spot_ok: true

Time: ~45 minutes first wiring; ~8 minutes when Guide #35 preflight template exists.

Developer path (gates A1–A6)

Gate Check Fail when
A1 Merged WAV beside session_id Missing file; concat_ok false
A2 ffprobe duration + audio stream N/A duration; no audio
A3 Integrated LUFS −14 ±2 Speech minute outside −12…−16
A4 True peak < −1 dBFS Brickwall clip on speech
A5 Fail-closed batch jq Whisper runs without receipt
A6 Receipt + BUILD_RECEIPT Promote before A5 passes

Align with Guide #35—guide = ninety-second gate; 273 = BUILD_RECEIPT milestone with jq promotion.

Cousin receipt crosswalk

Field Cousin (concat Lesson 200) Cousin (VO consent Lesson 250) This lesson (273)
Schema playtest_vod_triage_receipt_v1 vo_consent_metadata_receipt_v1 playtest_vod_loudness_spot_receipt_v1
Scope concat_ok merge Highlight-reel legal Acoustic spot before ASR
BUILD_RECEIPT concat_ok vo_consent_ok loudness_spot_ok

Do not merge JSON schemas—reference paths in cousin_receipts only.

A1 — Merged WAV + concat cousin

WAV="playtest-vod/merged/session_2026-11-12_merged.wav"
test -f "$WAV"
jq -e '.concat_ok == true' playtest-vod/receipts/CONCAT_RECEIPT.json

Red flag: Whisper batch on per-clip MKVs when evening concat was skipped—fix MKV concat help first.

A2 — ffprobe duration and stream

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$WAV"
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,sample_rate,channels -of csv=p=0 "$WAV"

Pass example: 3724.512000 and pcm_s16le,48000,2. Fail: duration N/A or < 60 s when session should be longer.

A3–A4 — Audacity spot minute

  1. Open merged WAV in Audacity 3.x.
  2. Select a representative minute with player speech (not menu-only).
  3. Analyze → Loudness and Peak… — record integrated LUFS (target −14 ±2).
  4. Confirm true peak below −1 dBFS on same selection.
  5. Screenshot → playtest-vod/loudness-spot/lufs_spot_<session_id>.png.

Pair 14 free LUFS meter tools when Audacity meter unavailable.

A5 — Fail-closed batch guard

#!/usr/bin/env bash
set -euo pipefail
REC="${1:-playtest-vod/loudness-spot/PLAYTEST_VOD_LOUDNESS_SPOT_RECEIPT.json}"

jq -e '.loudness_spot_ok == true' "$REC" || {
  echo "Whisper batch blocked: loudness_spot_ok false (A5)" >&2
  exit 1
}

Wire into nightly batch script before faster-whisper or local Whisper CLI—pair January batch strategy W3 loudness requirement and February same-day Whisper W3 cousin.

A6 — playtest_vod_loudness_spot_receipt_v1.json

{
  "schema": "playtest_vod_loudness_spot_receipt_v1",
  "build_label": "november-closeout-2026-rc2",
  "session_id": "session_2026-11-12",
  "merged_wav_path": "playtest-vod/merged/session_2026-11-12_merged.wav",
  "ffprobe_duration_sec": 3724.512,
  "ffprobe_audio_stream": "pcm_s16le,48000,2",
  "spot_minute_start_sec": 840,
  "integrated_lufs": -13.8,
  "true_peak_dbtp": -2.1,
  "lufs_screenshot": "playtest-vod/loudness-spot/lufs_spot_session_2026-11-12.png",
  "cousin_receipts": {
    "concat_ok": "playtest-vod/receipts/CONCAT_RECEIPT.json",
    "vo_consent": "release-evidence/vo/VO_CONSENT_METADATA_RECEIPT.json"
  },
  "gates": {
    "A1_merged_wav": "pass",
    "A2_ffprobe": "pass",
    "A3_integrated_lufs": "pass",
    "A4_peak_headroom": "pass",
    "A5_fail_closed": "pass",
    "A6_receipt": "pass"
  },
  "loudness_spot_ok": true,
  "whisper_batch_allowed": true
}

Pin under playtest-vod/loudness-spot/PLAYTEST_VOD_LOUDNESS_SPOT_RECEIPT.json.

BUILD_RECEIPT promotion jq

jq -e '
  .concat_ok == true and
  .loudness_spot_ok == true
' BUILD_RECEIPT.json

jq -e '
  .schema == "playtest_vod_loudness_spot_receipt_v1" and
  .loudness_spot_ok == true and
  (.integrated_lufs >= -16 and .integrated_lufs <= -12)
' playtest-vod/loudness-spot/PLAYTEST_VOD_LOUDNESS_SPOT_RECEIPT.json

Append BUILD_RECEIPT row:

{
  "loudness_spot_ok": true,
  "playtest_vod_loudness_spot_receipt": "playtest-vod/loudness-spot/PLAYTEST_VOD_LOUDNESS_SPOT_RECEIPT.json",
  "whisper_batch_allowed": true
}

Rule: Do not set whisper_issue_tag_ok until Whisper produces non-empty transcripts—273 gates batch start, not GitHub.

Proof table (facilitator audit)

Row Evidence GREEN when
P1 concat_ok receipt path jq true before A1
P2 ffprobe log in receipt A2 duration + stream
P3 LUFS screenshot A3 in band
P4 Peak readout A4 pass
P5 Batch script dry-run A5 blocks when receipt missing
P6 BUILD_RECEIPT column loudness_spot_ok matches receipt

Key takeaways

  1. concat_ok then loudness—never reverse BUILD_RECEIPT order.
  2. ffprobe proves stream exists; Audacity proves speech is intelligible.
  3. −14 LUFS ±2 is the November batch spot target for merged playtest voice.
  4. Evening tutorial owns blocks A–D; 273 owns BUILD_RECEIPT promotion.
  5. Lesson 266 runs after transcripts exist—fix audio here first.
  6. VO consent Lesson 250 cousin—legal metadata ≠ loudness spot.

Common mistakes

  • Running Whisper when concat_ok is false—fix merge first.
  • Spot-checking game-music-only minute—A3 reads wrong lane.
  • Ignoring ffprobe N/A duration—A2 fail, not ASR bug.
  • Boosting Discord capture to “hear better”—A4 clip kills transcripts.
  • Filing GitHub issues from empty Whisper output—stop at 273, not 266.
  • Merging loudness receipt into VO consent schema—separate JSON blobs.

Troubleshooting

Symptom Lane
Blank Whisper lines Re-run A3/A4; audition 30 s in Audacity
Duration N/A OBS concat evening
LUFS −22 on speech minute Re-capture or normalize—document in notes[]
LUFS −6 with clipping Lower Discord gain; A4 fail
Tags blocked scenario E This lesson before 266
GitHub 422 invented repro Fix transcript first—cousin 422 help

Mini exercise (45 minutes)

  1. Merge two OBS fragments with concat_ok: true on receipt.
  2. Run A2 ffprobe; log duration + stream in scratch notes.
  3. Audacity spot minute—capture LUFS screenshot (A3–A4).
  4. File playtest_vod_loudness_spot_receipt_v1.json.
  5. Run A5 batch guard with receipt removed—confirm exit 1.
  6. Promote BUILD_RECEIPT loudness_spot_ok for Thursday review.

Continuity — November 2026 fest close-out + playtest triage (266–276)

Lesson Receipt focus
272 Ren'Py upload wall-clock
273 (this) Loudness spot before Whisper batch
274 forward Unreal OTLP diligence

Previous: Lesson 272 — Ren'Py SteamPipe wall-clock receipt
Next: Lesson 274 — Unreal OTLP corporate proxy diligence receipt (forward)

FAQ

Same as Guide #35?
Guide = ninety-second A1–A6 preflight; 273 = BUILD_RECEIPT loudness_spot_ok column + batch jq promotion.

Same as loudness evening blog?
Blog owns blocks A–D worksheet; 273 owns receipt culture on BUILD_RECEIPT.

Can we skip spot if per-clip Whisper works?
Batch merged path still needs A3–A4—per-clip does not excuse silent merge track.

February live week same-day triage?
Pair February same-day Whisper W3—same acoustic gate before P0 transcripts.

Does loudness_spot_ok replace concat_ok?
No—both required; different schemas and gates.

Related GamineAI reads


Sign-off: Prove duration with ffprobe, prove speech with Audacity LUFS spot, promote loudness_spot_ok on BUILD_RECEIPT, then run Whisper—not the other way around.