#ifndef CSoundBuffer_h
#define CSoundBuffer_h 

/*!
 	@file
 	@brief	サウンドバッファ
 */
#include"../../../Setup/CompileMode.h"
#include<boost/smart_ptr.hpp>

namespace Maid
{

	/*!
	 	\class	ISoundBuffer CSoundBuffer.h
	 	\brief	サウンドバッファクラス
	 */
	class ISoundBuffer
	{
	public:
		virtual ~ISoundBuffer(){}	//!<	デストラクタ

		//! サウンドバッファの再生
		/*!
			バッファの終端までいくと停止するかスタートに戻るかは
			SetLoopState() 次第。
		 */
		virtual void Play()=0;


		//! 再生させているサウンドバッファを停止させる
		/*!
		 */
		virtual void Stop()=0;

		//! 現在のカーソルの位置の取得
		/*!
			@return 再生位置(ミリ秒)
		 */
		virtual unt GetPosition () const=0;

		//! 再生カーソルの位置の設定
		/*!
		 	@param	pos	[i ]	設定する再生カーソル(ミリ秒）
		 */
		virtual void SetPosition ( unt pos )=0;

		//! ループ位置の設定
		/*!
		 	@param	pos	[i ]	設定する場所(ミリ秒）
		 */
		virtual void SetLoopPosition ( unt pos )=0;

		enum
		{
			VOLUME_MIN = 0,
			VOLUME_MAX = 10000,
		};

		//! ボリュームの設定
		/*!
		 	@param	vol	[i ]	設定するボリューム( 0..min 10000..max )
		 */
		virtual void	SetVolume( int vol )=0;

		//! ボリュームの取得
		/*!
		 	@return ボリューム( 0..min 10000..max )
		 */
		virtual int	GetVolume() const=0;

		//! バッファは再生中か？
		/*!
		 	@return 再生中なら true
		 */
		virtual bool	IsPlay() const=0;

		//! ループ再生の設定
		/*!
		 	@param	IsLoop [i] true でループ再生させます
		 */
		virtual void	SetLoopState( bool IsLoop )=0;

		//! バッファの更新
		/*!
			@param	time	[i ]	更新する時間
		 */
		virtual void Update( unt time )=0;
	};

	typedef boost::shared_ptr<ISoundBuffer> SPSOUNDBUFFER;

}
#endif
