Encode the splatter bed too, and give the opponent his racket back
zombie-mode: 5.9 MB of 24-bit WAV down to 287 KB. Its master is 982597 frames at 48 kHz, so loopEnd is the un-round 20.47077 — the decoder hands back 20.4787, and those 7.9 ms of AAC padding would tick once a loop. Nothing in assets/audio/ is a multi-megabyte WAV any more. o_run1/o_run2 had no racket in either hand. The cause was the batch prompt: opponent_run never said "racket", and its reference sheet was built from the racket-less frames it was replacing, so there was nothing to copy one from. It is a ref_only batch off o_idle1 now — same man, front-facing, racket in his right hand — with the subject spelling out that he still carries it mid-stride. The stride reads as well as the old one did. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cf3498c049
commit
cd1c7a0cd8
9 files changed
+23
-8
No files matched your search
@@ -107,7 +107,10 @@ function loopBed(file, lowcut, vol, loopEnd = 0) {
|
||||
.catch(() => beds.delete(file)); // failed start (decode/network) can retry next call
|
||||
}
|
||||
export const ambient = () => loopBed('tennis-ambient-loop.wav', 500, 0.035); // whole-scene atmosphere, from first tap
|
||||
export const zombieMusic = () => loopBed('zombie-mode.wav', 800, 0.2); // background music once splatter kicks in
|
||||
// ...and the splatter bed, same treatment: 5.9 MB of 24-bit WAV down to 287 KB. Its master is
|
||||
// 982597 frames at 48 kHz, which is the un-round 20.47077 s below — an AAC loop needs the SOURCE
|
||||
// length as loopEnd, not the decoder's padded one. See the note on menuMusic.
|
||||
export const zombieMusic = () => loopBed('zombie-mode.m4a', 800, 0.2, 20.47077);
|
||||
// Menu theme: the splash, the court picker, the death summary. Barely highpassed — this one is
|
||||
// MUSIC, not an atmosphere bed, so the low end is the point. Started at boot so it is already
|
||||
// running by the time the title is on screen; on a phone the autoplay policy holds the context
|
||||
@@ -129,7 +132,7 @@ function fadeBed(file, out, secs = 0.7) {
|
||||
b.g.gain.setValueAtTime(b.g.gain.value, t); // anchor at current level so a mid-fade toggle stays smooth
|
||||
b.g.gain.linearRampToValueAtTime(out ? 0 : b.vol, t + secs);
|
||||
}
|
||||
export const zombieDuck = out => fadeBed('zombie-mode.wav', out); // key must match loopBed's, filename and all
|
||||
export const zombieDuck = out => fadeBed('zombie-mode.m4a', out); // key must match loopBed's, filename and all
|
||||
// The menu theme is never stopped, only faded — the buffer is already decoded, so fading it back up
|
||||
// on the death screen costs nothing and can't miss its cue waiting on a re-fetch.
|
||||
export const menuDuck = out => fadeBed('background-music.m4a', out);
|
||||
|
||||
Reference in new issue
Block a user