Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
SoundArchiveFile.h
Go to the documentation of this file.
1#ifndef NW4HBM_SND_SOUND_ARCHIVE_FILE_H
2#define NW4HBM_SND_SOUND_ARCHIVE_FILE_H
3
4#include <revolution/types.h>
5
6#include "SoundArchive.h"
7#include "Util.h"
8
10#include "../ut/inlines.h"
11
12#include <revolution/hbm.h>
13
14namespace nw4hbm {
15 namespace snd {
16 namespace detail {
17 namespace SoundArchiveFile {
18
19 static const u32 SIGNATURE_FILE = 'RSAR';
20 static const u32 SIGNATURE_INFO_BLOCK = 'INFO';
21 static const u32 SIGNATURE_SYMB_BLOCK = 'SYMB';
22 static const int FILE_VERSION = NW4HBM_VERSION(1, 1);
23
24 typedef struct StringTreeNode {
25 /* 0x00 */ u16 flags;
26 /* 0x02 */ u16 bit;
27 /* 0x04 */ u32 leftIdx;
28 /* 0x08 */ u32 rightIdx;
29 /* 0x0C */ u32 strIdx;
30 /* 0x10 */ u32 id;
32
37
41
42 typedef struct StringChunk {
43 /* 0x00 */ u32 tableOffset;
44 /* 0x04 */ u32 soundTreeOffset;
46 /* 0x0C */ u32 groupTreeOffset;
47 /* 0x10 */ u32 bankTreeOffset;
49
50 typedef struct StringBlock {
51 union {
54 /* 0x00 */ };
56
61
62 typedef struct SeqSoundInfo {
63 /* 0x00 */ u32 dataOffset;
64 /* 0x04 */ u32 bankId;
65 /* 0x08 */ u32 allocTrack;
66 /* 0x0C */ u8 channelPriority;
69
70 typedef struct StrmSoundInfo {
71 /* Nothing to see here. */
73
74 typedef struct WaveSoundInfo {
75 /* 0x00 */ s32 subNo;
76 /* 0x04 */ u32 allocTrack;
77 /* 0x08 */ u8 channelPriority;
80
83
84 typedef struct Sound3DParam {
85 /* 0x00 */ u32 flags;
86 /* 0x04 */ u8 decayCurve;
87 /* 0x05 */ u8 decayRatio;
89
90 typedef struct SoundCommonInfo {
91 /* 0x00 */ u32 stringId;
92 /* 0x04 */ u32 fileId;
93 /* 0x08 */ u32 playerId;
94
96 /* 0x14 */ u8 volume;
97 /* 0x15 */ u8 playerPriority;
98 /* 0x16 */ u8 soundType;
99 /* 0x17 */ u8 remoteFilter;
101
102 /* 0x20 */ u32 userParam[2];
103
104 /* 0x28 */ u8 panMode;
105 /* 0x29 */ u8 panCurve;
107
110
111 typedef struct BankInfo {
112 /* 0x00 */ u32 stringId;
113 /* 0x04 */ u32 fileId;
117
118 typedef struct PlayerInfo {
119 /* 0x00 */ u32 stringId;
121 /* 0x08 */ u32 heapSize;
125
128
138
139 typedef struct GroupItemInfo {
140 /* 0x0 */ u32 fileId;
141 /* 0x4 */ u32 offset;
142 /* 0x8 */ u32 size;
144 /* 0x10 */ u32 waveDataSize;
148
149 typedef struct GroupInfo {
150 /* 0x00 */ u32 stringId;
151 /* 0x04 */ s32 entryNum;
153 /* 0x10 */ u32 offset;
154 /* 0x14 */ u32 size;
155 /* 0x18 */ u32 waveDataOffset;
156 /* 0x1C */ u32 waveDataSize;
161
171
180
181 typedef struct InfoBlock {
183 /* 0x08 */ Info info;
185
186 typedef struct Header {
189 /* 0x14 */ u32 symbolDataSize;
190 /* 0x18 */ u32 infoOffset;
191 /* 0x1C */ u32 infoSize;
193 /* 0x24 */ u32 fileImageSize;
195
196 static const int HEADER_AREA_SIZE = OSRoundUp32B(sizeof(Header)) + 40;
197 } // namespace SoundArchiveFile
198
200 public:
202
203 void Init(const void* soundArchiveData);
204 bool IsValidFileHeader(const void* soundArchiveData);
205
206 void SetStringChunk(const void* stringChunk, u32 size);
207 void SetInfoChunk(const void* infoChunk, u32 size);
208
210
219 bool ReadGroupItemInfo(u32 groupId, u32 itemId,
220 SoundArchive::GroupItemInfo* info) const;
222
227
228 const char* GetSoundLabelString(u32 id) const;
230
232 bool ReadFilePos(u32 fileId, u32 id, SoundArchive::FilePos* filePos) const;
233
234 const char* GetString(u32 id) const;
235
236 u32 ConvertLabelStringToSoundId(const char* label) const {
238 }
239 u32 ConvertLabelStringToPlayerId(const char* label) const {
241 }
242 u32 ConvertLabelStringToGroupId(const char* label) const {
244 }
245
250
252
253 private:
255 const char* label) const;
256
259
263
267
268 const void* GetPtrConst(const void* base, u32 offset) const {
269 if (offset == 0) {
270 return NULL;
271 }
273 }
274
275 private:
277 /* 0x28 */ const SoundArchiveFile::Info* mInfo;
278 /* 0x2C */ const void* mStringBase;
284 };
285 } // namespace detail
286 } // namespace snd
287} // namespace nw4hbm
288
289#endif
static u8 base[0x2A]
Definition WPADEncrypt.c:10
static s32 offset
Definition WUD.c:1669
Definition SoundArchiveFile.h:199
const SoundArchiveFile::BankInfo * impl_GetBankInfo(u32 id) const
u16 GetVersion() const
Definition SoundArchiveFile.h:246
const void * GetPtrConst(const void *base, u32 offset) const
Definition SoundArchiveFile.h:268
const SoundArchiveFile::SoundCommonInfo * impl_GetSoundInfo(u32 id) const
u32 ConvertLabelStringToPlayerId(const char *label) const
Definition SoundArchiveFile.h:239
const SoundArchiveFile::PlayerInfo * impl_GetPlayerInfo(u32 id) const
bool ReadStrmSoundInfo(u32 id, SoundArchive::StrmSoundInfo *info) const
bool ReadGroupInfo(u32 id, SoundArchive::GroupInfo *info) const
const SoundArchiveFile::SeqSoundInfo * impl_GetSeqSoundInfo(u32 id) const
bool ReadSeqSoundInfo(u32 id, SoundArchive::SeqSoundInfo *info) const
bool ReadSoundArchivePlayerInfo(SoundArchive::SoundArchivePlayerInfo *info) const
const SoundArchiveFile::WaveSoundInfo * impl_GetWaveSoundInfo(u32 id) const
u32 GetInfoChunkSize() const
Definition SoundArchiveFile.h:251
const SoundArchiveFile::Info * mInfo
Definition SoundArchiveFile.h:277
const SoundArchiveFile::StringTree * mStringTreePlayer
Definition SoundArchiveFile.h:281
bool ReadPlayerInfo(u32 id, SoundArchive::PlayerInfo *info) const
void SetInfoChunk(const void *infoChunk, u32 size)
u32 GetInfoChunkOffset() const
Definition SoundArchiveFile.h:249
void Init(const void *soundArchiveData)
u32 ConvertLabelStringToId(const SoundArchiveFile::StringTree *tree, const char *label) const
bool ReadSound3DParam(u32 id, SoundArchive::Sound3DParam *param) const
u32 ConvertLabelStringToSoundId(const char *label) const
Definition SoundArchiveFile.h:236
u32 GetLabelStringChunkSize() const
Definition SoundArchiveFile.h:248
bool ReadGroupItemInfo(u32 groupId, u32 itemId, SoundArchive::GroupItemInfo *info) const
SoundArchiveFile::Header mHeader
Definition SoundArchiveFile.h:276
SoundArchiveFile::SoundInfoOffset impl_GetSoundInfoOffset(u32 id) const NO_INLINE
const SoundArchiveFile::StringTree * mStringTreeSound
Definition SoundArchiveFile.h:280
bool ReadWaveSoundInfo(u32 id, SoundArchive::WaveSoundInfo *info) const
const SoundArchiveFile::StringTree * mStringTreeBank
Definition SoundArchiveFile.h:283
const SoundArchiveFile::StrmSoundInfo * impl_GetStrmSoundInfo(u32 id) const
const SoundArchiveFile::StringTable * mStringTable
Definition SoundArchiveFile.h:279
const SoundArchiveFile::GroupInfo * impl_GetGroupInfo(u32 id) const
u32 ConvertLabelStringToGroupId(const char *label) const
Definition SoundArchiveFile.h:242
bool ReadBankInfo(u32 id, SoundArchive::BankInfo *info) const
u32 GetLabelStringChunkOffset() const
Definition SoundArchiveFile.h:247
void SetStringChunk(const void *stringChunk, u32 size)
bool IsValidFileHeader(const void *soundArchiveData)
bool ReadSoundInfo(u32 id, SoundArchive::SoundInfo *info) const
const char * GetSoundLabelString(u32 id) const
const char * GetString(u32 id) const
bool ReadFileInfo(u32 id, SoundArchive::FileInfo *info) const
const void * mStringBase
Definition SoundArchiveFile.h:278
bool ReadFilePos(u32 fileId, u32 id, SoundArchive::FilePos *filePos) const
const SoundArchiveFile::StringTree * mStringTreeGroup
Definition SoundArchiveFile.h:282
unsigned int size
Definition __os.h:106
unsigned long u32
Definition types.h:12
unsigned short int u16
Definition types.h:10
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8
struct nw4hbm::snd::detail::SoundArchiveFile::StringTreeNode StringTreeNode
Util::DataRef< FileInfo > FileInfoRef
Definition SoundArchiveFile.h:136
Util::DataRef< GroupItemInfo > GroupItemInfoRef
Definition SoundArchiveFile.h:146
static const u32 SIGNATURE_SYMB_BLOCK
Definition SoundArchiveFile.h:21
Util::DataRef< void, SeqSoundInfo, StrmSoundInfo, WaveSoundInfo > SoundInfoOffset
Definition SoundArchiveFile.h:82
static const int FILE_VERSION
Definition SoundArchiveFile.h:22
struct nw4hbm::snd::detail::SoundArchiveFile::FileInfo FileInfo
Util::DataRef< PlayerInfo > PlayerInfoRef
Definition SoundArchiveFile.h:123
struct nw4hbm::snd::detail::SoundArchiveFile::PlayerInfo PlayerInfo
Util::DataRef< GroupInfo > GroupInfoRef
Definition SoundArchiveFile.h:159
Util::Table< SoundArchiveRef > FilePosTable
Definition SoundArchiveFile.h:127
struct nw4hbm::snd::detail::SoundArchiveFile::SeqSoundInfo SeqSoundInfo
struct nw4hbm::snd::detail::SoundArchiveFile::BankInfo BankInfo
Util::Table< PlayerInfoRef > PlayerTable
Definition SoundArchiveFile.h:124
static const u32 SIGNATURE_FILE
Definition SoundArchiveFile.h:19
Util::Table< BankInfoRef > BankTable
Definition SoundArchiveFile.h:116
Util::Table< SoundCommonInfoRef > SoundCommonTable
Definition SoundArchiveFile.h:109
Util::Table< FileInfoRef > FileTable
Definition SoundArchiveFile.h:137
struct nw4hbm::snd::detail::SoundArchiveFile::WaveSoundInfo WaveSoundInfo
struct nw4hbm::snd::detail::SoundArchiveFile::Header Header
struct nw4hbm::snd::detail::SoundArchiveFile::InfoBlock InfoBlock
struct nw4hbm::snd::detail::SoundArchiveFile::StringChunk StringChunk
struct nw4hbm::snd::detail::SoundArchiveFile::SoundArchivePlayerInfo SoundArchivePlayerInfo
struct nw4hbm::snd::detail::SoundArchiveFile::Info Info
struct nw4hbm::snd::detail::SoundArchiveFile::Sound3DParam Sound3DParam
struct nw4hbm::snd::detail::SoundArchiveFile::StringTable StringTable
Util::Table< GroupInfoRef > GroupTable
Definition SoundArchiveFile.h:160
Util::DataRef< SoundCommonInfo > SoundCommonInfoRef
Definition SoundArchiveFile.h:108
struct nw4hbm::snd::detail::SoundArchiveFile::StringBlock StringBlock
Util::Table< GroupItemInfoRef > GroupItemTable
Definition SoundArchiveFile.h:147
Util::DataRef< BankInfo > BankInfoRef
Definition SoundArchiveFile.h:115
struct nw4hbm::snd::detail::SoundArchiveFile::GroupItemInfo GroupItemInfo
static const int HEADER_AREA_SIZE
Definition SoundArchiveFile.h:196
static const u32 SIGNATURE_INFO_BLOCK
Definition SoundArchiveFile.h:20
struct nw4hbm::snd::detail::SoundArchiveFile::StringTree StringTree
struct nw4hbm::snd::detail::SoundArchiveFile::StrmSoundInfo StrmSoundInfo
struct nw4hbm::snd::detail::SoundArchiveFile::SoundCommonInfo SoundCommonInfo
struct nw4hbm::snd::detail::SoundArchiveFile::SymbolBlock SymbolBlock
struct nw4hbm::snd::detail::SoundArchiveFile::GroupInfo GroupInfo
Util::DataRef< SoundArchive::FilePos > SoundArchiveRef
Definition SoundArchiveFile.h:126
SoundType
Definition SoundArchive.h:16
const void * AddOffsetToPtr(const void *base, T offset)
Definition inlines.h:49
Definition HBMAnmController.h:6
Definition SoundArchive.h:54
Definition SoundArchive.h:80
Definition SoundArchive.h:87
Definition SoundArchive.h:63
Definition SoundArchive.h:72
Definition SoundArchive.h:58
Definition SoundArchive.h:32
Definition SoundArchive.h:48
Definition SoundArchive.h:25
Definition SoundArchive.h:39
Definition SoundArchive.h:43
Definition SoundArchiveFile.h:111
u32 stringId
Definition SoundArchiveFile.h:112
u32 fileId
Definition SoundArchiveFile.h:113
Definition SoundArchiveFile.h:129
s32 entryNum
Definition SoundArchiveFile.h:132
Util::DataRef< FilePosTable > filePosTableRef
Definition SoundArchiveFile.h:134
u32 waveDataSize
Definition SoundArchiveFile.h:131
u32 fileSize
Definition SoundArchiveFile.h:130
Util::DataRef< char > extFilePathRef
Definition SoundArchiveFile.h:133
Definition SoundArchiveFile.h:149
Util::DataRef< GroupItemTable > itemTableRef
Definition SoundArchiveFile.h:157
s32 entryNum
Definition SoundArchiveFile.h:151
u32 stringId
Definition SoundArchiveFile.h:150
Util::DataRef< char > extFilePathRef
Definition SoundArchiveFile.h:152
u32 waveDataOffset
Definition SoundArchiveFile.h:155
u32 waveDataSize
Definition SoundArchiveFile.h:156
u32 offset
Definition SoundArchiveFile.h:153
u32 size
Definition SoundArchiveFile.h:154
u32 fileId
Definition SoundArchiveFile.h:140
u32 waveDataOffset
Definition SoundArchiveFile.h:143
u32 offset
Definition SoundArchiveFile.h:141
u32 size
Definition SoundArchiveFile.h:142
u32 waveDataSize
Definition SoundArchiveFile.h:144
Definition SoundArchiveFile.h:186
u32 symbolDataSize
Definition SoundArchiveFile.h:189
u32 infoSize
Definition SoundArchiveFile.h:191
u32 fileImageSize
Definition SoundArchiveFile.h:193
u32 symbolDataOffset
Definition SoundArchiveFile.h:188
u32 fileImageOffset
Definition SoundArchiveFile.h:192
u32 infoOffset
Definition SoundArchiveFile.h:190
ut::BinaryFileHeader fileHeader
Definition SoundArchiveFile.h:187
Definition SoundArchiveFile.h:181
ut::BinaryBlockHeader blockHeader
Definition SoundArchiveFile.h:182
Info info
Definition SoundArchiveFile.h:183
Definition SoundArchiveFile.h:172
Util::DataRef< SoundArchivePlayerInfo > soundArchivePlayerInfoRef
Definition SoundArchiveFile.h:178
Util::DataRef< SoundCommonTable > soundTableRef
Definition SoundArchiveFile.h:173
Util::DataRef< GroupTable > groupTableRef
Definition SoundArchiveFile.h:177
Util::DataRef< BankTable > bankTableRef
Definition SoundArchiveFile.h:174
Util::DataRef< FileTable > fileTableRef
Definition SoundArchiveFile.h:176
Util::DataRef< PlayerTable > playerTableRef
Definition SoundArchiveFile.h:175
Definition SoundArchiveFile.h:118
u32 heapSize
Definition SoundArchiveFile.h:121
u32 stringId
Definition SoundArchiveFile.h:119
u8 playableSoundCount
Definition SoundArchiveFile.h:120
u32 bankId
Definition SoundArchiveFile.h:64
u8 releasePriorityFix
Definition SoundArchiveFile.h:67
u8 channelPriority
Definition SoundArchiveFile.h:66
u32 allocTrack
Definition SoundArchiveFile.h:65
u32 dataOffset
Definition SoundArchiveFile.h:63
u32 flags
Definition SoundArchiveFile.h:85
u8 decayCurve
Definition SoundArchiveFile.h:86
u8 decayRatio
Definition SoundArchiveFile.h:87
u16 strmChannelCount
Definition SoundArchiveFile.h:167
Util::DataRef< Sound3DParam > param3dRef
Definition SoundArchiveFile.h:95
u32 playerId
Definition SoundArchiveFile.h:93
u8 panCurve
Definition SoundArchiveFile.h:105
u32 fileId
Definition SoundArchiveFile.h:92
u8 panMode
Definition SoundArchiveFile.h:104
u8 remoteFilter
Definition SoundArchiveFile.h:99
u8 soundType
Definition SoundArchiveFile.h:98
u32 userParam[2]
Definition SoundArchiveFile.h:102
u32 stringId
Definition SoundArchiveFile.h:91
SoundInfoOffset soundInfoRef
Definition SoundArchiveFile.h:100
u8 playerPriority
Definition SoundArchiveFile.h:97
StringTable stringTable
Definition SoundArchiveFile.h:52
StringChunk stringChunk
Definition SoundArchiveFile.h:53
u32 playerTreeOffset
Definition SoundArchiveFile.h:45
u32 groupTreeOffset
Definition SoundArchiveFile.h:46
u32 soundTreeOffset
Definition SoundArchiveFile.h:44
u32 bankTreeOffset
Definition SoundArchiveFile.h:47
u32 tableOffset
Definition SoundArchiveFile.h:43
Util::Table< u32 > offsetTable
Definition SoundArchiveFile.h:39
u32 rightIdx
Definition SoundArchiveFile.h:28
u32 strIdx
Definition SoundArchiveFile.h:29
u16 flags
Definition SoundArchiveFile.h:25
u16 bit
Definition SoundArchiveFile.h:26
u32 id
Definition SoundArchiveFile.h:30
u32 leftIdx
Definition SoundArchiveFile.h:27
u32 rootIdx
Definition SoundArchiveFile.h:34
Util::Table< StringTreeNode > nodeTable
Definition SoundArchiveFile.h:35
ut::BinaryBlockHeader blockHeader
Definition SoundArchiveFile.h:58
StringBlock stringBlock
Definition SoundArchiveFile.h:59
u32 allocTrack
Definition SoundArchiveFile.h:76
s32 subNo
Definition SoundArchiveFile.h:75
u8 releasePriorityFix
Definition SoundArchiveFile.h:78
u8 channelPriority
Definition SoundArchiveFile.h:77
Definition binaryFileFormat.h:18
Definition binaryFileFormat.h:9
u16 version
Definition binaryFileFormat.h:12