Wave Dictionary: Difference between revisions

From Burnout Wiki
Content added Content deleted
No edit summary
Line 43: Line 43:


== RwaUniqueID ==
== RwaUniqueID ==
{| class="wikitable" style=text-align:left
<syntaxhighlight lang="cpp">
! Offset
struct RwaUniqueID
! Type
{
! Name
RwaUUID* uuid;
|-
char* uniqueName;
| 0x00 || RwaUUID* || uuid
uint32_t flags;
|-
};
| 0x04 || char* || uniqueName
</syntaxhighlight>
|-
| 0x08 || uint32_t || flags
|-
|}


== RwaWaveDict ==
== RwaWaveDict ==
{| class="wikitable" style=text-align:left
<syntaxhighlight lang="cpp">
! Offset
class RwaWaveDict
! Type
{
! Name
RwaUniqueID uniqueID;
|-
RwaLLNode waveListHead;
| 0x00 || RwaUniqueID || uniqueID
uint16_t pad;
|-
int8_t flagsAux;
| 0x0C || RwaLLNode || waveListHead
int8_t flags;
|-
RwLLLink link;
| 0x18 || int8_t || flagsAux
void* dumpAddr;
|-
void* waveRAMHandle;
| 0x19 || int8_t || flags
uint32_t waveRAMSize;
|-
};
| 0x1C || RwLLLink || link
</syntaxhighlight>
|-
| 0x24 || void* || dumpAddr
|-
| 0x28 || void* || waveRAMHandle
|-
| 0x2C || void* || waveRAMSize
|-
|}


== RwaWaveFormat ==
== RwaWaveFormat ==
{| class="wikitable" style=text-align:left
<syntaxhighlight lang="cpp">
! Offset
struct RwaWaveFormat
! Type
{
! Name
uint32_t sampleRate;
|-
RwaUUID* dataType;
uint32_t length;
| 0x00 || uint32_t || uniqueID
|-
uint8_t bitDepth;
| 0x04 || RwaUUID* || dataType
uint8_t noChannels;
|-
uint16_t pad;
| 0x08 || uint32_t || length
void* miscData;
|-
uint32_t miscDataSize;
uint8_t flags;
| 0x0C || uint8_t || bitDepth
|-
uint8_t reserved;
| 0x0D || uint8_t || noChannels
};
|-
</syntaxhighlight>
| 0x10 || void* || miscData
|-
| 0x14 || uint32_t || miscDataSize
|-
| 0x18 || uint8_t || flags
|-
| 0x1C || uint8_t || reserved
|-
|}


== RwaWave ==
== RwaWave ==
{| class="wikitable" style=text-align:left
<syntaxhighlight lang="cpp">
! Offset
class RwaWave
! Type
{
! Name
RwaUniqueID uniqueID;
|-
RwaWaveDef* waveDef; // Pointer to location in system memory.
| 0x00 || RwaUniqueID || uniqueID
RwaWaveFormat format;
|-
RwaWaveFormat targetFormat; // Usually identical to format.
| 0x0C || RwaLLNode || waveListHead
uint32_t uncompressedLength; // 0 if using compressed audio.
|-
void* data;
| 0x14 || int8_t || flagsAux
void* state;
|-
uint32_t flags;
| 0x15 || int8_t || flags
RwaObj* obj;
|-
};
| 0x18 || RwLLLink || link
</syntaxhighlight>
|-
| 0x20 || void* || dumpAddr
|-
| 0x24 || void* || waveRAMHandle
|-
| 0x28 || void* || waveRAMSize
|-
|}

Revision as of 17:43, 24 June 2021

The RenderWare Audio Wave Dictionary container format is used to store a collection of audio files, or "waves." It uses the file extension .awd. Each wave is of type RwaWave and is stored in a RwLLNode in an RwLinkList.

Layout

Offset Type Value Description
0x00 uint32_t 0x809 Magic number.
0x04 uint32_t Usually 0.
0x08 uintptr_t Pointer to audio data.
0x0C RwaWaveDict* Pointer to wave dictionary.
0x10 uint32_t If value at 0x04 is non-zero then this will be, too.
0x14 uint32_t Audio data size. ‎
0x18 RwaUUID Xbox: 73F2018B 75DFF081 4BC8E45F 453A2D04
‎‎‎‎PS2: 5393C7DB EA6481AE 4917FC38 AAEAC9AC
Platform UUID.
0x28 uintptr_t Pointer to audio data.

RwaUUID

Offset Type Name
0x00 uint32_t time_low
0x04 uint16_t time_mid
0x06 uint16_t time_hi_and_version
0x08 uint8_t[8] node

RwaUniqueID

Offset Type Name
0x00 RwaUUID* uuid
0x04 char* uniqueName
0x08 uint32_t flags

RwaWaveDict

Offset Type Name
0x00 RwaUniqueID uniqueID
0x0C RwaLLNode waveListHead
0x18 int8_t flagsAux
0x19 int8_t flags
0x1C RwLLLink link
0x24 void* dumpAddr
0x28 void* waveRAMHandle
0x2C void* waveRAMSize

RwaWaveFormat

Offset Type Name
0x00 uint32_t uniqueID
0x04 RwaUUID* dataType
0x08 uint32_t length
0x0C uint8_t bitDepth
0x0D uint8_t noChannels
0x10 void* miscData
0x14 uint32_t miscDataSize
0x18 uint8_t flags
0x1C uint8_t reserved

RwaWave

Offset Type Name
0x00 RwaUniqueID uniqueID
0x0C RwaLLNode waveListHead
0x14 int8_t flagsAux
0x15 int8_t flags
0x18 RwLLLink link
0x20 void* dumpAddr
0x24 void* waveRAMHandle
0x28 void* waveRAMSize