Couldn't find any way to modify SQEXSEAD audio files, so I went ahead and made my own replacer tool for them
This was mostly used for the Dragon Quest XI Orchestral Ȱverhaul Mod
, so it's only really been tested with the Dragon Quest series of games, but hopefully it should be able to support any game that uses SQEXSEAD.
SQEXSEAD is usually identified by a .sab file extension, or a "sabf" header magic - it might also be stored inside UE4 assets too (a .uasset & .uexp pair, with the sabf header inside the uexp file) - DQXI used the UE4 way (SABReplace can update the uexp & fix the uasset) but this should be able to work with non-UE4 SABs too.
IIRC you'll have best results if you encode your audio to HCA format first (or preferably HCA-MX, which requires less CPU to decode, you might need the Criware criatomencd.exe tool to encode that though)
HCA usually seems to be the main audio codec used by these, but there's some games which might not support it (and might for example require MSF audio instead - I think that's just a variant of MP3 though, so shouldn't have any trouble with that)
The SQEXSEAD format also supports OGG/WAV/ATRAC9 audio too, but sadly I never figured out how OGG was stored in the SQEXSEAD container... seemed to have something to do with each OGG chunk being referenced in the SQEXSEAD header, but I didn't manage to get very far with it so there's no support for replacing with OGGs atm.
Really it depends on the game which audio codecs will work or not - even though the SQEXSEAD format can contain all those different codecs, normally games will only include support for the codec that their audio files use, so it's usually a good idea to stick with the same one.
For more info about SQEXSEAD files you can check out the vgmstream decoder source code, was immensely helpful while creating this tool: https://github.com/losnoco/vgmstream/bl ... qex_sead.c
Anyway, to use SABReplace just double-click the EXE to show a small usage guide, the tool is command-line though so you'll need to run it with parameters through command-prompt.
I'll probably post the code for this up somewhere soon, if someone really wants to look at it just send me a PM.
Enjoy, if you have any questions/problems please let me know!
E: was just reminded of one small feature I forgot to post about - SABReplace will also inject a HCA loop header for you if it doesn't already exist: unfortunately most free HCA encoders don't have the ability to create this with the proper loop start/loop end values, which some games require to loop properly.
This shouldn't be a problem with the official Criware tools though, this is just for people who don't want to use those (which is why it won't touch the loop header if it exists already, the header Criware generates is probably a lot more accurate than what SABReplace can create, well the values that generates seem to be different anyway...)
You can disable this by using 0 for both loop start & loop end, if the track you're editing doesn't loop or something.