Jump to content

Disney Speedstorm - extracting music/sfx/voice


Go to solution Solved by DKDave,

Recommended Posts

PROGRESS updated 9/23/2024


 

THINGS WE'VE FIGURED OUT

  • pack_sd.pack contains all the sound files!
    • all filenames are a randomized 16-character alphanumeric string, with no obvious ordering and no metadata.
    • filenames are consistent across patches... except for the Season 6 update, which renames all of the files >_<
    • the following file types can be found within: 
      • WAV files (mostly music, must be converted with vgmstream)
      • BNK packages (must be extracted with bnkextr)
        • WEM files (mosty sound and voices)
      • a single unidentifiable file called 397F9F6720B1625D that grows larger with each update to the game

THINGS TO FIGURE OUT

  • what is 397F9F6720B1625D?! is it an index of metadata?! WE MUST KNOW!!! file attached to this post here:

 

INSTRUCTIONS


 

what you need

  • a copy of the game. the specific file for the music: (speedstorm directory)\Windows-Desktop\PC\pack_sd.pack
  • quickbms by Luigi Auriemma to extract the files
  • the BMS script by @DKDave so that QuickBMS can identify the filetypes of the extracted files. you can get it from this post: 
  • to convert the music: vgmstream-cli, download the relevant "Command Line" file for your OS
  • to get the sound/voices: WWise *.BNK File Extractor 

 

