mirror of
https://github.com/zeldaret/ss
synced 2026-06-20 16:01:13 -04:00
108 lines
3.4 KiB
C++
108 lines
3.4 KiB
C++
#ifndef NW4R_SND_MEMORY_SOUND_ARCHIVE_H
|
|
#define NW4R_SND_MEMORY_SOUND_ARCHIVE_H
|
|
|
|
/*******************************************************************************
|
|
* headers
|
|
*/
|
|
|
|
#include "common.h"
|
|
|
|
// WARNING: DO NOT REORDER these #include directives, data pooling depends on it
|
|
|
|
// clang-format off
|
|
#include "nw4r/ut/ut_FileStream.h" // This needs to be
|
|
#include "nw4r/snd/snd_SoundArchive.h" // before this
|
|
// clang-format on
|
|
|
|
#include "nw4r/snd/snd_SoundArchiveFile.h"
|
|
|
|
/*******************************************************************************
|
|
* classes and functions
|
|
*/
|
|
|
|
namespace nw4r { namespace snd
|
|
{
|
|
// TODO: get a specific source (name, game id)
|
|
/* dwarfv1_megadump.txt:284789-284793
|
|
* This is the struct info for nw4hbm::snd::MemorySoundArchive from an
|
|
* older version of the HBM library that actually uses it, but it seems
|
|
* similar enough to the current version, so it is used as a reference here.
|
|
*/
|
|
class MemorySoundArchive : public SoundArchive
|
|
{
|
|
// nested types
|
|
private:
|
|
class MemoryFileStream;
|
|
|
|
// methods
|
|
public:
|
|
// cdtors
|
|
MemorySoundArchive();
|
|
virtual ~MemorySoundArchive();
|
|
|
|
// virtual function ordering
|
|
// vtable SoundArchive
|
|
virtual void const *detail_GetFileAddress(u32 fileId) const;
|
|
virtual void const *detail_GetWaveDataFileAddress(u32 fileId) const;
|
|
virtual int detail_GetRequiredStreamBufferSize() const;
|
|
virtual ut::FileStream *OpenStream(void *buffer, int size, u32 begin,
|
|
u32 length) const;
|
|
virtual ut::FileStream *OpenExtStream(void *buffer, int size,
|
|
char const *extFilePath,
|
|
u32 begin, u32 length) const;
|
|
|
|
// methods
|
|
bool Setup(void const *soundArchiveData);
|
|
void Shutdown();
|
|
|
|
// members
|
|
private:
|
|
/* base SoundArchive */ // size 0x108, offset 0x000
|
|
void const *mData; // size 0x004, offset 0x108
|
|
detail::SoundArchiveFileReader mFileReader; // size 0x044, offset 0x10c
|
|
}; // size 0x150
|
|
|
|
// NOTE: Must be completed after MemorySoundArchive for data ordering
|
|
// TODO: get a specific source (name, game id)
|
|
/* dwarfv1_megadump.txt:293462-293467
|
|
* This is the struct info for
|
|
* nw4hbm::snd::MemorySoundArchive::MemoryFileStream from an older version
|
|
* of the HBM library that actually uses it, but it seems similar enough to
|
|
* the current version, so it is used as a reference here.
|
|
*/
|
|
class MemorySoundArchive::MemoryFileStream : public ut::FileStream
|
|
{
|
|
// methods
|
|
public:
|
|
// cdtors
|
|
MemoryFileStream(void const *buffer, u32 size);
|
|
virtual ~MemoryFileStream() {}
|
|
|
|
// virtual function ordering
|
|
// vtable ut::IOStream
|
|
virtual void Close();
|
|
virtual s32 Read(void *buf, u32 length);
|
|
|
|
// vtable ut::FileStream
|
|
virtual void Seek(s32 offset, u32 origin);
|
|
|
|
// For instantiation ordering (WARNING: Do not rearrange)
|
|
virtual bool CanSeek() const { return true; }
|
|
virtual bool CanCancel() const { return true; }
|
|
virtual bool CanAsync() const { return false; }
|
|
virtual bool CanRead() const { return true; }
|
|
virtual bool CanWrite() const { return false; }
|
|
virtual u32 Tell() const { return mPosition; }
|
|
virtual u32 GetSize() const { return mSize; }
|
|
|
|
// members
|
|
private:
|
|
/* base ut::FileStream */ // size 0x14, offset 0x00
|
|
void const *mBuffer; // size 0x04, offset 0x14
|
|
u32 mSize; // size 0x04, offset 0x18
|
|
u32 mPosition; // size 0x04, offset 0x1c
|
|
}; // size 0x20
|
|
}} // namespace nw4r::snd
|
|
|
|
#endif // NW4R_SND_MEMORY_SOUND_ARCHIVE_H
|