Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
StrmFile.h
Go to the documentation of this file.
1#ifndef NW4HBM_SND_STRM_FILE_H
2#define NW4HBM_SND_STRM_FILE_H
3
4#include <revolution/os.h>
5#include <revolution/types.h>
6
7#include <revolution/hbm.h>
8
9#include "Util.h"
10#include "snd_global.h"
11
12#include "../ut/FileStream.h"
14
15namespace nw4hbm {
16 namespace snd {
17 namespace detail {
18 namespace StrmFile {
19
20 static const u32 SIGNATURE_FILE = 'RSTM';
21 static const u32 SIGNATURE_HEAD_BLOCK = 'HEAD';
22 static const int FILE_VERSION = NW4HBM_VERSION(1, 0);
23
24 typedef struct StrmDataInfo {
25 /* 0x00 */ u8 format;
26 /* 0x01 */ u8 loopFlag;
27 /* 0x02 */ u8 numChannels;
28 /* 0x03 */ u8 sampleRate24;
29 /* 0x04 */ u16 sampleRate;
31 /* 0x08 */ u32 loopStart;
32 /* 0x0C */ u32 loopEnd;
33 /* 0x10 */ u32 dataOffset;
34 /* 0x14 */ u32 numBlocks;
35 /* 0x18 */ u32 blockSize;
36 /* 0x1C */ u32 blockSamples;
37 /* 0x20 */ u32 lastBlockSize;
41 /* 0x30 */ u32 adpcmDataSize;
43
44 typedef struct TrackInfo {
45 /* 0x00 */ u8 channelCount;
46 /* 0x01 */ u8 channelIndexTable[];
48
49 typedef struct TrackTable {
50 /* 0x00 */ u8 trackCount;
51 /* 0x01 */ u8 trackDataType;
54
58
63
64 typedef struct Header {
66 /* 0x10 */ u32 headBlockOffset;
67 /* 0x14 */ u32 headBlockSize;
68 /* 0x18 */ u32 adpcBlockOffset;
69 /* 0x1C */ u32 adpcBlockSize;
70 /* 0x20 */ u32 dataBlockOffset;
71 /* 0x24 */ u32 dataBlockSize;
73
80 } // namespace StrmFile
81
82 typedef struct StrmInfo {
83 /* 0x00 */ u8 format;
84 /* 0x01 */ u8 loopFlag;
85 /* 0x02 */ u8 numChannels;
86 /* 0x04 */ int sampleRate;
88 /* 0x0C */ u32 loopStart;
89 /* 0x10 */ u32 loopEnd;
90 /* 0x14 */ u32 dataOffset;
91 /* 0x18 */ u32 numBlocks;
92 /* 0x1C */ u32 blockSize;
93 /* 0x20 */ u32 blockSamples;
94 /* 0x24 */ u32 lastBlockSize;
98 /* 0x34 */ u32 adpcmDataSize;
100
102 public:
104
105 bool IsAvailable() const { return mHeader != NULL; }
106
107 bool IsValidFileHeader(const void* buffer);
108 void Setup(const void* buffer);
109
110 bool ReadStrmInfo(StrmInfo* strmInfo) const;
111 bool ReadAdpcmInfo(AdpcmInfo* adpcmInfo, int channels) const;
112
114 if (IsAvailable()) {
115 return mHeader->adpcBlockOffset;
116 }
117 return 0;
118 }
119
120 private:
121 /* 0x00 */ const StrmFile::Header* mHeader;
123 };
124
126 public:
127 explicit StrmFileLoader(ut::FileStream& rFileStream) : mStream(rFileStream) {}
128
130 bool ReadAdpcBlockData(u16* yn1, u16* yn2, int block, int channels);
131
132 bool ReadStrmInfo(StrmInfo* strmInfo) const {
133 if (!mReader.IsAvailable()) {
134 return false;
135 }
136 return mReader.ReadStrmInfo(strmInfo);
137 }
138
139 bool ReadAdpcmInfo(AdpcmInfo* adpcmInfo, int channel) const {
140 if (!mReader.IsAvailable()) {
141 return false;
142 }
143 return mReader.ReadAdpcmInfo(adpcmInfo, channel);
144 }
145
146 private:
147 static const int HEADER_ALIGNED_SIZE = OSRoundUp32B(sizeof(StrmFile::Header));
148
151 };
152 } // namespace detail
153 } // namespace snd
154} // namespace nw4hbm
155
156#endif
Definition StrmFile.h:125
bool ReadStrmInfo(StrmInfo *strmInfo) const
Definition StrmFile.h:132
StrmFileReader mReader
Definition StrmFile.h:150
ut::FileStream & mStream
Definition StrmFile.h:149
bool ReadAdpcBlockData(u16 *yn1, u16 *yn2, int block, int channels)
StrmFileLoader(ut::FileStream &rFileStream)
Definition StrmFile.h:127
bool ReadAdpcmInfo(AdpcmInfo *adpcmInfo, int channel) const
Definition StrmFile.h:139
bool LoadFileHeader(void *buffer, u32 size)
static const int HEADER_ALIGNED_SIZE
Definition StrmFile.h:147
Definition StrmFile.h:101
bool ReadAdpcmInfo(AdpcmInfo *adpcmInfo, int channels) const
void Setup(const void *buffer)
bool IsAvailable() const
Definition StrmFile.h:105
const StrmFile::Header * mHeader
Definition StrmFile.h:121
bool IsValidFileHeader(const void *buffer)
bool ReadStrmInfo(StrmInfo *strmInfo) const
u32 GetAdpcBlockOffset() const
Definition StrmFile.h:113
const StrmFile::HeadBlock * mHeadBlock
Definition StrmFile.h:122
Definition FileStream.h:9
static OSTime buffer
Definition ai.c:24
unsigned int size
Definition __os.h:106
unsigned long u32
Definition types.h:12
unsigned short int u16
Definition types.h:10
unsigned char u8
Definition types.h:8
struct nw4hbm::snd::detail::StrmFile::ChannelInfo ChannelInfo
struct nw4hbm::snd::detail::StrmFile::TrackInfo TrackInfo
struct nw4hbm::snd::detail::StrmFile::Header Header
static const u32 SIGNATURE_FILE
Definition StrmFile.h:20
struct nw4hbm::snd::detail::StrmFile::StrmDataInfo StrmDataInfo
struct nw4hbm::snd::detail::StrmFile::ChannelTable ChannelTable
struct nw4hbm::snd::detail::StrmFile::HeadBlock HeadBlock
static const int FILE_VERSION
Definition StrmFile.h:22
static const u32 SIGNATURE_HEAD_BLOCK
Definition StrmFile.h:21
struct nw4hbm::snd::detail::StrmFile::TrackTable TrackTable
struct nw4hbm::snd::detail::StrmInfo StrmInfo
Definition HBMAnmController.h:6
Definition snd_types.h:107
Util::DataRef< AdpcmInfo > refAdpcmInfo
Definition StrmFile.h:56
Util::DataRef< ChannelInfo > refChannelHeader[]
Definition StrmFile.h:61
u8 channelCount
Definition StrmFile.h:60
Util::DataRef< TrackTable > refTrackTable
Definition StrmFile.h:77
Util::DataRef< ChannelTable > refChannelTable
Definition StrmFile.h:78
ut::BinaryBlockHeader blockHeader
Definition StrmFile.h:75
Util::DataRef< StrmDataInfo > refDataHeader
Definition StrmFile.h:76
u32 adpcBlockOffset
Definition StrmFile.h:68
u32 headBlockOffset
Definition StrmFile.h:66
u32 dataBlockSize
Definition StrmFile.h:71
ut::BinaryFileHeader fileHeader
Definition StrmFile.h:65
u32 dataBlockOffset
Definition StrmFile.h:70
u32 headBlockSize
Definition StrmFile.h:67
u32 adpcBlockSize
Definition StrmFile.h:69
u32 adpcmDataSize
Definition StrmFile.h:41
u8 numChannels
Definition StrmFile.h:27
u32 lastBlockSize
Definition StrmFile.h:37
u32 adpcmDataInterval
Definition StrmFile.h:40
u32 loopEnd
Definition StrmFile.h:32
u32 numBlocks
Definition StrmFile.h:34
u32 blockSamples
Definition StrmFile.h:36
u32 blockSize
Definition StrmFile.h:35
u32 lastBlockSamples
Definition StrmFile.h:38
u32 loopStart
Definition StrmFile.h:31
u16 sampleRate
Definition StrmFile.h:29
u32 lastBlockPaddedSize
Definition StrmFile.h:39
u8 sampleRate24
Definition StrmFile.h:28
u32 dataOffset
Definition StrmFile.h:33
u16 blockHeaderOffset
Definition StrmFile.h:30
u8 channelCount
Definition StrmFile.h:45
u8 channelIndexTable[]
Definition StrmFile.h:46
u8 trackCount
Definition StrmFile.h:50
Util::DataRef< TrackInfo > refTrackHeader[]
Definition StrmFile.h:52
u8 trackDataType
Definition StrmFile.h:51
Definition StrmFile.h:82
u32 lastBlockSamples
Definition StrmFile.h:95
u32 numBlocks
Definition StrmFile.h:91
u32 loopEnd
Definition StrmFile.h:89
u32 loopStart
Definition StrmFile.h:88
u16 blockHeaderOffset
Definition StrmFile.h:87
int sampleRate
Definition StrmFile.h:86
u8 loopFlag
Definition StrmFile.h:84
u32 blockSize
Definition StrmFile.h:92
u8 numChannels
Definition StrmFile.h:85
u32 blockSamples
Definition StrmFile.h:93
u32 adpcmDataInterval
Definition StrmFile.h:97
u8 format
Definition StrmFile.h:83
u32 adpcmDataSize
Definition StrmFile.h:98
u32 lastBlockSize
Definition StrmFile.h:94
u32 dataOffset
Definition StrmFile.h:90
u32 lastBlockPaddedSize
Definition StrmFile.h:96
Definition binaryFileFormat.h:18
Definition binaryFileFormat.h:9