how-to

  • use QuickBMS to extract the files
    • open quickbms.exe
    • first prompt: select DKDave's BMS script
    • second prompt: navigate to (speedstorm directory)\Windows-Desktop\PC\ and select pack_sd.pack, which contains all the sound files
    • third prompt: choose whatever directory you want to extract all the files
    • this will create a bajillion WAV and BNK files. the WAV files are music, the BNK files are packages containing sound and voice effects.
  • use VGMStream to convert the music
    • select ~400 of the WAV files at a time. any more and the command will fail. (my advice: if you start from the bottom of the file list and go up, then it'll prevent your window from autoscrolling.)
    • drag and drop them onto vgmstream-cli.exe. you can do multiple batches at a time!
    • repeat until all files are converted.
    • the converted files will double-up the filename extension into .wav.wavfeel free to delete the rest.
  • use BNK Extract to further extract the vox/sfx
    • select a .bnk file
    • drag and drop it onto bnkextr.exe
    • repeat for each .bnk file
    • (i'm pretty sure i figured out a way to do this in big batches but i forgot exactly how, will update when i can)

 

 

ORIGINAL POST


first off, apologies, i know VERY little about this sort of stuff, and a lot of this will probably seem pretty basic. i'd literally never heard of quickbms until maybe an hour ago lol

tl;dr:

  • trying to get music/sfx/voice files from Disney Speedstorm.
  • opened .pack files and extracted ~40k files, most with no file extension.
  • tried opening some at random in MPC-HC.
    • one file gave me an error saying "failed to find a connectable filter" as well as tons of audio codec information.
    • error log and file are attached.
  • i feel like i'm getting close. i just need help turning this into something readable by audio playback apps, and a quick means to identify which extracted files contain audio.

known game details:

  • game: Disney Speedstorm
  • developer: Gameloft
  • engine: Jet Engine (shared with Asphalt 9, possibly modified/forked?)
  • file type: .pack
  • file list (as of 2024-07-11):
    image.thumb.png.3b6dd2727d82aec4d843d46f6200b0e9.png

my goals are to extract the following from Disney Speedstorm in a playable format by contemporary media players:

  • music
  • sound effects
  • voice lines

so far, using quickbms and the "Zip64Unpacker_A9_1.6.2.bms" script (which i found on this post by @ksg22 and this post by @Pige123), i've managed to extract around 40,000 files from all of the .pack files. their file extensions include:

  • <none> (11,447 files)
  • .json.jmodel (7,651 files)
  • .tga.jtex (21,332 files)

i'm guessing the files i want are somewhere in the 11.5k files with no file extension. at random i tried dumping a few into Media Player Classic. most come up "invalid", but occasionally i'll get something like this:

image.png.04133310dfeb4ce3dfca05648df7c4d6.png

i'll include the full log here, as i barely know what any of this means.

LAV Splitter Source (internal)::Audio

Media Type 0:
--------------------------
Audio: 0xffff 44100Hz stereo 94kbps

AM_MEDIA_TYPE: 
majortype: MEDIATYPE_Audio {73647561-0000-0010-8000-00AA00389B71}
subtype: Unknown GUID Name {0000FFFF-0000-0010-8000-00AA00389B71}
formattype: FORMAT_WaveFormatEx {05589F81-C356-11CE-BF01-00AA0055595A}
bFixedSizeSamples: 1
bTemporalCompression: 0
lSampleSize: 256000
cbFormat: 66

WAVEFORMATEX:
wFormatTag: 0xffff
nChannels: 2
nSamplesPerSec: 44100
nAvgBytesPerSec: 11779
nBlockAlign: 0
wBitsPerSample: 0
cbSize: 48 (extra bytes)

pbFormat:
0000: ff ff 02 00 44 ac 00 00 03 2e 00 00 00 00 00 00 ÿÿ..D¬..........
0010: 30 00|00 00 02 31 00 00 a0 f6 95 00 ba 00 00 00 0....1.. ö.º...
0020: 12 0e 28 00 00 00 20 00 28 09 00 00 e2 09 00 00 ..(... .(...â...
0030: 24 01 20 00 f4 33 00 00 94 35 00 00 6f ce 50 a9 $. 3..5..oÎP©
0040: 08 0b                                           ..


Media Type 1:
--------------------------
Audio

AM_MEDIA_TYPE: 
majortype: MEDIATYPE_Audio {73647561-0000-0010-8000-00AA00389B71}
subtype: Unknown GUID Name {AFBC2343-3DCB-4047-9655-E1E62A61B1C5}
formattype: Unknown GUID Name {35189950-CAC9-4C8D-819D-B6FAEE15DD9D}
bFixedSizeSamples: 1
bTemporalCompression: 0
lSampleSize: 256000
cbFormat: 72

WAVEFORMATEXFFMPEG:
nCodecId: 0x0000

WAVEFORMATEX:
wFormatTag: 0xffff
nChannels: 2
nSamplesPerSec: 44100
nAvgBytesPerSec: 11779
nBlockAlign: 0
wBitsPerSample: 0
cbSize: 48 (extra bytes)

pbFormat:
0000: 00 00 00 00 ff ff 02 00 44 ac 00 00 03 2e 00 00 ....ÿÿ..D¬......
0010: 00 00 00 00 30 00 00 00|02 31 00 00 a0 f6 95 00 ....0....1.. ö.
0020: ba 00 00 00 12 0e 28 00 00 00 20 00 28 09 00 00 º.....(... .(...
0030: e2 09 00 00 24 01 20 00 f4 33 00 00 94 35 00 00 â...$. 3..5..
0040: 6f ce 50 a9 08 0b 00 00                         oÎP©....

i'll include a sample file, the one that gave me that error and thus presumably has some audio data in it:

2DCC76A86C2974BF.zip

if anyone can help a gal decipher all this and squeeze something playable out of it, i'd really appreciate it! ^-^

Edited by SgtSweetieBelle
updated with instructions and most recent findings
Link to comment
Share on other sites

You can add the .wav extension to your sample file and it'll play in Foobar with vgmstream.  Unfortunately, the files in the .pack archives don't seem to have extensions to identify them.  If you can maybe upload an example .pack file that contains audio (such as the one from your sample), I might be able to adapt my zip QuickBMS script to identify them

 

 

Link to comment
Share on other sites

  • ikskoks changed the title to Disney Speedstorm - extracting music/sfx/voice
2 hours ago, DKDave said:

You can add the .wav extension to your sample file and it'll play in Foobar with vgmstream.  Unfortunately, the files in the .pack archives don't seem to have extensions to identify them.  If you can maybe upload an example .pack file that contains audio (such as the one from your sample), I might be able to adapt my zip QuickBMS script to identify them

 

 

here we go @DKDavehttps://mega.nz/file/NVoDRIRb#gHF5EDKLRV_BDT-Xh4kzM41AScyct6U_DnyX9gnPkk0

this is pack_sd.pack, the file with the most working sound files (sd for "sound", ugh, it's so obvious...)

there's some in here that i can't open with vgstream, but a bunch of others that i definitely can. i wonder if they're encoded differently, or perhaps they're their own archives full of sfx and voice lines?

thanks so much for your help so far!

Link to comment
Share on other sites

Posted (edited)

update: i did a mass rename to add .wav to all of the files, then ran them through vgmstream-cli.exe, and they all seem to have been converted successfully! this is an absolute treasure trove.

here are my remaining questions:

  • any faster way to identify these files?
    is there an index or metadata we can use to identify what each file is without playing it back?
     
  • what about the ones that won't convert?
    there's about ~160 files that won't open. any ideas on how we can identify and get into 'em?
     
  • how likely will game updates affect the integrity of these files and their names?
    i'm planning on indexing these in a database. but to do that, each file needs a static identifier. right now, that's the file name. how likely is the name to be preserved across updates in a frequently-patched live service game? i'm sure the answer differs from engine to engine, and since Jet Engine is proprietary, we probably don't have much insight into how exactly it works. but i'm hoping that these stay pretty fixed. i know some databases and indexes will muck around with file names while using a constantly-updated manifest to keep them identified... (if that's the case maybe i'll just use a hash instead lol)
     
  • will you still be adapting your quickBMS script now that we've gotten this far?
    i know it's still useful to do just so we can skip the rename and vgmstream steps on future runs, but do you think it's possible it might help with any of the outstanding problems i mentioned above?
     

edit: actually, yeah, the quickBMS script might come in handy, this has a LOT of files but it seems far from comprehensive. i can only guess that the rest of the sounds are spread out throughout the rest of the .pack files.

Edited by SgtSweetieBelle
Link to comment
Share on other sites

  • Solution
18 hours ago, SgtSweetieBelle said:

update: i did a mass rename to add .wav to all of the files, then ran them through vgmstream-cli.exe, and they all seem to have been converted successfully! this is an absolute treasure trove.

here are my remaining questions:

  • any faster way to identify these files?
    is there an index or metadata we can use to identify what each file is without playing it back?
     
  • what about the ones that won't convert?
    there's about ~160 files that won't open. any ideas on how we can identify and get into 'em?
     
  • how likely will game updates affect the integrity of these files and their names?
    i'm planning on indexing these in a database. but to do that, each file needs a static identifier. right now, that's the file name. how likely is the name to be preserved across updates in a frequently-patched live service game? i'm sure the answer differs from engine to engine, and since Jet Engine is proprietary, we probably don't have much insight into how exactly it works. but i'm hoping that these stay pretty fixed. i know some databases and indexes will muck around with file names while using a constantly-updated manifest to keep them identified... (if that's the case maybe i'll just use a hash instead lol)
     
  • will you still be adapting your quickBMS script now that we've gotten this far?
    i know it's still useful to do just so we can skip the rename and vgmstream steps on future runs, but do you think it's possible it might help with any of the outstanding problems i mentioned above?
     

edit: actually, yeah, the quickBMS script might come in handy, this has a LOT of files but it seems far from comprehensive. i can only guess that the rest of the sounds are spread out throughout the rest of the .pack files.

 

I've attached my QuickBMS script for these .pack files.  It's a bit hacked together due to the way the zip file structure works, but it seems ok.  It identifies the .wav and .bnk files and adds the appropriate extension to them.

.wav is normal audio files containing music

.bnk is WWise sound banks containing dialogue.

Both can be played in Foobar/vgmstream, hopefully that should be all of the audio files.

 

As for your other queries, I'm not sure.

 

ss_zip.zip

  • Like 1
Link to comment
Share on other sites

Posted (edited)

understood all good! This has been an incredible help so far. Thank you so much for everything.

do you have any tips and best practices for quickly identifying/organizing files? Any tools that that you like to use or workflows that help the process go by faster?

edit: found an app called Eagle that shows tons of metadata and lets you build a database with tags, folders/subfolders, and most importantly lets you playback/scrub through simply by highlighting a file's thumbnail (which is a generated waveform). really incredible for previewing and basic tagging. it isn't perfect but it's really nice and i'm making it work!

Edited by SgtSweetieBelle
Link to comment
Share on other sites

  • 2 weeks later...

I've been looking for a way to extract sounds from this game for ages. Thanks so much for this thread! I'm wondering though, have you found any music yet? If so, in which .pack file? The 'sd' one only seems to contain sfx and voice lines, right? I think I went through all the packs, but no other pack than the 'sd' one extracts .wav files.

Edited by MDGX
Link to comment
Share on other sites

  • 1 month later...

Thank you for your work! I was also looking into this game. I noticed that some of the files in some of these packs look like they are further compressed or possibly encrypted. Unsure.

I included a BT template based on the quickbms script and a small pack with 2 files. One file has a compression flag and the other says it does not (based on the quickbms script) but the files extracted seem to have more packed data, as the files don't have headers like the _sd pack does.

Any thoughts?

dz_pack.bt pack5.zip

Link to comment
Share on other sites

  • 4 weeks later...
On 7/27/2024 at 10:10 AM, MDGX said:

I've been looking for a way to extract sounds from this game for ages. Thanks so much for this thread! I'm wondering though, have you found any music yet? If so, in which .pack file? The 'sd' one only seems to contain sfx and voice lines, right? I think I went through all the packs, but no other pack than the 'sd' one extracts .wav files.

hi there! yeah, the music is in pack_sd, maybe they changed it in the newest updates? lemme check rq

edit: yep it's all still in there! you're using DKDave's quickBMS script, right? the one in this post here: 

that'll get you all the music!

 

  

On 8/29/2024 at 2:37 PM, Hearhellacopters said:

Thank you for your work! I was also looking into this game. I noticed that some of the files in some of these packs look like they are further compressed or possibly encrypted. Unsure.

I included a BT template based on the quickbms script and a small pack with 2 files. One file has a compression flag and the other says it does not (based on the quickbms script) but the files extracted seem to have more packed data, as the files don't have headers like the _sd pack does.

Any thoughts?

dz_pack.bt 1.24 kB · 3 downloads pack5.zip 2.14 MB · 2 downloads

i think i might have gotten lost a bit here, how are you able to see compression flags with that quickbms script? (sorry i'm new to all this! xD)

also, where'd you nab that pack5 file from? all of the pack5 files i've seen so far have had filesizes in the hundreds of megabytes, but this one's tiny!

edit: did some research, i see that these BT files are templates for 010 hex editor. never knew you could do that before. neat! might play around with this myself, though i barely know what i'm looking at, so you'll probably not get too much useful info from me ahahaha ^^;

Edited by SgtSweetieBelle
Link to comment
Share on other sites

i went through all of the depots and manifests of the game on steamdb.info, used that to download a bunch of old versions of the game, and ran some comparisons to identify what was added or removed in each release.

i've found the following:

  • the game does, indeed, preserve filenames across versions! (WITH ONE EXCEPTION.)
    i can see all the new and changed tracks with a diff checker, which is great for continued archival.
    ...except for one big instance. will elaborate further below.
     
  • the early access releases, starting from release #1 (18 April 2023) contains no pack_sd.pack file. 
    instead, there's just a big main.pack file. presumably the sound files are in here, but @DKDave's BMS script wasn't able to identify them. i haven't figured out how to get anything usable out of this yet.
     
  • the first release to contain a pack_sd.pack file is release #7 (28 September 2023)
    this is the pre-patch for Season 4 (Cave of Wonders, ft. Aladdin), and is also when the game left early access and became free-to-play.
     
  • in release #11 (28 November 2023), a shit-ton of files were added.
    the package ballooned from 780 to 1503 wav files. i think someone forgot to .bnk a lot of the sfx/vox files.
    this is the pre-patch for Season 5 (Let It Go, ft. Frozen).
     
  • in release #13 (6 February 2024), the file count went back to normal, but all of them had their names changed!
    because of this, it's hard to see what songs actually got added or removed. may have to do a CRC32 compare of every file in the directory or something... very annoying.
    this is the patch for Season 6 (Under the Sea, ft. The Little Mermaid).

everything after #13 is business as usual.

 


edit:

I noticed something else that i think we should prioritize if possible:

  • every single pack_sd.pack has an unidentifiable file in common that gets bigger with each release.
    image.png.2c5e47c0365ea64f2a5dc8870c7c7612.png
    this file is 397F9F6720B1625D. the growing filesize makes me think that this might be some kind of manifest/index with metadata for all of the sound files! anyone have any ideas on how to crack this open or decode it? i'll attach a zip with all of the files from every version of the game  if anyone wants to take a crack at it:
Edited by SgtSweetieBelle
Link to comment
Share on other sites

  • 1 month later...

So I looked into this again and I'm still stumped. I managed to get a decrypted lib from the iOS version of the game via ArmConverter. I did find a few more hints but nothing I can make sense of.

First, the devs refer to the pack files as "pegasus packs". Not sure if they were used in other Jet engine games. The file you're referring to is likely an encrypted SoundbanksInfo.xml file.

245B70D4-12AA-47CB-818D-F54BC701C6AD.png.8caf15b61fb298946835c2bfed9aab0a.png

Also the file names look like Murmur hashes by the const but the function has a that weird 0x61C88647 value use in a way that it is here

.1D51D22D-6FA9-4BBE-AF2E-F0EBE843A6BD.png.0c67eaae5c1176cea7e37e2e8aaad384.png

I also have no idea what that string format they are using. Looks like Python but letters in the brackets don't make sense to me.

Anyways. here is the lib if you want to play around and spend more time on it. You might get lucky but that's all I got in this sitting.

https://drive.google.com/file/d/1Lzuinw7cys6_xgkOiu6Wkc0i8BhRe4Ft/view?usp=drive_link

Next steps would be to find a way to attach a debugger to the game but that can be easier said then done.

Edited by Hearhellacopters
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...