/*---------------------------------------------------------------------------* Project: NintendoWare File: snd_MemorySoundArchive.h Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo and/or its licensed developers and are protected by national and international copyright laws. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. The content herein is highly confidential and should be handled accordingly. $Revision: $ *---------------------------------------------------------------------------*/ /** * :include nw/snd/snd_MemorySoundArchive.h * * @file snd_MemorySoundArchive.h */ #ifndef NW_SND_MEMORY_SOUND_ARCHIVE_H_ #define NW_SND_MEMORY_SOUND_ARCHIVE_H_ #include #include namespace nw { namespace snd { //--------------------------------------------------------------------------- //! @brief メモリ上にあるサウンドアーカイブを扱うクラスです。 //! //! MemorySoundArchive クラスでは、 //! サウンドアーカイブから外部参照されているデータを扱うことができません。 //! 外部参照データの再生は必ず失敗します。 //! //! サウンドアーカイブ内に波形データ (波形アーカイブ) が含まれている場合、 //! そのサウンドアーカイブはデバイスメモリ上にロードしておく必要があります。 //! //! @date 2010/04/30 サウンドアーカイブをデバイスメモリ上にロードしておく必要がある旨、追記 //! @date 2010/01/15 初版 //--------------------------------------------------------------------------- class MemorySoundArchive : public SoundArchive { private: class MemoryFileStream; public: //---------------------------------------- //! @name コンストラクタ / デストラクタ //@{ //! コンストラクタです。 MemorySoundArchive(); //! デストラクタです。 virtual ~MemorySoundArchive(); //@} //---------------------------------------- //! @name セットアップ //@{ //--------------------------------------------------------------------------- //! @brief メモリ上のサウンドアーカイブデータを初期化します。 //! //! サウンドアーカイブ内に波形データ (波形アーカイブ) が含まれている場合、 //! そのサウンドアーカイブはデバイスメモリ上にロードしておく必要があります。 //! //! @param[in] soundArchiveData サウンドアーカイブデータのアドレス。 //! //! @return 初期化に成功すれば true を、失敗すれば false を返します。 //! //! @see Finalize //! //! @date 2010/11/15 返り値の記述が無かったので追記 //! @date 2010/04/30 サウンドアーカイブをデバイスメモリ上にロードしておく必要がある旨、追記 //! @date 2010/02/01 関数名変更 (Setup → Initialize) //! @date 2010/01/15 初版 //--------------------------------------------------------------------------- bool Initialize( const void* soundArchiveData ); //--------------------------------------------------------------------------- //! @brief メモリ上のサウンドアーカイブデータを破棄します。 //! //! @see Initialize //! //! @date 2010/02/01 関数名変更 (Shutdown → Finalize) //! @date 2010/01/15 初版 //--------------------------------------------------------------------------- void Finalize(); //@} //! @details :private virtual size_t detail_GetRequiredStreamBufferSize() const; //! @details :private virtual const void* detail_GetFileAddress( FileId fileId ) const; protected: //! @details :private virtual io::FileStream* OpenStream( void* buffer, int size, u32 begin, u32 length ); //! @details :private virtual io::FileStream* OpenExtStream( void* buffer, int size, const char* extFilePath, // const wchar_t* extFilePath, u32 begin, u32 length ) const; private: const void* m_pData; internal::SoundArchiveFileReader m_FileReader; }; //! @details :private class MemorySoundArchive::MemoryFileStream : public io::FileStream { public: MemoryFileStream( const void* buffer, u32 size ); 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 void Close(); virtual s32 Read( void* buf, u32 length ); virtual void Seek( s32 offset, u32 origin ); virtual u32 Tell() const { return m_Position; } virtual u32 GetSize() const { return m_Size; } private: const void* m_pBuffer; u32 m_Size; u32 m_Position; }; } // namespace nw::snd } // namespace nw #endif /* NW_SND_MEMORY_SOUND_ARCHIVE_H_ */