ďťż

Ładny brzuch

Programuję w VC++ i DirectDraw, chciałem dodać do tego DirectSound i tu mam problem. Znalazłem kilka kursów jak zabrać się za DS ale w żadnym nie ma jak załadować dźwięk z pliku do adresu wskaźnika.

Załączam kod źródłowy, jast to funkcja tworząca bufor i ładująca dźwięk:

#include "sound.h" extern HWND Main_Wnd; int SOUND::DSC(int BYTES, char* plik) { DirectSoundCreate(NULL, &(this->DS), NULL); this->DS->SetCooperativeLevel(Main_Wnd, DSSCL_PRIORITY); ZeroMemory(&(this->dsbd), sizeof(this->dsbd)); this->dsbd.dwSize = sizeof(this->dsbd); this->dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER; this->DS->CreateSoundBuffer(&(this->dsbd), &(this->lpDSBGlowny), NULL); ZeroMemory(&(this->vfx), sizeof(this->vfx)); this->vfx.wFormatTag = WAVE_FORMAT_PCM; this->vfx.nChannels = 2; this->vfx.nSamplesPerSec = 22050; this->vfx.wBitsPerSample = 16; this->vfx.nBlockAlign =  this->vfx.wBitsPerSample / 8 * this->vfx.nChannels; this->vfx.nAvgBytesPerSec = this->vfx.nSamplesPerSec * this->vfx.nBlockAlign; this->lpDSBGlowny->SetFormat(&(this->vfx)); ZeroMemory(&(this->dsbd), sizeof(this->dsbd)); this->dsbd.dwSize = sizeof(this->dsbd); this->dsbd.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPOSITIONNOTIFY; this->dsbd.dwBufferBytes = BYTES; this->dsbd.lpwfxFormat = &(this->vfx); this->DS->CreateSoundBuffer(&(this->dsbd), &(this->lpDSBBufor), NULL); LPVOID pData; DWORD dwBytes; this->lpDSBBufor->Lock(0, NULL, &pData, &dwBytes, NULL, NULL, DSBLOCK_ENTIREBUFFER); //Tutaj muszę załadować plik wav pod adrez wkaźnika LPVOID this->lpDSBBufor->Unlock(pData, dwBytes, NULL, NULL); return true; }

Nie wiem jak to zrobić. Próbowałem ze strumieniami i plikami i nie wyszło. Może jest jakaś funkcja WinApi pozwalająca na załadowanie dźwięku?

Proszę o możliwie szybką pomoc.
I z góry dzięki.

#include <white_hawk>

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •