281    class SoundArchiveFileReader
 
  286        SoundArchiveFileReader();
 
  287        ~SoundArchiveFileReader() {} 
 
  290        void Init(
void const *soundArchiveData);
 
  292        u16 GetVersion()
 const { 
return mHeader.fileHeader.version; }
 
  293        ulong GetLabelStringChunkOffset()
 const 
  295            return mHeader.symbolDataOffset;
 
  297        ulong GetLabelStringChunkSize()
 const { 
return mHeader.symbolDataSize; }
 
  298        ulong GetInfoChunkOffset()
 const { 
return mHeader.infoOffset; }
 
  299        ulong GetInfoChunkSize()
 const { 
return mHeader.infoSize; }
 
  301        char const *GetString(ulong 
id) 
const;
 
  302        SoundArchive::SoundType GetSoundType(ulong soundId) 
const;
 
  303        ulong GetSoundStringId(ulong 
id) 
const;
 
  304        ulong GetBankCount() 
const;
 
  305        ulong GetPlayerCount() 
const;
 
  306        ulong GetGroupCount() 
const;
 
  307        ulong GetFileCount() 
const;
 
  308        void const *GetPtrConst(
void const *base, ulong offset)
 const 
  313            return ut::AddOffsetToPtr(base, offset);
 
  316        void SetStringChunk(
void const *stringChunk, ulong stringChunkSize);
 
  317        void SetInfoChunk(
void const *infoChunk, ulong infoChunkSize);
 
  319        bool ReadSeqSoundInfo(ulong soundId,
 
  321        bool ReadStrmSoundInfo(ulong soundId,
 
  323        bool ReadWaveSoundInfo(ulong soundId,
 
  325        bool ReadSoundArchivePlayerInfo(
 
  334        bool ReadGroupItemInfo(ulong groupId, ulong index,
 
  339        bool ReadFilePos(ulong fileId, ulong index,
 
  343                                   char const *str) 
const;
 
  344        const char* GetSoundLabelString(ulong 
id) 
const;
 
  345        ulong GetSoundUserParam(ulong 
id) 
const;
 
  347        ulong ConvertLabelStringToSoundId(
const char* pLabel)
 const {
 
  348            return ConvertLabelStringToId(mStringTreeSound, pLabel);
 
  350        ulong ConvertLabelStringToPlayerId(
const char* pLabel)
 const {
 
  351            return ConvertLabelStringToId(mStringTreePlayer, pLabel);
 
  353        ulong ConvertLabelStringToGroupId(
const char* pLabel)
 const {
 
  354            return ConvertLabelStringToId(mStringTreeGroup, pLabel);
 
  356        ulong ConvertLabelStringToBankId(
const char* pLabel)
 const {
 
  357            return ConvertLabelStringToId(mStringTreeBank, pLabel);
 
  361        static bool IsValidFileHeader(
void const *soundArchiveData);
 
  364            ulong soundId) 
const;
 
  366            ulong soundId) 
const;
 
  368            ulong soundId) 
const;
 
  370            ulong soundId) 
const;
 
  372        bool impl_GetSoundInfoOffset(
 
  373            ulong soundId, SoundArchiveFile::SoundInfoRef *soundInfoRef) 
const;
 
  378            ulong playerId) 
const;
 
  384        static u16 
const SUPPORTED_FILE_VERSION = NW4R_FILE_VERSION(1, 4);
 
  390        void                            const *mStringBase;