| 
 | 
 
只有1个类(方法已写好,可直接调用)
1、SoundWAV.cpp 
#include ".\soundwav.h"
SoundWAV::SoundWAV(void)
{
 volume = -1000;
 pan    = 0;
}
SoundWAV::~SoundWAV(void)
{
}
void SoundWAV: oadWAV(HWND hWnd, const char* szSoundFileName)
{
result = DirectSoundCreate( NULL, &pDS, NULL ); 
  if(result != DS_OK) MessageBox(hWnd,"建立 DirectSound 对象失败!","提示",MB_OK);
  result = pDS->SetCooperativeLevel( hWnd, DSSCL_PRIORITY );
  if(result != DS_OK) MessageBox(hWnd,"设置协调层级失败!","提示",MB_OK);
  memset( &dsdesc,0, sizeof(dsdesc) );       
  dsdesc.dwSize        = sizeof(dsdesc);       
  dsdesc.dwFlags       = DSBCAPS_PRIMARYBUFFER;
  dsdesc.dwBufferBytes = 0;
  dsdesc.lpwfxFormat   = NULL;
  result = pDS->CreateSoundBuffer( &dsdesc, &pPBuf, NULL );
  if(result != DS_OK) MessageBox(hWnd,"建立主缓冲区失败!","提示",MB_OK);
  memset( &pwfmt,0, sizeof(pwfmt) );
  pwfmt.wFormatTag      = WAVE_FORMAT_PCM;
  pwfmt.nChannels       = 2;              
  pwfmt.nSamplesPerSec  = 44100;       
  pwfmt.wBitsPerSample  = 16;           
  pwfmt.nBlockAlign     = pwfmt.wBitsPerSample / 8 * pwfmt.nChannels;
  pwfmt.nAvgBytesPerSec = pwfmt.nSamplesPerSec * pwfmt.nBlockAlign;
  result = pPBuf->SetFormat(&pwfmt);     
  if(result != DS_OK) MessageBox(hWnd,"设置播放格式失败!","提示",MB_OK);
  GetCurrentDirectory(MAX_PATH, strSoundPath);  
  strcat(strSoundPath, "\\music\\");
  strcat(strSoundPath, szSoundFileName);
  hmmio = mmioOpen(strSoundPath, NULL, MMIO_ALLOCBUF|MMIO_READ );
  if(hmmio == NULL) MessageBox(hWnd,"文件不存在!","提示",MB_OK);
  ckRiff.fccType = mmioFOURCC('W', 'A', 'V', 'E');
  mmresult = mmioDescend(hmmio,&ckRiff,NULL,MMIO_FINDRIFF);
  if(mmresult != MMSYSERR_NOERROR) MessageBox(hWnd,"文件格式错误!","提示",MB_OK);
  ckInfo.ckid = mmioFOURCC('f','m','t',' '); 
  mmresult = mmioDescend(hmmio,&ckInfo,&ckRiff,MMIO_FINDCHUNK);
  if(mmresult != MMSYSERR_NOERROR) MessageBox(hWnd,"文件格式错误!","提示",MB_OK);
  if(mmioRead(hmmio,(HPSTR)&swfmt,sizeof(swfmt)) == -1) MessageBox(hWnd,"读取格式失败!","提示",MB_OK);
  mmresult = mmioAscend(hmmio,&ckInfo,0);   
  ckInfo.ckid = mmioFOURCC('d','a','t','a');  
  mmresult = mmioDescend(hmmio,&ckInfo,&ckRiff,MMIO_FINDCHUNK);
  //搜寻区块
  if(mmresult != MMSYSERR_NOERROR) MessageBox(hWnd,"文件格式错误!","提示",MB_OK);
  size = ckInfo.cksize;                 
  memset( &dsdesc,0,sizeof(dsdesc));    
  dsdesc.dwSize  = sizeof(dsdesc);    
  dsdesc.dwFlags =   DSBCAPS_STATIC |DSBCAPS_CTRLPAN |DSBCAPS_CTRLVOLUME| DSBCAPS_GLOBALFOCUS;
  dsdesc.dwBufferBytes = size;      
  dsdesc.lpwfxFormat   = &swfmt;      
  result = pDS->CreateSoundBuffer( &dsdesc, &pSBuf, NULL );
  if(result != DS_OK) MessageBox(hWnd,"建立次缓冲区失败!","提示",MB_OK);
  result = pSBuf->Lock(0,size,&pAudio,&bytesAudio,NULL,NULL,NULL);
  if(result != DS_OK) MessageBox(hWnd,"锁定缓冲区失败!","提示",MB_OK);
  mmresult = mmioRead(hmmio,(HPSTR)pAudio,bytesAudio);
  if(mmresult == -1) MessageBox(hWnd,"读取声音文件失败!","提示",MB_OK);
  result = pSBuf->Unlock(pAudio,bytesAudio,NULL,NULL);
  if(result != DS_OK) MessageBox(hWnd,"解除锁定缓冲区失败!","提示",MB_OK);
  mmioClose(hmmio,0);
}
// 播放
void SoundWAV: lay()
{
 pSBuf->Stop();
 pSBuf->SetCurrentPosition(0); 
 pSBuf->SetVolume(volume);   
 pSBuf->SetPan(pan);         
 pSBuf->Play(0,0,0); 
}
// 停止
void SoundWAV::Stop()
{
 pSBuf->Stop();
}
// 循环
void SoundWAV::WAVLoop()
{
 pSBuf->Stop();
 pSBuf->SetCurrentPosition(0); 
 pSBuf->SetVolume(volume);  
 pSBuf->SetPan(pan);        
 pSBuf->Play(0,0,1); 
}
// 调大声音
void SoundWAV::WAVMAX()
{
 if(volume<=0) volume+=200;
  pSBuf->SetVolume(volume);
}
// 调小声音
void SoundWAV::WAVMIX()
{
 if(volume>=-2000) volume-=200;
  pSBuf->SetVolume(volume);
}
//左声道
void SoundWAV::WAVLEFT()
{
 pSBuf->SetPan(-10000);
}
// 右声道
void SoundWAV::WAVRIGHT()
{
 pSBuf->SetPan(10000);
}
// 双声道
void SoundWAV::WAVDOUBLE()
{
 pSBuf->SetPan(0);
}
2、soundwav.h
#pragma once
#include 
#include 
#pragma comment (lib,"dsound.lib")
#pragma comment (lib,"strmiids.lib")
class SoundWAV
{
private:
 LPDIRECTSOUND pDS;       
 LPDIRECTSOUNDBUFFER pPBuf; 
 LPDIRECTSOUNDBUFFER pSBuf;  
 WAVEFORMATEX pwfmt;         
 WAVEFORMATEX swfmt;      
 DSBUFFERDESC dsdesc;   
 MMCKINFO      ckRiff;   
 MMCKINFO      ckInfo;    
 MMRESULT   mmresult;  
 HMMIO hmmio;           
 DWORD size;           
 HRESULT result;        
 LPVOID pAudio;
 DWORD bytesAudio;
 CHAR  strSoundPath[MAX_PATH];
 int volume;
 int pan;
public:
 SoundWAV(void);
 ~SoundWAV(void);
 void LoadWAV(HWND hWnd, const char* szSoundFileName);
 void Play();    // 播放
 void Stop();    // 停止
 void WAVLoop(); // 循环 
 void WAVMAX();  // 调大声音
 void WAVMIX();  // 调小声音
 void WAVLEFT(); // 左声道
 void WAVRIGHT(); // 右声道
 void WAVDOUBLE();// 双声道
}; |   
 
 
 
 |