用DirectSound播放聲音時發生聲音走樣,和MediaPlayer播放的效果完全不同,搞了半天,發現原來是聲音的采樣頻率不同所緻
// insert picture
再檢視了聲音檔案的屬性以後,應該正确的填充WAVEFORMATEX結構,隻有這樣才能正确的播放聲音檔案
WAVEFORMATEX wfx;
// Set up WAV format structure.
memset(&wfx, 0, sizeof(WAVEFORMATEX));
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = channel ;
wfx.wBitsPerSample = bitPerSecond;
wfx.nSamplesPerSec = samplePerSecond ;
wfx.nBlockAlign = wfx.nChannels * wfx.wBitsPerSample / 8 ;
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign ;
這裡可以是用帶預設參數(default argument)的函數,因為常見的聲音都是2聲道,16bit每秒,采樣率22.5kHz,是以将這些常用的資訊做成預設參數,如果有特殊的檔案,直接傳入參數即可
void Create(HWND hWnd, WCHAR *strWaveFile, WORD channel = 2, WORD bitPerSecond = 16, DWORD samplePerSecond = 22050) ;
常見檔案按如下方法建立
Create(hWnd, fileName) ;
特殊檔案,比如單聲道,8bit每秒,可按如下方法構造
Create(hWnd, fileName, 1, 8)
本文轉自zdd部落格園部落格,原文連結:http://www.cnblogs.com/graphics/archive/2010/05/03/1726818.html,如需轉載請自行聯系原作者