📄 directsound.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 + -