/**
 * @file SoundImpl.h
 * @brief Sound関連の実装クラス・それに関する定数定義などを行う。
 * 
 * DirectSound DirectMusic を使用して実装しています。
 * @author S.F.
 * @version $Id:
 *
 * Copyright (C) 2000-2002 Satoshi Fujiwara. All Rights Reserved.
 */

/// 二重インクルード防止マクロ
#if !defined(AFX_SoundImpl_H__B9EEAB2E_EC73_44E2_A74F_3BE8E7E64310__INCLUDED_)
#define AFX_SoundImpl_H__B9EEAB2E_EC73_44E2_A74F_3BE8E7E64310__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "sf.h"
#include "Sound.h"
#include "boost/shared_ptr.hpp"
#include "boost/array.hpp"
extern "C" {
namespace sf{
	namespace system {
		namespace sound {
			
			const int Q_MAX = 32;///< サウンドキューバッファの数

			/** Soundインターフェースの実装クラス
			 */
			class SoundImpl : public Sound  
			{
				// LIFECYCLE
			public:
				/// コンストラクタ
				SoundImpl();
				/// デストラクタ
				virtual ~SoundImpl();
				// OPERATORS //
				// OPERATIONS //
				void load(const int objNo,const char * const pFileName);
				const int load(const char * const pFileName);
				void unload();
				// サウンドの再生
				void play(const int ObjNo,const DWORD Repeat,const bool bPrimary,const bool bSync);
				void stop(const int ObjNo = 0);
				void update();
				// ACCESS //
				void masterVolume(const int value); 
				const int masterVolume() const;
				void volumeMax(const int value);
				const int volumeMax() const; 
				// INQUIRY //
				const bool isEnabled(void) const;
				// 初期化
				void initialize(void);

			private:

				struct impl;
				boost::shared_ptr<impl> impl_;

			};// SoundImpl

		}// sound
	}// system
}// sound
}
#endif // !defined(AFX_SoundImpl_H__B9EEAB2E_EC73_44E2_A74F_3BE8E7E64310__INCLUDED_)
