This repository has been archived on 2026-09-16. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Syplheed-Reborn/docs/re/data/se-wave-riff-decode.txt
Sylpheed RE agent d110cf38c7 media: expose se_wave_riff -- the menu's SE cues, assembled where the format lives
The port is forbidden from reimplementing media assembly and Static.slb is
exactly that case: no RIFF, no seek chunk, no XACT container, just a packed run
of whole 2048-byte XMA1 packets, so a wave is defined only by (offset, packet
count) and the header has to be synthesized. That step now happens once, in the
crate that owns the format, instead of in each consumer.

`slb::xma1_wave_riff` wraps raw packets; `media::se_wave_riff` looks the bank up
and reads just the packets asked for. Both reuse the existing synth_xma1_fmt /
build_riff, which are already byte-identical to what tools/re-capture/
slb_extract_wave.py writes -- so this is exposure, not a second implementation.

It reads a TARGETED range rather than the whole bank, and that is load-bearing:
Static.slb is the ONE entry of sound.pak's 9 519 whose declared extent runs past
the end of the extracted segments -- by exactly 616 768 B -- so reading it whole
fails outright on this extraction. Every cue we need is in the first few hundred
KB. Recorded rather than worked around silently.

Verified as an artifact, not a compile: all three cues decode through ffmpeg to
mono 48 kHz PCM at 0.533 / 0.344 / 1.016 s, non-silent (rms 2085 / 2985 / 4327,
peaks 29813 / 16973 / 32767). The refusal path is exercised in the same run --
an impossible packet count is rejected rather than returning a short stream,
because a truncated XMA decodes to plausible-sounding garbage.

Also adds docs/re/captures/ORACLE-CAPTURES.md: an index of the nine canary
framebuffer captures already in this repo, and a plain statement that THEY are
the reference and `screen render` is not.
2026-08-29 08:41:42 +00:00

18 lines
924 B
Plaintext

# se_wave_riff — the three menu cues, decoded end to end
$ cargo run -p sylpheed-formats --example se_wave_dump -- /tmp/se
/tmp/se/move.riff: 8252 bytes (4 packets at 0x1ec0)
/tmp/se/back.riff: 4156 bytes (2 packets at 0xec0)
/tmp/se/confirm.riff: 12348 bytes (6 packets at 0x5d6c0)
refusal path ok: Static.slb: 1048576 packets at 0x1ec0 need 2147483648 bytes, but the bank declares only 8970240 bytes
$ ffmpeg -i <cue>.riff <cue>.wav # then measure the PCM
move 48000 Hz mono 0.533 s rms 2084.7 peak 29813 non-quiet 47.5%
back 48000 Hz mono 0.344 s rms 2984.7 peak 16973 non-quiet 95.1%
confirm 48000 Hz mono 1.016 s rms 4327.0 peak 32767 non-quiet 92.5%
Non-silent, plausible envelopes, durations consistent with a UI blip.
The refusal path is exercised in the same run: an impossible packet count is
rejected rather than returning a short stream.