static BOOL ParseData( const uint8* data, DSBUFFERDESC* dsBD, BYTE ** pbWaveData ) { //Parse the Data memset(dsBD, 0, sizeof(DSBUFFERDESC)); dsBD->dwSize = sizeof(DSBUFFERDESC); dsBD->dwFlags = DSBCAPS_STATIC | DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY; if (!DSParseWaveResource(data, &dsBD->lpwfxFormat, pbWaveData, &dsBD->dwBufferBytes)) { geErrorLog_Add(GE_ERR_INVALID_WAV, NULL); return FALSE; } return( TRUE ); }
BOOL DSGetWaveResource(HMODULE hModule, LPCTSTR lpName, WAVEFORMATEX **ppWaveHeader, BYTE **ppbWaveData, DWORD *pcbWaveSize) { HRSRC hResInfo; HGLOBAL hResData; void *pvRes; if (((hResInfo = FindResource(hModule, lpName, c_szWAV)) != NULL) && ((hResData = LoadResource(hModule, hResInfo)) != NULL) && ((pvRes = LockResource(hResData)) != NULL) && DSParseWaveResource(pvRes, ppWaveHeader, ppbWaveData, pcbWaveSize)) { return TRUE; } return FALSE; }
/////////////////////////////////////////////////////////////////////////////// // // DSGetWaveFile // /////////////////////////////////////////////////////////////////////////////// BOOL DSGetWaveFile(HMODULE hModule, LPCTSTR lpName, WAVEFORMATEX **ppWaveHeader, BYTE **ppbWaveData, DWORD *pcbWaveSize, void **ppvBase) { void *pvRes; HANDLE hFile, hMapping; *ppvBase = NULL; hFile = CreateFile (lpName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) return FALSE; hMapping = CreateFileMapping (hFile, NULL, PAGE_READONLY, 0, 0, NULL); if (hMapping == INVALID_HANDLE_VALUE) { CloseHandle (hFile); return FALSE; } CloseHandle (hFile); pvRes = MapViewOfFile (hMapping, FILE_MAP_READ, 0, 0, 0); if (pvRes == NULL) { CloseHandle (hMapping); return FALSE; } CloseHandle (hMapping); if (DSParseWaveResource(pvRes, ppWaveHeader, ppbWaveData, pcbWaveSize) == FALSE) { UnmapViewOfFile (pvRes); return FALSE; } *ppvBase = pvRes; return TRUE; }