Wave Dictionary

Revision as of 21:42, 10 June 2021 by Escape209 (talk | contribs) (Undo revision 6019 by Escape209 (talk))

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

struct RwaUUID
{
    uint32_t time_low;
    uint16_t time_mid;
    uint16_t time_hi_and_version;
    uint8_t node[8];
};

RwaUniqueID

struct RwaUniqueID 
{
    union 
    {
        RwaUUID* uuid;
        RwaUUID* copyUUID;
    }

    struct name 
    {
        char* uniqueName;
        char* copyName;
    }

    uint32_t flags;
};

RwaWaveDict

class RwaWaveDict
{
    RwaUniqueID uniqueID;
    RwaLLNode waveListHead;
    // uint16_t pad;
    int8_t flagsAux;
    int8_t flags;
    RwLLLink link;
    void* dumpAddr;
    void* waveRAMHandle;
    uint32_t waveRAMSize;
};

RwaWaveFormat

struct RwaWaveFormat 
{
    uint32_t sampleRate;
    RwaUUID* dataType;
    uint32_t length;
    uint8_t bitDepth;
    uint8_t noChannels;
    // uint8_t pad[2];
    void* miscData;
    uint32_t miscDataSize;
    uint8_t flags;
    uint8_t reserved;
};

RwaWave

class RwaWave 
{
    RwaUniqueID uniqueID;
    RwaWaveDef* waveDef; // Pointer to location in system memory.
    RwaWaveFormat format;
    RwaWaveFormat targetFormat; // Usually identical to format. 
    uint32_t uncompressedLength; // 0 if using compressed audio.
    void* data;
    void* state;
    uint32_t flags;
    RwaObj* obj;
};