//##CLASS////////////////////////////////////////////////////////////
//Programming		:	Satoshi Fujiwara.
//Project Name	:	GENX
//File			:	GDSoundEffect.h
//Content 		:	サウンド基底クラス
//Implementaion	:	GDSoundEffect.h
//##CLASS_END/////////////////////////////////////////////////////////
#include "GDSound.h"
#include "stdio.h"

#ifndef _GDSOUNDEFFECT
#define _GDSOUNDEFFECT
//ウェーブデータ保持バッファの総数
#define WAVEDATA_MAX	32
//再生用バッファの数
#define SOUNDBUFFER_MAX  8	
//////////////////////////////////////////////////////////////////////////////////
// GDSoundEffect Class
//////////////////////////////////////////////////////////////////////////////////
class GDSoundEffect : public GDSound
{
private:
	//ウェーブデータを保持するバッファ//
	LPDIRECTSOUNDBUFFER pWaveData[WAVEDATA_MAX];
	//ウェーブ再生用バッファ（8チャンネル)//
	LPDIRECTSOUNDBUFFER pSoundBuffer[SOUNDBUFFER_MAX];
	//Waveデータファイル名を保持する配列//
	char WavFileName[WAVEDATA_MAX][32];
	//実際に読みこまれたウェーブデータの数//
	int effectcount;
	//ウェーブ再生用シリアル値//
	int serial;		
		/*ウェーブ再生用バッファを使用するたびに+1されます。どのバッファが一番長く使
		用されているかを検出するときに使用されます。
		*/
	//ウェーブ再生用チャネル毎にserial値を保持するカウンタ配列//
	BOOL usecount[SOUNDBUFFER_MAX];
	//ウェーブデータがロードされたかどうかを判別するためのフラグ//
	BOOL fWaveLoad;
	//シリアル値を取得するためのプライベート関数//
	int GetSerial(void){serial++;if(!serial) serial = 1;return serial;};
	BOOL bEffect;
public:
	//コンストラクタ//
	GDSoundEffect(void);
	//デストラクタ//
	~GDSoundEffect(void);
	//初期化//
	HRESULT Init(void);
	//ウェーブデータリスト(テキストファイル)から、ウェーブファイル(.WAVフォーマット）を読み出す。//
	BOOL	Load(char *szFileName);
	//##FUNC///////////////////////////////////////////////////////////////////////
	//Function Name		void	Play(int SoundBufferNumber,long volume,long pan);
	//Input Value		int SoundBufferNumber	;ウェーブデータ番号
	//					long volume				;ボリューム（音量）
	//					long pan				;パンニング（定位）
	//Return Value 		NONE	
	//Purpose			ウェーブデータを再生する
	//##FUNC_END///////////////////////////////////////////////////////////////////
	void Play(int SoundBufferNumber,long volume = DSBVOLUME_MAX,long pan = DSBPAN_CENTER);
	//サウンドバッファをリリースする//
	void	Release(void);
	//ウェーブデータがロードされたどうかを判別する//
	BOOL	isLoad(void){return fWaveLoad;};
	BOOL	IsEnabled(void){return bEffect;};
	BOOL	Enable(void){
		if(isSoundSupport()){
			bEffect = TRUE;
			return TRUE;
		} else {
			bEffect = FALSE;
			return FALSE;
		}
		
	}
	void Disable(void){
		bEffect = FALSE;
		for(int i = 0;i < SOUNDBUFFER_MAX;i++){
			if(pSoundBuffer[i]){
				pSoundBuffer[i]->Stop();
			}
		}
	}
};
#endif



