X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fsounddecoder.h;h=20b9d0fb7f4e3d6afa4bd2d9a3dc8806e5477c5e;hb=HEAD;hp=ee5b07d5f33abea2410dc95076f026c0586a1ffc;hpb=35b092aaa718dcb12933effd33324bda5d3b5cce;p=libs%2Fal.git diff --git a/source/sounddecoder.h b/source/sounddecoder.h index ee5b07d..20b9d0f 100644 --- a/source/sounddecoder.h +++ b/source/sounddecoder.h @@ -17,8 +17,7 @@ public: /** -This class facilitates loading sound files. Currently only Ogg Vorbis is -supported. +Base class for sound decoders. */ class SoundDecoder { @@ -34,15 +33,29 @@ protected: public: virtual ~SoundDecoder(); + /** Opens a file and creates a decoder of an appropriate type for it. */ static SoundDecoder *open_file(const std::string &); + + /** Creates a decoder for an already-opened audio file. */ static SoundDecoder *open_io(IO::Seekable &); - virtual void rewind() = 0; + /** Restarts decoding from the beginning of the file. */ + virtual void rewind() { seek(0); } + + /** Sets decoding position expressed in PCM bytes. This may involve seeking + to the beginning and skipping until the desired position is reached.*/ + virtual void seek(unsigned) = 0; + + /** Reads decoded sound data. Length is specified in bytes. */ virtual unsigned read(char *, unsigned) = 0; + bool eof() const { return eof_flag; } Format get_format() const { return format; } unsigned get_frequency() const { return freq; } + + /** Returns the total length of the sound data in bytes. Some decoders may + not be able to provide this information. */ unsigned get_size() const { return size; } };