Commit Graph
47 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5.5 b9ea98d2c5 Atrac3: Set up the decoder the way libatrac3plus does
libatrac3plus picks the codec parameter from the frame size and the
header's joint stereo flag, and the channel count plays no part. We
guessed joint stereo from the frame size and channel count instead, so
LocoRoco 2's MuiMui house music never started: the game writes a 2-channel
normal-stereo header for every track it streams, and that 0xC0 track holds
one mono sound unit per frame. Taken as joint stereo, its first frame failed
during setup, and the game retried forever.

Now the joint stereo flag comes from the track header, and the decoder's
channel count from the parameter it maps to, so that track decodes as mono
into both output channels, as on hardware. Low-level decoding, which has
no header, still goes by the frame size. Atrac2 saves the flag; older
states fall back to the guess.

Fixes #8647.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 17:14:00 -06:00
Henrik Rydgård 4d7b51d8cb Reimplement AA3 header parsing 2025-07-22 17:48:20 +02:00
Henrik Rydgård 5c77ff9147 Atrac: Rework the header dependencies 2025-06-25 11:34:07 +02:00
Henrik Rydgård 6df9e513c1 Logging, comments and debugger fixes, plus simple dumping of the first block of streaming Atrac3 2025-06-25 01:08:47 +02:00
Henrik Rydgård ea29fd284f sceAtrac: Logging improvements, constification (and not) 2025-06-24 21:36:04 +02:00
Henrik Rydgård e5d00ce493 Fix startup on Android, oops
Forgot that we can't create android-compatible threads in global
constructors, for JNI reasons.
2025-03-27 01:58:53 +01:00
Henrik Rydgård 172e54286e Refactor a bit to make it easier to expose the streaming state to the debugger. 2025-03-25 22:01:33 +01:00
Henrik Rydgård 1bd5cffa1d Initial work on re-implementing atrac-through-sas 2025-03-25 22:01:30 +01:00
Henrik Rydgård 44bb7a1ac5 Buildfix, minor savestate fix 2025-03-21 20:45:12 +01:00
Henrik Rydgård ec169e9fa9 Sol Trigger fix 2025-03-19 11:41:13 +01:00
Henrik Rydgård da2b3fdd13 Warning fixes. Don't clamp readsize to reported file size. 2025-03-19 10:42:32 +01:00
Henrik Rydgård 6d7625ea6b Implement save state support, with backwards compatibility. 2025-03-18 09:36:33 +01:00
Henrik Rydgård 89a73be155 Compute the joint-stereo flag as needed instead of storing it. 2025-03-18 09:36:33 +01:00
Henrik Rydgård 01076d2a4f InitLowLevel parameter cleanup 2025-03-18 09:36:33 +01:00
Henrik Rydgård 4a4332b22e Remove hack where we snuck AtracID into the contexts. Not suppose to be there. 2025-03-18 09:36:33 +01:00
Henrik Rydgård 34c21ed271 track_ removal, part 2 - done! 2025-03-18 09:36:33 +01:00
Henrik Rydgård 02f06faad1 Atrac2 track_ removal, part 1 2025-03-18 09:36:33 +01:00
Henrik Rydgård 4379c1ad49 Rebase fixups 2025-03-18 09:36:33 +01:00
Henrik Rydgård bb436cda8f Reimplement a lot of logic, implement loop streaming properly 2025-03-18 09:36:33 +01:00
Henrik Rydgård 9cc7bab3a5 Implement the simplest looping case (fully loaded audio) 2025-03-18 09:36:33 +01:00
Henrik Rydgård 92737be87e Minor simplification 2025-03-18 09:36:33 +01:00
Henrik Rydgård f4fe91beae Remove unnecessary state variable, fix reset-seeks to fractional positions 2025-03-18 09:36:33 +01:00
Henrik Rydgård da27e2a93f Fix seeking to offsets other than 0 in a couple of the modes 2025-03-18 09:36:33 +01:00
Henrik Rydgård 8b02766702 Some cleanup and refactor. 2025-03-18 09:36:33 +01:00
Henrik Rydgård 36fdb09056 Break apart the SetData function 2025-03-18 09:36:33 +01:00
Henrik Rydgård 8f66ebde90 Shuffle things around a bit 2025-03-18 09:36:33 +01:00
Henrik Rydgård bab09ea30a Implement sceAtracGetInternalError 2025-03-18 09:36:33 +01:00
Henrik Rydgård 54acb07ded ImDebugger: Add more atrac information 2025-03-18 09:36:32 +01:00
Henrik Rydgård 7a4d175e06 Port over some utility functions, fix bugs. 2025-03-18 09:36:32 +01:00
Henrik Rydgård 9c02eab137 More work - start work on handling buffer wraparound properly. Passes the full test with 1 wraparound! 2025-03-18 09:36:32 +01:00
Henrik Rydgård 724fc1dd95 Work on the new implementation. 2025-03-18 09:36:32 +01:00
Henrik Rydgård 818e7a99bd minor refactor 2025-03-17 11:02:59 +01:00
Henrik Rydgård 63c997b973 Fix an ordering issue in Atrac context creation 2025-03-16 22:46:44 +01:00
Henrik Rydgård b7782d98f3 Prepare for Atrac context data to work the new way. Not actually active yet. Also restrict old versions to 4 contexts. 2025-03-16 19:32:03 +01:00
Henrik Rydgård 4fbdb58beb Merge the "Analyze" function into SetData 2025-03-16 19:32:00 +01:00
Henrik Rydgård 3979b6af54 Combine the two Analyze functions 2025-03-16 12:59:32 +01:00
Henrik Rydgård 8ab41e387e Reorganize to make the next step easier 2025-03-16 12:21:55 +01:00
Henrik Rydgård bcf89754c7 First step: Split out the track analysis. 2025-03-16 12:21:55 +01:00
Henrik Rydgård 3d143a0cba Finally get rid of the GetTrack() accessor 2025-03-16 11:29:00 +01:00
Henrik Rydgård a3b43d8283 Refactor CurrentSample and ResetPlayPosition 2025-03-16 11:18:33 +01:00
Henrik Rydgård fd9564166b More GetTrack removal 2025-03-16 11:06:52 +01:00
Henrik Rydgård beaced1c87 Move loop status and reset info param validation in behind the AtracBase interface 2025-03-16 09:48:13 +01:00
Henrik Rydgård 9788a770a7 Add a DecodeLowLevel wrapper to the AtracBase interface 2025-03-16 09:47:36 +01:00
Henrik Rydgård c33a86561f Remove the strange "successCode" argument to SetData 2025-03-16 09:00:27 +01:00
Henrik Rydgård 5b625bfd3e Share GetSecondBufferInfo between implementations 2024-04-16 23:07:03 +02:00
Henrik Rydgård f05f9a6de3 Code cleanup and comments 2024-04-16 22:54:53 +02:00
Henrik Rydgård f3d6c93339 Add empty AtracCtx2 implementation, and a dev setting to select it. Savestates don't work. 2024-04-15 13:50:16 +02:00