Lesson 231: Unity FMOD Bank-Strip Boot Probe Receipt on BUILD_RECEIPT (2026)
Direct answer: After any Addressables strip PR shrinks your spring fest depot, file audio_bank_strip_receipt_v1.json proving .bank files appear in Build Report, LoadBank succeeds on installed player (not Editor-only), and one audible SFX fires within 10 seconds—then promote BUILD_RECEIPT audio_bank_strip. Distinct from Lesson 219 string tables (localization payload) and Lesson 203 WebGL snapshots (browser boot order).

Why this matters now (April 2027 Addressables strip PRs)
April 2027 producers merge fest_strip Addressables groups to hit depot size caps right after Fab 8K throttle. Editor Play Mode still plays FMOD because banks live in the project folder; installed Windows builds go silent—no crash, no ERR_FILE_NOT_FOUND in player logs. The FMOD banks missing after strip help documents fastest fixes; Unity FMOD bank-strip boot probe preflight is the ninety-second checklist—this lesson is the BUILD_RECEIPT milestone with CI gate verify_audio_bank_strip_v1.
Beginner path (installed-player proof)
| Step | Action | Success check |
|---|---|---|
| 1 | Open Build Report after player build | Search .bank |
| 2 | Confirm banks not only in stripped group | Manifest lists paths |
| 3 | Install build on clean profile | Not Editor |
| 4 | Boot scene; trigger known SFX | Audible ≤ 10 s |
| 5 | FMOD Profiler (optional) | Banks loaded |
| 6 | File audio_bank_strip_receipt_v1.json |
bank_strip_pass: true |
| 7 | BUILD_RECEIPT row | audio_bank_strip GREEN |
Time: ~72 minutes first strip recovery; ~20 minutes when bank group policy is pinned.
Developer path (gates B1–B6)
| Gate | Check | Fail when |
|---|---|---|
| B1 | Strip PR diff reviewed | Banks moved into fest_strip group |
| B2 | Build Report bank manifest | Zero .bank rows |
| B3 | StreamingAssets / Always Included policy |
Banks omitted from player data |
| B4 | Installed-player LoadBank |
Editor-only pass |
| B5 | Audible boot SFX | Banks load but silent (WebGL/help lane) |
| B6 | audio_bank_strip_receipt_v1 + BUILD_RECEIPT |
Fest promotion without receipt |
B1 — Strip PR crosswalk (localization + audio)
| Asset type | Must not live only in fest_strip |
|---|---|
*.bank / *.strings.bank |
Yes — keep in Always Included or dedicated AudioBanks group |
| String Table assets | Lesson 219 |
FMOD StreamingAssets/Audio/ |
Document in addressables_strip_crosswalk_v1.json |
Fail closed when strip PR touches Audio labels without audio owner sign-off.
B2 — Build Report manifest
Archive release-evidence/audio/fmod_bank_build_report.txt:
StreamingAssets/Audio/Master.bank OK
StreamingAssets/Audio/Master.strings.bank OK
StreamingAssets/Audio/SFX.bank OK
bank_count: 3
Compute bank_manifest_sha256 over sorted relative paths.
B4 — LoadBank boot probe (C# sketch)
void Awake() {
var result = RuntimeManager.LoadBank("Master", loadSamples: false);
Debug.Assert(result == FMOD.RESULT.OK, $"LoadBank failed: {result}");
RuntimeManager.StudioSystem.flushCommands();
}
Run on first scene of installed build only.
audio_bank_strip_receipt_v1.json
{
"schema": "audio_bank_strip_receipt_v1",
"build_label": "spring-fest-2027-rc1",
"unity_version": "6000.0.x",
"fmod_integration": "FMOD for Unity 2.03.y",
"platform": "Windows_x64",
"strip_pr": "PR-4821-fest-addressables-strip",
"bank_manifest": {
"bank_count": 3,
"paths": [
"StreamingAssets/Audio/Master.bank",
"StreamingAssets/Audio/Master.strings.bank",
"StreamingAssets/Audio/SFX.bank"
],
"sha256": "sha256:REPLACE"
},
"boot_probe": {
"load_bank_result": "OK",
"boot_sfx_event": "event:/UI/Click",
"audible_within_seconds": 8
},
"paired_receipts": {
"string_tables_fest": "release-evidence/localization/ADDRESSABLES_FEST_STRING_TABLE_RECEIPT.json",
"webgl_snapshot": "release-evidence/audio/FMOD_WEBGL_SNAPSHOT_RECEIPT.json"
},
"gates": {
"B1_strip_crosswalk": "pass",
"B2_build_report": "pass",
"B3_always_included": "pass",
"B4_loadbank_installed": "pass",
"B5_boot_sfx": "pass",
"B6_build_receipt": "pass"
},
"bank_strip_pass": true,
"fest_promotion_allowed": true
}
Pin under release-evidence/audio/AUDIO_BANK_STRIP_RECEIPT.json.
BUILD_RECEIPT row (B6)
| Column | Pass when |
|---|---|
audio_bank_strip |
Receipt path + bank_strip_pass: true |
tables_ok |
Lesson 219 independent |
webgl_snapshot_receipt |
Lesson 203 for HTML5 lane |
ALTER TABLE release_publish_gate ADD COLUMN IF NOT EXISTS
audio_bank_strip_blocked BOOLEAN NOT NULL DEFAULT false;
Relationship to help vs guide
| Artifact | Role |
|---|---|
| FMOD banks missing help | Symptom + fastest fix (audio_bank_receipt_v1 cousin) |
| Unity FMOD bank-strip preflight | B1–B6 preflight checklist |
| This lesson | BUILD_RECEIPT audio_bank_strip promotion gate |
Key takeaways
- Editor audio ≠ installed audio after strip PRs.
- Build Report is the first truth source—count
.bankrows. - Pair with 219—strings can pass while banks fail.
- WebGL lane still needs 203/228—desktop strip is separate.
- Wwise packaged row is middleware-specific—do not conflate.
- Q2 capstone 235 wires 231 with 230–234.
- Wednesday demo smoke should use installed build audio check.
- Strip PRs need audio owner sign-off like localization.
Common mistakes
- Passing strip PR because “banks are small anyway.”
- Testing only in Editor after strip merge.
- Using
audio_bank_receiptfrom help without strip PR id in JSON. - Fixing WebGL gesture when B2 shows zero banks.
- Assuming Wwise Init failure is FMOD strip (check middleware).
Troubleshooting
| Symptom | Lane |
|---|---|
| Zero banks in report | B3 Always Included + help Step 1 |
| Banks in report, silent player | Init order help |
| WebGL silent, desktop OK | Lesson 203 / 228 |
| Tables missing | Lesson 219 |
| Strip reverted banks still fail | Clean build folder; verify B4 path |
Mini exercise (70 minutes)
- Move
Master.bankintofest_stripgroup—rebuild—confirm B2 fails. - Restore to
AudioBanksAlways Included—pass B2–B5. - File receipt with real
strip_prid. - Link 219 receipt path in
paired_receipts. - Set BUILD_RECEIPT
audio_bank_stripGREEN.
Continuity — Q2 2027 spring fest shipping (230–235)
| Lesson | Receipt focus |
|---|---|
| 230 | Fab 8K throttle |
| 231 (this) | FMOD bank strip boot probe |
| 232 | CJK short description |
| 233 | Spline fest landing LCP |
| 234 | Micro-trailer stereo embed |
| 235 | Q2 capstone |
Previous: Lesson 230 — Fab 8K Godot import throttle
Capstone: Lesson 235 — Q2 spring fest shipping — arc 230–235 closed.
FAQ
Same as FMOD banks missing help?
Help fixes deployment; 231 adds BUILD_RECEIPT + strip PR crosswalk for fest gates.
Same as Lesson 219?
219 = string tables after strip; 231 = FMOD banks after strip.
WebGL builds too?
Run 203/228 separately—this lesson targets desktop/player strip.
Silent fest builds after a strip PR are usually missing .bank files—Build Report proof, installed LoadBank, one audible SFX, then audio_bank_strip_receipt.