Commit Graph
184 Commits
Author SHA1 Message Date
JAB-devandClaude Sonnet 5.5 107954e355 fix(libSceNgs2): use the PS5 default map for 3, 4, 5 and 7 channels
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]>
2026-10-31 02:48:40 +02:00
JAB-dev 0ad239feea Merge origin/main into fix/ngs2-default-port-map-ps5
# Conflicts:
#	docs/dev/debt/libSceNgs2.native.md
2026-10-30 23:54:48 +02:00
Adrià e1b563a8fc Merge pull request #13488 from JAB-dev/fix/ngs2-i16-render-conversion-ps5
fix(libSceNgs2): convert PCM_I16L render output as the PS5 module does
2026-10-30 22:42:02 +01:00
JAB-devandClaude Sonnet 5.5 f35ab1ccf2 docs(libSceNgs2): record how the PCM_I16L render conversion was measured and what was not
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-30 19:24:51 +02:00
JAB-devandClaude Sonnet 5.5 e9c8069804 fix(libSceNgs2): use the PS5 default channel map for ports and mastering output
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]>
2026-10-30 19:20:35 +02:00
JAB-devandClaude Sonnet 5.5 a9c4e82299 docs(libSceNgs2): say the port volume measurements ran on the PS5 module on a PC
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-30 18:55:55 +02:00
JAB-devandClaude Sonnet 5.5 8c1291efdb docs(libSceNgs2): put the mastering gain gaps first and drop the stale nonfinite integer render sentence
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-30 18:51:59 +02:00
JAB-devandClaude Sonnet 5.5 8ae66c36b3 fix(libSceNgs2): convert PCM_I16L render output as the PS5 module does
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]>
2026-10-30 18:37:47 +02:00
JAB-devandClaude Sonnet 5 26833d555f docs(libSceNgs2): list every unmeasured port volume case in the debt entry
Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-10-30 18:36:52 +02:00
JAB-devandClaude Sonnet 5.5 eb81f61955 docs(libSceNgs2): scope the port volume debt entry to what was measured
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]>
2026-10-30 18:21:43 +02:00
JAB-devandClaude Sonnet 5.5 0dc600e7fa fix(libSceNgs2): clamp the port volume to [0, 32] as the PS5 module does
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]>
2026-10-30 18:21:43 +02:00
Adrià f0a7231d62 Merge pull request #13099 from Queuse/codex/ngs2-grain-validation-20261029
fix(ngs2): validate grain size in 64-sample units
2026-10-30 11:58:53 +01:00
Adrià a1782bdc02 Merge pull request #12995 from hugodearaujo/fix/ngs2-buffer-setup-controls
fix(ngs2): buffer voice setups, waveform blocks and patches sent during processing
2026-10-30 10:55:38 +01:00
Adrià 42d992b02a Merge pull request #12302 from edubox/feat/ngs2-pcm-frame-info
feat(ngs2): report the frame info of every supported PCM type
2026-10-30 06:41:18 +01:00
Adrià d7513debfe Merge pull request #12960 from ntamas94/fix/ps4-ngs2-voice-state-errors
fix(ngs2): answer PS4 voice state errors as measured in libSceNgs2
2026-10-30 06:31:58 +01:00
Queuze 152bc0b80b fix(ngs2): validate grain size in 64-sample units 2026-10-29 22:14:04 -03:00
edubox 9b07b8e969 feat(ngs2): report the frame info of every supported PCM type 2026-10-29 22:10:36 +01:00
ntamas94andClaude Opus 5.5 ad8bd09342 fix(ngs2): answer PS4 voice state errors as measured in libSceNgs2
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]>
2026-10-29 18:28:42 +01:00
hugodearaujo 2c87f46961 fix(ngs2): buffer voice setups, waveform blocks and patches sent during processing 2026-10-29 13:37:08 -03:00
Adrià df1b77626b fix(ngs2): drop the matrix info guard main's wider output already covers 2026-10-29 14:05:31 +01:00
Eduardo Ruiz 55ed30d1aa docs(ngs2): shorten the custom rack debt entries 2026-10-29 13:59:33 +01:00
Eduardo Ruiz 114ae92449 fix(ngs2): reject matrices that do not fit the matrix info output 2026-10-29 13:59:33 +01:00
Eduardo Ruiz 4c4a4932e0 fix(ngs2): keep wide custom submixer voices and matrixless maps unsupported 2026-10-29 13:59:05 +01:00
Adrià 7ec3103f68 Merge remote-tracking branch 'upstream/main' into HEAD 2026-10-28 15:18:57 +01:00
AdriàandClaude Sonnet 5.5 95a002bab9 fix(ngs2): accept sampler setup flags as before
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-28 14:52:11 +01:00
edubox d62e8f42ea feat(ngs2): implement the sampler and submixer peak meter 2026-10-28 09:02:36 +01:00
Kyon aea8616433 Merge remote-tracking branch 'origin/main' into feat/ngs2-custom-pitchshift 2026-10-27 12:20:30 +00:00
Dean 5d52b06ff3 Merge pull request #9324 from MarrasFederico/feat/ngs2-parse-format-codes
fix(libSceNgs2.native): return 0x804A8432 for waveform formats the module does not parse
2026-10-27 21:35:03 +13:00
Kyon 7ab4c61f37 docs(ngs2): condense sampler reference limitations 2026-10-27 06:00:26 +00:00
Kyon 48140166ec docs(ngs2): record sampler flag and PitchShift mask limits 2026-10-27 05:58:37 +00:00
Kyon 5ca3aa5a7a fix(ngs2): reconcile scheduler with current rendering contracts 2026-10-27 05:55:34 +00:00
Dean 21d428eb74 Merge pull request #10851 from Felipebmaitan/feat/ngs2-audio-engine
feat(ngs2): route custom submixer buffers through Gain
2026-10-27 10:55:08 +13:00
Adrià 1992ec073f Merge pull request #10037 from xXPBSXx/docs/debt-ngs2-rackgetinfo-title
docs(debt): note the buffer size a title passes to sceNgs2RackGetInfo
2026-10-26 14:59:58 +01:00
Federico Marras 735b905120 Merge remote-tracking branch 'origin/main' into feat/ngs2-parse-format-codes 2026-10-26 13:40:23 +01:00
Felipebmaitan 0c3f104067 chore(ngs2): merge current main for audio routing 2026-10-26 09:03:02 -03:00
Dean 65c2713b6c Merge pull request #10410 from JAB-dev/fix/ngs2-mastering-gain-ps5
fix(libSceNgs2): clamp the mastering gain to +-32 and keep NaN, as the PS5 module does
2026-10-26 22:01:52 +13:00
Kyon 316f48500a docs(ngs2): record independent Gain initialization difference 2026-10-26 03:31:08 +00:00
Kyon 4073fe7cd8 fix(ngs2): validate PitchShift positions before dispatch 2026-10-26 03:31:08 +00:00
Kyon 5286ab93bc docs(ngs2): condense verified behavior and remaining debt 2026-10-26 03:31:08 +00:00
Kyon c2cdfc3bad fix(ngs2): reconcile current main and waveform block semantics 2026-10-26 03:31:08 +00:00
Kyon c78e6a1d6a fix(ngs2): correct rack info and detached control storage 2026-10-26 03:31:08 +00:00
Kyon 7f0f706f75 fix(ngs2): retain detached racks after system destruction 2026-10-26 03:31:08 +00:00
Kyon 410360a4fd fix(ngs2): support setup and cleanup callback handoffs 2026-10-26 03:31:08 +00:00
Kyon 19968c758c fix(ngs2): allow cross-thread callback handoffs 2026-10-26 03:31:08 +00:00
Kyon 8083545c7e fix(ngs2): preserve UserFx2 activation and control lifetimes 2026-10-26 03:31:08 +00:00
Kyon 3b3a65cd8a feat(ngs2): support mixer and custom FX worker controls 2026-10-26 03:31:08 +00:00
Kyon c620e8e264 feat(ngs2): buffer worker events and render parameters 2026-10-26 03:31:08 +00:00
Kyon 838ac8159b feat(ngs2): defer sampler stop controls from render jobs 2026-10-26 03:31:08 +00:00
Kyon b3e7819ae0 feat(ngs2): add externally scheduled render jobs
Implement manager lifecycle, dependency batches, the default worker pool and callback/state publication. Keep unsupported worker control buffering and stream routing explicit.
2026-10-26 03:31:08 +00:00
Kyon 3c7909199b fix(ngs2): reject unsupported external job schedulers 2026-10-26 03:31:08 +00:00