PS5 firmware 3.20 and 4.03 have their own default port map rows for every source and destination pair with 3, 4, 5 or 7 channels on either side, and a mastering voice of those counts maps its channels into a render buffer of the same count through them. Ours threw for a port into such a voice, used the PS4 fold-down from one, and copied the channels of a 3, 5 or 7 channel mastering voice unchanged. A mastering voice into a buffer of another count still throws when either count is 3, 4, 5 or 7. The PS4 library, the reverb conversion and Pan keep the PS4 rows. The routing tests that rendered 3, 5 and 7 channel mastering voices now expect those rows, and the render tests expect the sampler startup delay.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
PS5 firmware 3.20 and 4.03 fold 6 and 8 channel sources into stereo and mono with different surround and back gains than the PS4 rows, and fold a mastering voice into a render buffer of another channel count through the same default map. Ours used the PS4 rows and threw on a channel count mismatch other than stereo into 6 or 8. The PS4 library, the reverb conversion and Pan matrices keep the PS4 rows.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
PS5 firmware 3.20 and 4.03 write trunc(clamp(x * 32767.0f, -32767, 32767)) into a PCM_I16L render buffer, with the product in float, NaN written as 0 and -32768 never written; ours rounded x * 32768 to nearest, wrote -32768 for -1 and threw on a nonfinite sample. Combined with the sampler's exact x / 32768 input, an I16 source now comes back one step toward zero, so the existing render, stream and gain tests expect that, and a new sweep checks the measured values on 1, 2, 6 and 8 channels.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The clamp was measured on a sampler voice's ports only, so the entry now says that a port past the count on another rack's voice and sceNgs2VoiceGetPortInfo still throw, and it no longer repeats the port gain ramp, which a separate change implements.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
PS5 firmware 3.20 and 4.03 clamp the port volume of VoiceControl param 0x2 and RunCommands command 6 to [0, 32], keeping NaN and -0, and return 0 for every value. Command 6 reads the low 32 bits of its value as a float whatever the value type and ignores numValues and flags, and a batch of port volumes naming a port past an 8-port rack returns 0x804A8357 without applying any of them. Ours stored the value raw, threw on a value type other than float and threw on the bad port after applying the earlier commands; other command ids and the unmeasured bad-port cases keep their old behaviour.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
On a PS4 firmware 10.71 console, libSceNgs2.sprx answers
sceNgs2VoiceGetState with 0x804A0054 for a state size below 4 before it
resolves the voice and 0x804A0300 for an invalid voice, and
sceNgs2VoiceGetStateFlags writes 0 and returns 0x804A0300 for an invalid
voice. The libSceNgs2 target now does the same; libSceNgs2.native keeps
the PS5 module values.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Implement manager lifecycle, dependency batches, the default worker pool and callback/state publication. Keep unsupported worker control buffering and stream routing explicit.