53 lines
2.7 KiB
Markdown
53 lines
2.7 KiB
Markdown
# Sound playback validation
|
||
|
||
The Rust engine plays original digital effects, MUS music through its Rust FM
|
||
synthesizer, and package-local WAV cues. SDL2 provides the output device.
|
||
|
||
Original sound-event IDs identify an empty catalog marker. The actual digital
|
||
patch is four catalog entries later, matching the original setup routine.
|
||
The sound bank resolves and checks that patch, preloads the 26 original
|
||
digital assets, and reports missing or invalid cues. Mod WAVs are decoded and
|
||
cached before acquiring the audio-device lock. Successful mod activation
|
||
invalidates that cache.
|
||
|
||
Music/effect gains and channel limits are applied before the device starts.
|
||
Changing effect volume updates playing voices; muting clears held samples.
|
||
Music volume zero gates FM output while the score and synthesizer continue
|
||
advancing, so restoring volume resumes the current music position.
|
||
|
||
Portable audio and sound-bank tests cover checked decoding, mixing, pitch,
|
||
priority, channel limits, gains, mute behavior and missing/invalid assets.
|
||
Optional original-data checks compare FM and digital samples with a small
|
||
retained-source harness. Another integration check dispatches all 36 original
|
||
cue variants through the production Rust SDL callback and checks their output.
|
||
|
||
Local real-device checks on 2026-10-10 used SDL's PulseAudio backend through
|
||
PipeWire to the default analog stereo sink. A first-mission run with music
|
||
muted produced digital-effect output with peak 16,390 and RMS 6,657.51. A
|
||
concurrent sink-monitor recording correlated with the callback output at
|
||
0.99929. A seven-package Iron Coast run also produced audible-level output
|
||
(peak 16,406; RMS 4,909.62). System volume and mute were unchanged. These
|
||
measurements confirm output routing and signal; they do not assess acoustic
|
||
balance on every speaker or every cue during ordinary play.
|
||
|
||
The final combined build was checked through the same real device after the
|
||
mute fix: 172,544 captured stereo frames of first-mission effects had peak
|
||
16,384 and RMS 6,506.91. A separate run with both gains at zero captured
|
||
54,784 stereo frames with zero nonzero samples, peak zero and RMS zero.
|
||
|
||
For a bounded diagnostic capture of the actual production callback, run from
|
||
`RustRaptor/` with an isolated profile:
|
||
|
||
```sh
|
||
RAPTOR_AUDIO_CAPTURE="$PWD/../.reference/audio.wav" \
|
||
RAPTOR_AUDIO_CAPTURE_SECONDS=10 \
|
||
SDL_AUDIODRIVER=pulseaudio ./run.sh \
|
||
--profile-root ../.reference/audio-profile \
|
||
--preview-mission base:sector_1_wave_1 --smoke-frames 540
|
||
```
|
||
|
||
The capture is PCM16 stereo and accepts 1–120 seconds. Configure music and
|
||
effects in that profile before capture. Original assets, captures and reports
|
||
remain ignored under `../data/` and `../.reference/`. Authored mod WAVs and
|
||
their synthesis recipes are tracked in Git.
|