Classes | Public Member Functions | List of all members
cpp3ds::SoundFileReader Class Referenceabstract

Abstract base class for sound file decoding. More...

#include <SoundFileReader.hpp>

Inherited by cpp3ds::priv::SoundFileReaderMp3, cpp3ds::priv::SoundFileReaderOgg, and cpp3ds::priv::SoundFileReaderWav.

Classes

struct  Info
 Structure holding the audio properties of a sound file. More...
 

Public Member Functions

virtual ~SoundFileReader ()
 Virtual destructor. More...
 
virtual bool open (InputStream &stream, Info &info)=0
 Open a sound file for reading. More...
 
virtual void seek (Uint64 sampleOffset)=0
 Change the current read position to the given sample offset. More...
 
virtual Uint64 read (Int16 *samples, Uint64 maxCount)=0
 Read audio samples from the open file. More...
 

Detailed Description

Abstract base class for sound file decoding.

This class allows users to read audio file formats not natively supported by cpp3ds, and thus extend the set of supported readable audio formats.

A valid sound file reader must override the open, seek and write functions, as well as providing a static check function; the latter is used by cpp3ds to find a suitable writer for a given input file.

To register a new reader, use the cpp3ds::SoundFileFactory::registerReader template function.

Usage example:

class MySoundFileReader : public cpp3ds::SoundFileReader
{
public:
static bool check(cpp3ds::InputStream& stream)
{
// typically, read the first few header bytes and check fields that identify the format
// return true if the reader can handle the format
}
virtual bool open(cpp3ds::InputStream& stream, Info& info)
{
// read the sound file header and fill the sound attributes
// (channel count, sample count and sample rate)
// return true on success
}
virtual void seek(cpp3ds::Uint64 sampleOffset)
{
// advance to the sampleOffset-th sample from the beginning of the sound
}
virtual cpp3ds::Uint64 read(cpp3ds::Int16* samples, cpp3ds::Uint64 maxCount)
{
// read up to 'maxCount' samples into the 'samples' array,
// convert them (for example from normalized float) if they are not stored
// as 16-bits signed integers in the file
// return the actual number of samples read
}
};
cpp3ds::SoundFileFactory::registerReader<MySoundFileReader>();
See also
cpp3ds::InputSoundFile, cpp3ds::SoundFileFactory, cpp3ds::SoundFileWriter

Definition at line 43 of file SoundFileReader.hpp.

Constructor & Destructor Documentation

virtual cpp3ds::SoundFileReader::~SoundFileReader ( )
inlinevirtual

Virtual destructor.

Definition at line 62 of file SoundFileReader.hpp.

Member Function Documentation

virtual bool cpp3ds::SoundFileReader::open ( InputStream stream,
Info info 
)
pure virtual

Open a sound file for reading.

The provided stream reference is valid as long as the SoundFileReader is alive, so it is safe to use/store it during the whole lifetime of the reader.

Parameters
streamSource stream to read from
infoStructure to fill with the properties of the loaded sound
Returns
True if the file was successfully opened
virtual Uint64 cpp3ds::SoundFileReader::read ( Int16 *  samples,
Uint64  maxCount 
)
pure virtual

Read audio samples from the open file.

Parameters
samplesPointer to the sample array to fill
maxCountMaximum number of samples to read
Returns
Number of samples actually read (may be less than maxCount)
virtual void cpp3ds::SoundFileReader::seek ( Uint64  sampleOffset)
pure virtual

Change the current read position to the given sample offset.

If the given offset exceeds to total number of samples, this function must jump to the end of the file.

Parameters
sampleOffsetIndex of the sample to jump to, relative to the beginning

The documentation for this class was generated from the following file: