// Copyright (C) 2002-2018 Nikolaus Gebhardt // This file is part of the "irrKlang" library. // For conditions of distribution and use, see copyright notice in irrKlang.h #ifndef __I_IRRKLANG_AUDIO_STREAM_H_INCLUDED__ #define __I_IRRKLANG_AUDIO_STREAM_H_INCLUDED__ #include "ik_IRefCounted.h" #include "ik_SAudioStreamFormat.h" namespace irrklang { //! Reads and decodes audio data into an usable audio stream for the ISoundEngine class IAudioStream : public IRefCounted { public: //! destructor virtual ~IAudioStream() {}; //! returns format of the audio stream virtual SAudioStreamFormat getFormat() = 0; //! sets the position of the audio stream. /** For example to let the stream be read from the beginning of the file again, setPosition(0) would be called. This is usually done be the sound engine to loop a stream after if has reached the end. Return true if sucessful and 0 if not. \param pos: Position in frames.*/ virtual bool setPosition(ik_s32 pos) = 0; //! returns true if the audio stream is seekable /* Some file formats like (MODs) don't support seeking */ virtual bool getIsSeekingSupported() { return true; } //! tells the audio stream to read frameCountToRead audio frames into the specified buffer /** \param target: Target data buffer to the method will write the read frames into. The specified buffer will be at least getFormat().getFrameSize()*frameCountToRead bytes big. \param frameCountToRead: amount of frames to be read. \returns Returns amount of frames really read. Should be frameCountToRead in most cases. */ virtual ik_s32 readFrames(void* target, ik_s32 frameCountToRead) = 0; }; } // end namespace irrklang #endif