// ============================================================== // This file is part of Glest Shared Library (www.glest.org) // // Copyright (C) 2001-2008 MartiƱo Figueroa // // You can redistribute this code and/or modify it under // the terms of the GNU General Public License as published // by the Free Software Foundation; either version 2 of the // License, or (at your option) any later version // ============================================================== #ifndef _SHARED_SOUND_SOUNDFILELOADER_H_ #define _SHARED_SOUND_SOUNDFILELOADER_H_ #include #include #include "data_types.h" #include "factory.h" #include "leak_dumper.h" struct OggVorbis_File; using std::string; using std::ifstream; namespace Shared { namespace Sound { using Platform::uint32; using Platform::int8; using Util::MultiFactory; class SoundInfo; // ===================================================== // class SoundFileLoader // /// Interface that all SoundFileLoaders will implement // ===================================================== class SoundFileLoader { public: virtual ~SoundFileLoader() { } virtual void open(const string &path, SoundInfo *soundInfo) = 0; virtual uint32 read(int8 *samples, uint32 size) = 0; virtual void close() = 0; virtual void restart() = 0; virtual string getFileName() = 0; }; // ===================================================== // class WavSoundFileLoader // /// Wave file loader // ===================================================== class WavSoundFileLoader : public SoundFileLoader { private: static const int maxDataRetryCount = 10; string fileName; private: uint32 dataOffset; uint32 dataSize; uint32 bytesPerSecond; ifstream f; public: virtual void open(const string &path, SoundInfo *soundInfo); virtual uint32 read(int8 *samples, uint32 size); virtual void close(); virtual void restart(); virtual string getFileName() { return fileName; } }; // ===================================================== // class OggSoundFileLoader // /// OGG sound file loader, uses ogg-vorbis library // ===================================================== class OggSoundFileLoader : public SoundFileLoader { private: OggVorbis_File *vf; FILE *f; string fileName; public: OggSoundFileLoader(); virtual void open(const string &path, SoundInfo *soundInfo); virtual uint32 read(int8 *samples, uint32 size); virtual void close(); virtual void restart(); virtual string getFileName() { return fileName; } }; // ===================================================== // class SoundFileLoaderFactory // ===================================================== class SoundFileLoaderFactory : public MultiFactory { private: SoundFileLoaderFactory(); public: static SoundFileLoaderFactory * getInstance(); }; } }//end namespace #endif