The length of time for which a waveform will play is determined by the data size and the format. The data size and format can be retrieved by using the CWaveFile::GetSize and CWaveFile::GetFormat methods in the DirectSound samples.
The following example function returns the duration of a WAV file, in milliseconds:
DWORD GetSoundLength(LPSTR strFileName) { CWaveFile* pWav; DWORD dwLen = 0; DWORD dwSize; WAVEFORMATEX* wfx; pWav = new CWaveFile(); if (SUCCEEDED(pWav->Open(strFileName, NULL, WAVEFILE_READ))) { wfx = pWav->GetFormat(); dwSize = pWav->GetSize(); dwLen = (DWORD) (1000 * dwSize / wfx->nAvgBytesPerSec); pWav->Close(); } if (pWav) delete pWav; return dwLen; }
CWaveFile Sample Class, DirectSound Sample Utility Classes, Reading WAV Data