50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// 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
 | 
						|
 |