Clone wiki

wwiseconv / WWise_format

WWise format

WWise Vorbis files are stored using the RIFF container format, disguising as WAVE. This is the description for the old format.

struct riff_header {
  char magic[4]; /* RIFF */
  uint32_t file_size;
  char type[4]; /* WAVE */

struct riff_chunk {
  char type[4];
  uint32_t size;

/* not really sure if this is 100% correct */
struct fmt {
  uint16_t format_tag;
  uint16_t channels;
  uint32_t samples_per_sec;
  uint32_t avg_bytes_per_sec;
  uint16_t blockalign;
  uint16_t bits_per_sample;
  uint16_t size; /* 0 or 22 */
  uint16_t valid_bits_per_sample;
  uint32_t channel_mask; /* speaker position mask */

  uint8_t guid[16];

struct vorb {
  /* unknown */

/* chunks inside "data" */
struct data_chunk {
  uint32_t size;
  uint32_t padding;
  char data[size];

/* vorbis packets */
struct data_packet {
  uint32_t size;
  uint32_t granule; /* number of samples decoded at the end of the packet */
  char data[size];


The file is sorted like this:

  • RIFF header
  • "fmt " chunk
  • "vorb" chunk
  • "data" chunk

"data" chunk

old format

Begins with 3 data_chunk (the first three vorbis headers: identification, comments and codebooks).

Keep reading data_packets until the end of the chunk.

The identification and comments headers are removed. The codebooks header doesn't begin with "\x05vorbis".

Unknown so far

  • vorb chunk
  • the two first packets after the Vorbis headers. they have granule pos 0.