天天看點

聲音走樣

用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,如需轉載請自行聯系原作者

繼續閱讀