feat(prx): fmod real audio output via SDL + identify 22/27 NIDs
- libfmod: route createSound (OPENMEMORY WAV/RAW, file placeholder sine)
+ playSound + update() mixer pump into SDL queue (48k stereo F32,
mirrors libSceAudioOut). Channel::setVolume/isPlaying/position now
track real PCM cursor with loop support. Silent fallback via
ANYPS5_FMOD_SILENT=1, NOSOUND output, or SDL open failure.
Link SDL2-static like libSceAudioOut.
- NIDs: recompute from public FMOD headers (fmod.h/hpp + fmod_studio
2.0) with exact Itanium manglings (g++ nm) + SHA1+suffix
(NidCompute.cpp). Identify 2/2 libfmod (setFileSystem, setCallback)
+ 20/25 studio (const createInstance, getEvent, getCoreSystem,
getSoundInfo, etc.). Replace stubs with ABI-compatible real
impls; 5 studio remain unknown (Cm2cmtCv8cA, EfM9xXvBmxk,
Js90KQXVS4s, oCYWES02VPc, vVwA2cZA5e4).
- Tests: coverage OK (51+42 Legends NIDs, missing 0), audio smoke
(WAV 4800f + RAW 2048f, volume, channelsPlaying, stop) OK real
and silent.