Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.
Zero Tolerance for Disrespect

Senran Kagura New Link / Dolphin Wave ".spd" audio archive file

Featured Replies

  • Localization

Hello, i'm here to ask if anyone can help me solve this .spd audio archive format? It's a format used by Honey ∞ Parade Games in games such as Senran Kagura: New Link and Dolphin Wave to store audio files (in the case of DW, it stores a bunch of .ogg files from what i have seen so far from digging the PC version's files). At first i check if my foobar2000 with the vgmstream component can extract the content but failed. I then tried to see if this format have been solved before but all i could find was another format with similar name for some GameCube games. Since i'm a complete noob at reverse engineering, i can only explain things in the header section: From what i have seen so far, every files starts with a bunch of headers like "HEAD", "SNHD", "SNIF" and "SNDT" with some bytes between each header. The amount of "SNHD" is different in each file, which led me to believe that the amount of "SNHD" headers is the amount of files contain inside the archive, and the bytes after each "SNHD" header is some soft of id labelling. If anyone can furthering research this format and share it here, thank you so much for that in advance.
The sample included here is from Dolphin Wave (the PC version if anyone's asking) and stores a bunch of sound effects used in the game. Thank you so much in advance.

samples.zip

Edited by PlsSendHelp

Solved by DKDave

  • Solution

From a quick look at the file:

The "HEAD" section contains the number of files (8)

Each "SNHD" section contains the offset to each file - first one is 0x90, then 0x20590, etc.

Each file begins with a "SNIF" header, which contains channels and sample rate info, and then the "SNDT" section is the audio data.

The audio here is 16-bit PCM

 

Attached is a QuickBMS script to extract them as playable .wav files - I've made some assumptions about the format so I'm not sure if it's 100% correct, but give it a try and see if it sounds correct.

 

 

spd.zip

Edited by DKDave
Added QuickBMS script

  • Supporter

File format:

 

// Dolphin Wave (PC)
// SPD file format 


// header
4 bytes (char) - signature // "HEAD"
4 bytes (uint32) - chunk header size  // 8
4 bytes (uint32) - unknown  // 1
4 bytes (uint32) - number of files


// index
number_of_files *
{
   4 bytes (char) - chunk signature  // "SNHD"
   4 bytes (uint32) - chunk header size  // 8
   8 bytes (uint64) - SNIF chunk offset
}


// data
number_of_files *
{
   4 bytes (char) - chunk signature  // "SNIF"
   4 bytes (uint32) - chunk header size  // 16
   2 bytes (uint16) - number of channels  // e.g. 2
   2 bytes (uint16) - bits?  // e.g. 16
   4 bytes (uint32) - rate  // e.g. 22050
   8 bytes (uint64) - unknown

   4 bytes (char) - chunk signature  // "SNDT"
   4 bytes (uint32) - chunk size
   x bytes - audio data

}

 

10 minutes ago, ikskoks said:

File format:

 

// Dolphin Wave (PC)
// SPD file format 


// header
4 bytes (char) - signature // "HEAD"
4 bytes (uint32) - chunk header size  // 8
4 bytes (uint32) - unknown  // 1
4 bytes (uint32) - number of files


// index
number_of_files *
{
   4 bytes (char) - chunk signature  // "SNHD"
   4 bytes (uint32) - chunk header size  // 8
   8 bytes (uint64) - SNIF chunk offset
}


// data
number_of_files *
{
   4 bytes (char) - chunk signature  // "SNIF"
   4 bytes (uint32) - chunk header size  // 16
   2 bytes (uint16) - number of channels  // e.g. 2
   2 bytes (uint16) - bits?  // e.g. 16
   4 bytes (uint32) - rate  // e.g. 22050
   8 bytes (uint64) - unknown

   4 bytes (char) - chunk signature  // "SNDT"
   4 bytes (uint32) - chunk size
   x bytes - audio data

}

 

For the unknown 1 value in the HEAD chunk, I could refer to the audio codec being PCM16, but would need files with different audio codecs to compare - the android version of "se_sys" is identical to the PC sample posted here.  The unknown in the SNIF chunk is the data size, although it's sometimes just slightly different to the actual data size in the SNDT chunk.

 

  • 9 months later...

Hello, do you know how to decrypt the asset files of Dolphin Wave, they end with .lza and are encrypted, here are some sample files, thank you very much.assets.zip

  • 2 weeks later...

the asset folder has some duplicates, one lza file and one lzs file for the same asset in some cases it seems, I wonder if it can be used to figure out the encryption as not all the files are available in lzs format which can be extracted with the lzss0 script from chrrox, here are some samples if anyone wants to take a look at the model and texture files:

 

 

dw.jpg

un01002_under.7z

Edited by GDL

  • 5 months later...

Looks like someone figured out the encryption for the lza files, it turns out is just AES-CBC with a specific key, LukeFZ shared some code to decrypt the files via Discord.

source.zip

  • 1 month later...

what about this .pak file that contains the filelist for downloading the game files through the cdn like this?

it's neither an .lza nor an .lzs file but with a weird compression and encryption.

and the game cdn download format has some sort of md5 hash at the end of the link form.

for example: https://x-cdn-dolphin.marv-games.jp/prd001/resources/Assets/Cmn/Master/ActiveSkill.pak.b2ac96225f52c76e9f2182791ac01d3cc656d6a1

25053000-116-0.ziphttps://x-cdn-dolphin.marv-games.jp/prd001/fileList/Pc/25053000-116-0.pak

Neither the tool above nor the DolphinWaveSAEx tool will open them.



 

Edited by FrayaBoop

  • 11 months later...

The game file url is PC or Phone /filename.ext+sha1 hash.

The texture in phone is astc format. but in pc that's bc7 format.

Hope have solution to open the filelist pak to download the game files without real play.

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.