md_sound.h

来自「MDEngine2plus游戏开发库! 用来开发游戏超级简单!」· C头文件 代码 · 共 98 行

H
98
字号
//********************************************************************
//						MD 引擎 声音 内核部件的定义
//		Powered by @J--S Studio			Johnhans		2002.7.15
//********************************************************************

#ifndef	MD_SOUND_H
#define	MD_SOUND_H

#ifdef MDENGINE2P_EXPORTS
#define MDENGINE_API __declspec(dllexport)
#else
#define MDENGINE_API __declspec(dllimport)
#endif

#include "MD_Audio.h"

// 声音PAN [ -1.0 ~ 1.0 ] 之间
// 声音VOL [ 0 ~ 1.0 ] 之间

class CSoundBase;

class MDENGINE_API CMD_Sound
{
public:
	CMD_Sound();
	CMD_Sound(char* Provider);
	virtual ~CMD_Sound();
	static void SetActiveAudio(CMD_Audio* Audio) { m_lpAudio=Audio;}

public:
	bool ConnectProvider(char *Provider);
	void FreeProvider();

	bool Create(TCHAR *FileName,BYTE mode=SOUND_STREAM);
	bool Create(LPVOID buffer,DWORD bufsize,BYTE mode=SOUND_STREAM);
	bool Create(HANDLE handle,BYTE mode=SOUND_STREAM);
	bool Create(WAVEFORMATEX *wfex,LPBYTE pdata,DWORD bufsize);
	bool SetVolume(float Volume);
	float GetVolume(void);
	bool SetPan(float Pan);
	float GetPan(void);
	bool SetFrequency(DWORD freq);
	DWORD GetFrequency(void);
	DWORD GetSamplesPerSec(void) { return m_SamplesPerSec;}
	bool Play(bool bLoop=false,bool bRestart=true);
	void Pause(bool pause);
	bool IsPlaying(void);
	void Free(void);
	void Stop(void);

private:
	static CMD_Audio*		m_lpAudio;
	HINSTANCE				m_hInstProvider;
	CSoundBase				*m_pLoader;
	LPVOID					releaseDLL;
	LPDIRECTSOUNDBUFFER		m_lpDSBuffer;
	LPDIRECTSOUNDNOTIFY		m_lpDSNotify;
	HANDLE					m_hEvent[2];
	HANDLE					m_hFillDataThread;

	DWORD					m_dwNextWriteOffset;
	DWORD					m_SamplesPerSec;
	DWORD					m_dwBufferSize;		// DS Buffer Size
	DWORD					m_dwNotifySize;		// DS NotifySize (m_dwBufferSize/2)
	bool					m_bPartA;			// Write Position
	BYTE					m_Mode;				// 当前创建的模式:流、3D
	BYTE					m_LastStat;			// PAUSE 前的播放状态

	DWORD					m_dwErrorCode;
private:
	bool create(WAVEFORMATEX *wfex,LPBYTE pdata,DWORD bufsize);
	bool create(LPVOID loader,BYTE mode = SOUND_STREAM);
	bool createNotify();
	bool streamFillData();

	friend DWORD WINAPI FillDataProc(LPVOID lpParameter);
};


class CSoundBase
{
public:
	virtual bool  Open(char *filename) = 0;
	virtual bool  Open(HANDLE file) = 0;
	virtual bool  Open(LPVOID buffer,DWORD buflen) = 0;
	virtual void  Close(void) = 0;
	virtual DWORD ReadData(LPVOID buffer, DWORD buflen) = 0;
	virtual bool  ResetPosition(void) = 0;

	virtual WAVEFORMATEX* GetWaveHeader(void){ return m_pWaveFormatEx; }
	virtual DWORD GetWaveSize(void){ return m_dwSize; }

protected:
	WAVEFORMATEX *m_pWaveFormatEx;
	DWORD         m_dwSize;
};

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?