Wave Dictionary: Difference between revisions

m
 
(30 intermediate revisions by 3 users not shown)
Line 8:
! Description
|-
| 0x00 || uint32_t || <code>0x809</code> || Magic number.
|-
| 0x04 || uintptr_tuint32_t || Pointer to|| locationThe insingle systembyte memory.at Usually0x04 <code>nullptr</code>.seems to ||be a Big Endian bool.
|-
| 0x08 || uint32_tuintptr_t || || ContainerPointer sizeto audio data.
|-
| 0x0C || [[Wave Dictionary#RwaWaveDict|RwaWaveDict]]* || || Pointer to wave dictionary.
|-
| 0x10 || uint32_t || || If value at <code>0x04</code> is non-zero then this will be, too.
|-
| 0x14 || uint32_t || || Audio data size. ‎
|-
| 0x18 || [[Wave Dictionary#RwaUUID|RwaUUID]] || style="text-align:right" | Xbox: <code>73F2018B 75DFF081 4BC8E45F 453A2D04 (Xbox)</code><br>‎‎‎‎5393C7DB‎‎‎‎PS2: <code>5393C7DB EA6481AE 4917FC38 AAEAC9AC</code><br>GCN: (PS2) <code>48F6C70A 72142484 6A4279E1 D3329DFD</code> || Platform UUID.
|-
| 0x28 || uint32_tuintptr_t || || AudioPointer datato positionaudio data.
|-
|}
 
== RwaUUID ==
{| class="wikitable" style=text-align:left
! 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 ==
{| class="wikitable" style=text-align:left
<syntaxhighlight lang="cpp">
! Offset
struct RwaUniqueID
! Type
{
! Name
union
|-
{
| 0x00 || RwaUUID* || uuid;
|-
RwaUUID* copyUUID;
| 0x04 || char* || name
}
|-
 
| 0x08 || uint32_t || flags
struct name
|-
{
|}
char* uniqueName;
char* copyName;
}
};
</syntaxhighlight>
 
== 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 ==
{| class="wikitable" style=text-align:left
<syntaxhighlight lang="cpp">
! Offset
struct RwaWaveFormat
! Type
{
! Name
uint32_t sampleRate;
! Description
RwaUUID* dataType;
|-
uint32_t length;
| 0x00 || uint32_t || sampleRate ||
uint8_t bitDepth;
|-
uint8_t noChannels;
| 0x04 || uint32_t || dataType || 0: Sony PS ADPCM<br>1: Signed 16-bit PCM<br>3: Nintendo DSP ADPCM<br>4: Xbox IMA ADPCM
// uint8_t pad[2];
|-
void* miscData;
| 0x08 || uint32_t || length ||
uint8_t miscDataSize;
|-
uint8_t flags;
| 0x0C || uint8_t reserved;|| bitDepth ||
|-
};
| 0x0D || uint8_t || noChannels ||
</syntaxhighlight>
|-
| 0x10 || void* || miscData || Has a "00: GCN ADPCM Header" chunk which contains Nintendo DSP ADPCM coefficients and initial history data.
|-
| 0x14 || uint32_t || miscDataSize ||
|-
| 0x18 || uint8_t || flags ||
|-
| 0x19 || uint8_t || reserved ||
|-
|}
 
== RwaWave ==
{| class="wikitable" style=text-align:left
! Offset
! Type
! Name
|-
| 0x00 || RwaUniqueID || uniqueID
|-
| 0x0C || RwaWaveDef* || waveDef
|-
| 0x10 || RwaWaveFormat || format
|-
| 0x2C || RwaWaveFormat || targetFormat
|-
| 0x48 || uint32_t || uncompressedLength
|-
| 0x4C || void* || data
|-
| 0x50 || void* || state
|-
| 0x54 || uint32_t || flags
|-
| 0x58 || RwaObj* || obj
|-
|}
 
 
[[Category:Formats_(Takedown-Dominator)]]
<syntaxhighlight lang="cpp">
class RwaWave
{
RwaUniqueID uniqueID;
RwaWaveDef* waveDef; // Pointer to location in system memory.
RwaWaveFormat format;
RwaWaveFormat targetFormat; // Usually identical to format.
uint32_t uncompressedLength;
void* data;
void* state;
uint32_t flags;
RwaObj* obj;
};
</syntaxhighlight>