};
+/**
+Decoder for MPEG-2 audio files, a.k.a. MP2 and MP3 files. Normally you should
+use one of the SoundDecoder::open_* functions to create a decoder.
+*/
class Mp3Decoder: public SoundDecoder
{
private:
};
+/**
+Decoder for Ogg Vorbis files. Normally you should use one of the
+SoundDecoder::open_* functions to create a decoder.
+*/
class OggDecoder: public SoundDecoder
{
private:
/**
-This class facilitates loading sound files. Currently only Ogg Vorbis is
-supported.
+Base class for sound decoders.
*/
class SoundDecoder
{
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 &);
+ /** 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; }
};