⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directsound.h

📁 著名的任天堂FC游戏机模拟器VirtuaNes 085版的源码!
💻 H
字号:
//
// DirectSound class
//
#ifndef	__DIRECTSOUND_INCLUDED__
#define	__DIRECTSOUND_INCLUDED__

#define	WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <mmsystem.h>

#define DIRECTSOUND_VERSION	0x0700
#include <dsound.h>

#include "extsoundfile.h"

#include "typedef.h"
#include "macro.h"

class	CWaveData
{
public:
	CWaveData();
	virtual	~CWaveData();

	BOOL		Load( LPCSTR szFileName );
	void		Free();

	DWORD		GetSize();
	WAVEFORMATEX*	GetFormat();
	LPVOID		GetData();
protected:
	LPVOID		m_pBuffer;

	WAVEFORMATEX*	m_pwfex;
	DWORD		m_dwSize;

	LPVOID		m_pData;

private:
};

class	CDirectSound
{
public:
	// 僷僽儕僢僋儊儞僶曄悢
	typedef	struct	tagSAMPLERATE {
		DWORD	Rate;
		DWORD	Bits;
	} SAMPLERATE, *LPSAMPLERATE;

	SAMPLERATE		m_SampleRate;		// 尰嵼僒儞僾儕儞僌儗乕僩
	INT			m_BufferSize;		// 僶僢僼傽僒僀僘(僼儗乕儉悢)
	static	SAMPLERATE	m_SampleRateTable[];	// 僒儞僾儕儞僌儗乕僩僥乕僽儖
	static	INT		m_BufferSizeTable[];	// 僶僢僼傽僒僀僘僥乕僽儖

	// 僷僽儕僢僋儊儞僶娭悢
	CDirectSound();
	virtual ~CDirectSound();

	BOOL	InitialDSound( HWND hWnd );
	void	ReleaseDSound();

	BOOL	InitialBuffer();
	void	ReleaseBuffer();

	BOOL	SetSamplingRate( DWORD rate, DWORD bits );
	void	GetSamplingRate( DWORD& rate, DWORD& bits );

	void	SetBufferSize( INT nSize ) { m_BufferSize = nSize; }
	INT	GetBufferSize()		   { return m_BufferSize; }

	BOOL	IsStreamPlaying() { return (m_bStreamPlay&&!m_bStreamPause); }
	void	StreamPlay();
	void	StreamStop();
	void	StreamPause();
	void	StreamResume();

	BOOL	GetStreamLockPosition( LPDWORD lpdwStart, LPDWORD lpdwSize );
	BOOL	StreamLock( DWORD dwWriteCursor, DWORD dwWriteBytes, LPVOID* lplpvPtr1, LPDWORD lpdwBytes1, LPVOID* lplpvPtr2, LPDWORD lpdwBytes2, DWORD dwFlags );
	BOOL	StreamUnlock( LPVOID lpvPtr1, DWORD dwBytes1, LPVOID lpvPtr2, DWORD dwBytes2 );

	BOOL	IsStreamPlay() { return m_bStreamPlay; }
	BOOL	IsStreamPause() { return m_bStreamPause; }

	// 奜晹壒惡僼傽僀儖懳墳
	BOOL	LoadEsf( LPCSTR szFileName, INT no );
	BOOL	EsfPlay( INT no );
	BOOL	EsfPlayLoop( INT no );
	BOOL	EsfStop( INT no );
	void	EsfAllStop();
	BOOL	CreateESFBuffer( INT no, WAVEFORMATEX* pwfex, LPVOID pData, DWORD dwSize );
	void	ReleaseEsfBuffer();

protected:
	// 僾儘僥僋僩儊儞僶曄悢
	HWND	m_hWnd;		// Window handle

	LPDIRECTSOUND		m_lpDS;		// DirectSound僆僽僕僃僋僩
	LPDIRECTSOUNDBUFFER	m_lpDSPrimary;	// 僾儔僀儅儕僆僽僕僃僋僩

	LPDIRECTSOUNDBUFFER	m_lpDSStream;		// 僗僩儕乕儈儞僌僆僽僕僃僋僩

	DWORD			m_dwDSBufferSize;
	DWORD			m_dwDSBlockSize;	// 1僽儘僢僋偺僒僀僘
	DWORD			m_dwDSBlockNum;		// 僽儘僢僋偺悢
	DWORD			m_dwDSLastBlock;	// 嵟屻偵彂偒崬傫偩僽儘僢僋埵抲

	volatile BOOL		m_bStreamPlay;	// 僗僩儕乕儉嵞惗拞僼儔僌
	volatile BOOL		m_bStreamPause;	// 僗僩儕乕儉億乕僘僼儔僌

	// 奜晹壒惡僼傽僀儖懳墳
	CWaveData		m_EsfWaveFile[ ESF_FILE_MAX ];
	LPDIRECTSOUNDBUFFER	m_pEsfDSBuffer[ ESF_FILE_MAX ];

	// 僾儘僥僋僩儊儞僶娭悢
private:
	// 僾儔僀儀乕僩儊儞僶曄悢
	// 僾儔僀儀乕僩儊儞僶娭悢
};

extern	CDirectSound	DirectSound;

#endif	// !__DIRECTSOUND_INCLUDED__

⌨️ 快捷键说明

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