// DXDSound.h: interface for the CDXDSound class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DXDSOUND_H__2A938E2F_9E84_43A9_BA50_97C213559BC3__INCLUDED_)
#define AFX_DXDSOUND_H__2A938E2F_9E84_43A9_BA50_97C213559BC3__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "mydef.h"
#include "dsound.h"

// 음악재생에 필요한 최대 갯수 (배경 음악 같이 긴 것)..........
#define SBUFFER_MAX_NUM				100
#define EFFECT_MAX_NUM				50

struct SSBuffer
{
	char FileName[256];
	LPDIRECTSOUNDBUFFER pSBuffer;
	SSBuffer(){ pSBuffer=NULL; Release();}
	~SSBuffer(){ Release(); }
	void Release(){ SAFE_RELEASE(pSBuffer); ZeroMemory(FileName, 256); }
};

//DuplicateSoundBuffer
class CDXDSound  
{
public:
	CDXDSound();
	virtual ~CDXDSound();

	void ClassInit();
	void ClassRelease();

	LPDIRECTSOUND			m_pDSound;						// 다이렉트 사운드.
	SSBuffer				m_SSBuffer[SBUFFER_MAX_NUM];	// 파일버퍼.
	LPDIRECTSOUNDBUFFER		m_pEffect[EFFECT_MAX_NUM];
	
	long		m_Volume;		// 전체 볼륨.
	
	// 다이렉트 사운드의 초기화........
	bool DSoundCreate(HWND hwnd);

	// 버퍼 생성.
	bool FileLoad(long nBuffer, char *pFileName);
	bool SBufferCreate(long nBuffer, DWORD bufferSize, WAVEFORMATEX *pWfx);
	void SBufferRelease(long nBuffer);

	bool Restore(long nBuffer);

	// 사운드 컨트롤...
	void Play(long nBuffer, bool bLoofOn);				// 음악 연주. (볼륨은 기준 볼륨으로)
	void Effect(long nBuffer, long volume, long pan);	// 이펙트 음. 한번 실행하고 지움.
	void VolumeSet(long nPercent);
	void Stop(long nBuffer);
};
#endif // !defined(AFX_DXDSOUND_H__2A938E2F_9E84_43A9_BA50_97C213559BC3__INCLUDED_)
