Unreal Engine SoundNodeWave

From XentaxWiki
Jump to: navigation, search

Back to index | Edit this page

SoundNodeWave

  • Format Type : Audio / Text / Misc
  • Endian Order : Little Endian


Format Specifications

// A Story About My Uncle (PC Steam)
// SoundNodeWave file format (Unreal Engine 3)
// Version: 868
// Engine version: 12097
// Cooker version: 136 


4 bytes (uint32) - file ID number


// UE3 properties
num_of_properties *
{
   // Note: name ID mapping can be found in "NameTable.log"
   // after using "UPKunpack.exe" tool
   // Mapping can be different for each game

   // Note: "None" property should be the last one

   8 bytes (uint64) - property name ID   // 2 - bLoopingSound
                                         // 3 - bManualWordWrap
                                         // 14 - Duration
                                         // 19 - LocalizedSubtitles
                                         // 45 - None
                                         // 46 - NumChannels
                                         // 49 - RawPCMDataSize
                                         // 51 - SampleRate
                                         // 54 - SourceFilePath
                                         // 55 - SourceFileTimestamp
                                         // 58 - Subtitles
   8 bytes (uint64) - property type ID   
   8 bytes (uint64) - property length
   x bytes - property data
       // Data type depends on property name ID, for example:
       // for bLoopingSound = 1 byte (bool), e.g. false
       // for bManualWordWrap = 1 byte (bool) e.g. true
       // for Duration = 4 bytes (float) e.g. 15.69950
       // for NumChannels = 4 bytes (uint32) e.g. 2
       // for SampleRate = 4 bytes (uint32) e.g. 48000
       // for RawPCMDataSize = 4 bytes (uint32)
       // for LocalizedSubtitles = x bytes
       // for SourceFilePath = x bytes (string + null)
       //
       // for SourceFileTimestamp = x bytes
       //       4 bytes (uint32) - timestamp length
       //       x bytes (string) - timestamp e.g. "2014-04-14 12:01:51"
       //       1 byte - null
       //
       // for None = x bytes
       //       8 bytes (uint64) - nulls
       //       4 bytes (uint32) - nulls
       //       4 bytes (uint32) - pointer1?
       //       4 bytes (uint32) - nulls
       //       4 bytes (uint32) - audio compressed size
       //       4 bytes (uint32) - audio uncompressed size
       //       4 bytes (uint32) - pointer2?
       //       x bytes - OGG audio data
       //       x bytes - unknown
       //
       // for Subtitles = x bytes
       //       4 bytes (uint32) - number of subtitle properties
       //
       //       // subtitle properties
       //       num_of_sub_properties *
       //       {
       //           8 bytes (uint64) - nested property name ID  // 59 - Text Type
       //                                                       // 60 - Time Type
       //                                                       // 45 - None
       //           8 bytes (uint64) - nested property type ID
       //           x bytes - subtitle property data
       //              // for Text Type:
       //              //   4 bytes (uint32) - string size
       //              //   x bytes (string) - string entry
       //              // for Time Type:
       //              //   4 bytes (float) - timestamp (can be empty)
       //              // for None:
       //                   x bytes - nested subtitle entries (Text Type + Time Type)
       //       }

}

Other Structures

Some structures inside SoundNodeWave files may be different for other games.
Below is example of LocalizedSubtitles structure which contains text strings and other text-related data.

// Killer is Dead (PC Steam)
// LocalizedSubtitles Type file format

4 bytes (uint32) - ID

num_of_properties *
{
   8 bytes (uint64) - nested name ID // 25 - LanguageExt Type
                                     // 40 - Subtitles Type
                                     // 2 - bMature Type
                                     // 1 - bManualWordWrap Type
                                     // 4 - bSingleLine Type
                                     // 27 - None Type
   8 bytes (uint64) - nested type ID
   8 bytes (uint64) - property size
   x bytes - property data
     // for LanguageExt Type:
     //   4 bytes (uint32) - size of the language code
     //   x bytes (string) - language code  // e.g. INT, DEU, ESN etc.
     //
     // for Subtitles Type:
     //   4 bytes (uint32) - number of subtitles
     //   num_of_subtitles *
     //   {
     //      8 bytes (uint64) - nested name ID // 41 - Text Type
     //                                        // 42 - Time Type
     //                                        // 27 - None Type
     //      8 bytes (uint64) - nested type ID
     //      8 bytes (uint64) - property size
     //      x bytes - property data
     //            for Text Type:
     //               4 bytes (uint32) - subtitle length
     //               x bytes (string) - subtitle
     //            for Time Type:
     //               4 bytes (float) - time in seconds
     //            for None Type:
     //               x bytes - nested Text Type
     //               x bytes - nested Time Type
     //               x bytes - nested empty None Type
     //    }
     //
     // for bMature Type:
     //   1 byte (bool) - mature type flag
     // for bManualWordWrap Type:
     //   1 byte (bool) - word wrap flag
     // for bSingleLine Type:
     //   1 byte (bool) - single line flag
     // for None Type:
     //   x bytes - nested entries
}

MultiEx BMS Script

Not written yet.

Notes and Comments

  • This file format is commonly used in games built using Unreal Engine 3.

Games

List of games using this file format:

  • A Story About My Uncle
  • Killer is Dead
  • Many more...

Compatible Programs

See Also