1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: snd_MemorySoundArchive.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision:$ 14 *---------------------------------------------------------------------------*/ 15 16 /** 17 * :include nw/snd/snd_MemorySoundArchive.h 18 * 19 * @file snd_MemorySoundArchive.h 20 */ 21 22 #ifndef NW_SND_MEMORY_SOUND_ARCHIVE_H_ 23 #define NW_SND_MEMORY_SOUND_ARCHIVE_H_ 24 25 #include <nw/snd/snd_SoundArchiveFileReader.h> 26 #include <nw/io/io_FileStream.h> 27 28 namespace nw { 29 namespace snd { 30 31 //--------------------------------------------------------------------------- 32 //! @brief メモリ上にあるサウンドアーカイブを扱うクラスです。 33 //! 34 //! MemorySoundArchive クラスでは、 35 //! サウンドアーカイブから外部参照されているデータを扱うことができません。 36 //! 外部参照データの再生は必ず失敗します。 37 //! 38 //! サウンドアーカイブ内に波形データ (波形アーカイブ) が含まれている場合、 39 //! そのサウンドアーカイブはデバイスメモリ上にロードしておく必要があります。 40 //! 41 //! @date 2010/04/30 サウンドアーカイブをデバイスメモリ上にロードしておく必要がある旨、追記 42 //! @date 2010/01/15 初版 43 //--------------------------------------------------------------------------- 44 class MemorySoundArchive : public SoundArchive 45 { 46 private: 47 class MemoryFileStream; 48 49 public: 50 //---------------------------------------- 51 //! @name コンストラクタ / デストラクタ 52 //@{ 53 //! コンストラクタです。 54 MemorySoundArchive(); 55 //! デストラクタです。 56 virtual ~MemorySoundArchive(); 57 //@} 58 59 //---------------------------------------- 60 //! @name セットアップ 61 //@{ 62 63 //--------------------------------------------------------------------------- 64 //! @brief メモリ上のサウンドアーカイブデータを初期化します。 65 //! 66 //! サウンドアーカイブ内に波形データ (波形アーカイブ) が含まれている場合、 67 //! そのサウンドアーカイブはデバイスメモリ上にロードしておく必要があります。 68 //! 69 //! @param[in] soundArchiveData サウンドアーカイブデータのアドレス。 70 //! 71 //! @see Finalize 72 //! 73 //! @date 2010/04/30 サウンドアーカイブをデバイスメモリ上にロードしておく必要がある旨、追記 74 //! @date 2010/02/01 関数名変更 (Setup → Initialize) 75 //! @date 2010/01/15 初版 76 //--------------------------------------------------------------------------- 77 bool Initialize( const void* soundArchiveData ); 78 79 //--------------------------------------------------------------------------- 80 //! @brief メモリ上のサウンドアーカイブデータを破棄します。 81 //! 82 //! @see Initialize 83 //! 84 //! @date 2010/02/01 関数名変更 (Shutdown → Finalize) 85 //! @date 2010/01/15 初版 86 //--------------------------------------------------------------------------- 87 void Finalize(); 88 //@} 89 90 //! @details :private 91 virtual size_t detail_GetRequiredStreamBufferSize() const; 92 93 //! @details :private 94 virtual const void* detail_GetFileAddress( FileId fileId ) const; 95 96 protected: 97 98 //! @details :private 99 virtual io::FileStream* OpenStream( void* buffer, int size, u32 begin, u32 length ); 100 101 //! @details :private 102 virtual io::FileStream* OpenExtStream( 103 void* buffer, 104 int size, 105 const char* extFilePath, 106 // const wchar_t* extFilePath, 107 u32 begin, 108 u32 length ) const; 109 110 private: 111 const void* m_pData; 112 internal::SoundArchiveFileReader m_FileReader; 113 }; 114 115 //! @details :private 116 class MemorySoundArchive::MemoryFileStream : public io::FileStream 117 { 118 public: 119 MemoryFileStream( const void* buffer, u32 size ); 120 CanSeek()121 virtual bool CanSeek() const { return true; } CanCancel()122 virtual bool CanCancel() const { return true; } CanAsync()123 virtual bool CanAsync() const { return false; } CanRead()124 virtual bool CanRead() const { return true; } CanWrite()125 virtual bool CanWrite() const { return false; } 126 127 virtual void Close(); 128 virtual s32 Read( void* buf, u32 length ); 129 virtual void Seek( s32 offset, u32 origin ); Tell()130 virtual u32 Tell() const { return m_Position; } GetSize()131 virtual u32 GetSize() const { return m_Size; } 132 133 private: 134 const void* m_pBuffer; 135 u32 m_Size; 136 u32 m_Position; 137 }; 138 139 } // namespace nw::snd 140 } // namespace nw 141 142 143 #endif /* NW_SND_MEMORY_SOUND_ARCHIVE_H_ */ 144 145