Disney's Up .sps .sdx

Codecs, formats, encoding/decoding of game audio, video and music
emanuelect
Posts: 35
Joined: Sat May 08, 2021 2:07 am

Disney's Up .sps .sdx

Post by emanuelect »

I would like to replace the english audio files of the pc version, with the italian ones of the ps2 version, the problem is that the ps2 ones have a .sps extension, the pc ones are .sdx.
https://mega.nz/file/X4QUhJST#sWAs6Xh4W ... zmrKOJUS44
Ps:Can someone delete the thread created in the game localization section? I accidentally posted there, I wanted to delete it but I don't know how to do it.
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Disney's Up .sps .sdx

Post by aluigi »

Audio is not my field but I want to help at least with the format and some basic information.

This script dumps all the files from the SDX and SDS archives, the format is the same for both:

Code: Select all

get DUMMY long  # 0x3ea/3eb
get FILES long
get ZERO long
get ZERO long
for i = 0 < FILES
    get NAME_CRC long
    get FREQUENCY short
    get DATA_OFF short  # ever 0x800
    get OFFSET long
    get SIZE long
    string NAME p "%08x" NAME_CRC
    log NAME OFFSET SIZE
next i

Each dumped file has a sort of "header" of 2048 bytes, I'm not sure what those few bytes in that section should represent because it's not a structure.
The data after such 2048 bytes is the raw audio data itself which is PS adpcm for the ps2 version and Xbox ADPCM (or IMA ADPCM which is almost identical afaik) for PC.
I tested one sample and it was mono.

I guess that your project may be done relatively easily, convert psadpcm into ima/xbox adpcm and reimport these files with quickbms.
The only doubt is that 2048 bytes header because I have no idea if it will affect in some way the new converted data.
emanuelect
Posts: 35
Joined: Sat May 08, 2021 2:07 am

Re: Disney's Up .sps .sdx

Post by emanuelect »

How can I convert the extracted files? I have searched the internet, but have found nothing.
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Disney's Up .sps .sdx

Post by aluigi »

For ps adpcm sometimes people use MFAudio but in your case I guess you want something more automatic and working on many files.
ffmpeg (and maybe mencoder) should support "ADPCM Playstation" (adpcm_psx) in input and "ADPCM IMA WAV" (adpcm_ima_wav) in output, so with just one command on all the files (with the for batch command or via cygwin find) you would get the job done easily.
For setting up everything it's better if you wait the suggestions of the other users or start experimenting by yourself.

All the samples should be mono, the following script is a modification of the previous one that directly dumps the raw data without that 2048 bytes header and also puts the files in folders based on their samplerate.
The samplerate is mandatory to be known since it's necessary for the correct conversion:

Code: Select all

get DUMMY long  # 0x3ea/3eb
get FILES long
get ZERO long
get ZERO long
for i = 0 < FILES
    get NAME_CRC long
    get FREQ short
    get DATA_OFF short  # ever 0x800
    get OFFSET long
    get SIZE long
    string NAME p "%d/%08x" FREQ NAME_CRC # set the folder/name as you wish
    math OFFSET + DATA_OFF
    math SIZE - DATA_OFF
    log NAME OFFSET SIZE
next i
Good luck
emanuelect
Posts: 35
Joined: Sat May 08, 2021 2:07 am

Re: Disney's Up .sps .sdx

Post by emanuelect »

And here, there is another problem, I read on the internet the examples of using ffmpeg, but I don't really understand what I have to write in the .bat file. Then I noticed that the ps2 extracted files, have different names than the pc ones. is there a way to make these files extract with the same name?
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Disney's Up .sps .sdx

Post by aluigi »

ffmpeg is complicated, yes, and even some examples may not work because older versions were different.
That 32bit field is the only thing available there for identifying the files.
emanuelect
Posts: 35
Joined: Sat May 08, 2021 2:07 am

Re: Disney's Up .sps .sdx

Post by emanuelect »

I've been trying all day to convert the extracted files with both of the tools you recommended, but I couldn't do it. I also noticed that if I try to select one of the extracted files with fmaudio, the program crashes. FFmpeg on the other hand, whatever string I enter on the .bat does not work, the program closes instantly.
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Disney's Up .sps .sdx

Post by aluigi »

I give up on ffmpeg.
While searching a solution I found an old topic of mine here on zenhax where I used a past version of ffmpeg for brute forcing the codec of a raw audio, unfortunately after an update they ruined the support of raw input audio:
viewtopic.php?p=6519#p6519

I even tried building a RIFF WAV header on the raw input but ffmpeg continue to complain: "Invalid data found when processing input".
ffmpeg is just a huge waste of time.

By the way my tentative with the raw data was:

Code: Select all

ffmpeg -acodec adpcm_psx -ar 32000 -ac 1 -vn -f data -i 32000\9a51aea0 test.wav
And it spitted out the error "Option sample_rate not found" but if I remove -ar it says "Output file #0 does not contain any stream".

I hope someone can show us the magic command-line for reading a raw input adpcm audio...
AlphaTwentyThree
Posts: 909
Joined: Sat Aug 09, 2014 11:21 am

Re: Disney's Up .sps .sdx

Post by AlphaTwentyThree »

I've modified script for the PS2 version:

Code: Select all

get DUMMY long  # 0x3ea/3eb
get FILES long
get ZERO long
get ZERO long
get BNAME basename
for i = 0 < FILES
    get NAME_CRC long
    get FREQ short
    get DATA_OFF short  # ever 0x800
    get OFFSET long
    get SIZE long
    math OFFSET + DATA_OFF
    math SIZE - DATA_OFF
   if FREQ != 0
      callfunction SS2 1
      get SSIZE asize MEMORY_FILE
      string NAME p "%s_0x%08x.ss2" BNAME NAME_CRC
      log NAME 0 SSIZE MEMORY_FILE
   endif
next i

startfunction SS2
   set CH 1
   set INTERLEAVE 0x10
   set MEMORY_FILE binary "\x53\x53\x68\x64\x18\x00\x00\x00\x10\x00\x00\x00\xb0\x36\x00\x00\x02\x00\x00\x00\xc0\x2f\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x53\x53\x62\x64\x00\xe8\x11\x00"
   append
   log MEMORY_FILE OFFSET SIZE
   append
   putVarChr MEMORY_FILE 0x24 SIZE long
   putVarChr MEMORY_FILE 0xc FREQ long
   putVarChr MEMORY_FILE 0x14 INTERLEAVE long
   putVarChr MEMORY_FILE 0x10 CH byte
endfunction


The ss2 files are playable with the vgmstream plugin for Winamp and Foobar2000.
No idea how to construct a valid RIFF header for the PC version though. Might give it a shot with a standard wave header and the appropriate codec short later.