/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #ifndef __AUDIOOGGSTREAM__ #define __AUDIOOGGSTREAM__ #include "filesystem/io_handle.h" #define STB_VORBIS_HEADER_ONLY #include "stb_vorbis.c" #undef STB_VORBIS_HEADER_ONLY #include "audio/stream_interface.h" #include "memory/ring_buffer.h" #include "memory/nauto_ptr.h" namespace GS { /* @short OGG audio stream. @author Emmanuel Julien (ejulien@nworks.fr) */ class AudioStreamOGG : public IAudioStream { protected: AutoPtr h; Array buffer; size_t byte_left; size_t RefillBuffer(); void ConsumeBuffer(size_t); int seek_correction, consumed, err; stb_vorbis_info vorbis_info; stb_vorbis *vf; public: /// Return the stream data format (eg. "OGG"). const char *GetFormat() { return "OGG"; } bool Seek(int t_ms = 0); bool IsEOF() const; size_t GetPCM(void *); size_t GetPCMBufferSize() const; bool Open(const char *uri); void Close(); AudioStreamOGG(); ~AudioStreamOGG(); }; } // GS #endif // __AUDIOOGGSTREAM__