wave datei abspielen
-
// CPP FILE #include"gidxsound.h" GidxSound::GidxSound() { lpDS = NULL; dsrval= NULL; } GidxSound::~GidxSound() { if(lpDS!=NULL) { lpDS->Release(); lpDS=NULL; } } bool GidxSound::InitSound(HWND hwnd) { dsrval = DirectSoundCreate(NULL, &lpDS, NULL); if(FAILED(dsrval)) { return false; } dsrval = lpDS->SetCooperativeLevel(hwnd, DSSCL_NORMAL); if(FAILED(dsrval)) { return false; } return TRUE; }//InitSound bool GidxSound::LoadSnd(const char* filename, LPDIRECTSOUNDBUFFER* lpDSB) { DSBUFFERDESC dsbd; BYTE *pDSBuffData; WAVEFORMATEX waveFormat; DWORD dwDataLength; PBYTE pbyWaveDaten; HRESULT dsrval; pbyWaveDaten = NULL; if(!GidxSound::WaveLaden(filename, &waveFormat, &dwDataLength,&pbyWaveDaten))return false; ZeroMemory(&dsbd,sizeof(DSBUFFERDESC)); dsbd.dwSize = sizeof(DSBUFFERDESC); dsbd.dwFlags = DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY | DSBCAPS_STATIC; dsbd.dwBufferBytes = dwDataLength; dsbd.lpwfxFormat = &waveFormat; dsrval = lpDS->CreateSoundBuffer(&dsbd, &(*lpDSB), NULL); if (FAILED(dsrval)) { return false; } dsrval = (*lpDSB)->Lock(0,dwDataLength,(LPVOID *)&pDSBuffData, &dwDataLength,NULL,0,0); if (FAILED(dsrval)) { return false; } memcpy(pDSBuffData,pbyWaveDaten,dwDataLength); free(pbyWaveDaten); dsrval = (*lpDSB)->Unlock(pDSBuffData,dwDataLength,NULL,0); if (FAILED(dsrval)) { return false; } return TRUE; }//LoadSnd bool GidxSound::PlaySnd(LPDIRECTSOUNDBUFFER lpDSB, long pan, long vol) { if(pan<-10000 && pan> 10000) pan=0; if(lpDSB) { lpDSB->SetPan(pan); lpDSB->SetVolume(vol); lpDSB->Play(0,0,0); } return true; } // PlaySnd void GidxSound::StopSnd(LPDIRECTSOUNDBUFFER lpDSB) { lpDSB->Stop(); }// StopSnd void GidxSound::Pan(LPDIRECTSOUNDBUFFER lpDSB, long pan) { if(pan<-10000 && pan> 10000) pan=0; lpDSB->SetPan(pan); }//Pan bool GidxSound::WaveDaten(HMMIO hmmio, DWORD *pdwLaenge, PBYTE* ppbyWDat) { MMCKINFO mmWave; MMCKINFO mmData; MMRESULT mmResult; ZeroMemory(&mmWave, sizeof(mmWave)); ZeroMemory(&mmData, sizeof(mmData)); mmResult = mmioSeek(hmmio, 0, SEEK_SET); mmWave.fccType = mmioStringToFOURCC("WAVE", 0); mmData.ckid = mmioStringToFOURCC("data", 0); mmResult = mmioDescend(hmmio,&mmWave,NULL,MMIO_FINDRIFF); if(FAILED(mmResult)) { return FALSE; } mmResult = mmioDescend(hmmio,&mmData,&mmWave,MMIO_FINDCHUNK); if(FAILED(mmResult)) { return FALSE; } *pdwLaenge = mmData.cksize; *ppbyWDat = (PBYTE)malloc(*pdwLaenge); if(!*ppbyWDat) { return FALSE; } ZeroMemory(*ppbyWDat,*pdwLaenge); mmResult = mmioRead(hmmio,(HPSTR)*ppbyWDat,*pdwLaenge); if(FAILED(mmResult)) { return FALSE; } return TRUE; } bool GidxSound::WaveFormat(HMMIO hmmio, WAVEFORMATEX *pWf) { MMCKINFO mmWave; MMCKINFO mmFmt; MMRESULT mmResult; ZeroMemory(&mmWave, sizeof(mmWave)); ZeroMemory(&mmFmt, sizeof(mmFmt)); mmResult = mmioSeek(hmmio, 0, SEEK_SET); mmWave.fccType = mmioStringToFOURCC("WAVE", 0); mmFmt.ckid = mmioStringToFOURCC("fmt", 0); mmResult = mmioDescend(hmmio,&mmWave,NULL,MMIO_FINDRIFF); if(FAILED(mmResult)) { return FALSE; } mmResult = mmioDescend(hmmio,&mmFmt,&mmWave,MMIO_FINDCHUNK); if(FAILED(mmResult)) { return FALSE; } mmResult = mmioRead(hmmio,(HPSTR)pWf,sizeof(WAVEFORMATEX)); if(FAILED(mmResult)) { return FALSE; } return TRUE; } bool GidxSound::WaveLaden(const char* fileName, WAVEFORMATEX* pWf,DWORD* pdwLaenge,PBYTE* ppbyWDat) { HMMIO hmmio; bool result; hmmio = mmioOpen((char*)((LPCTSTR)fileName), NULL, MMIO_READ); if(!hmmio) { return false; } result=GidxSound::WaveFormat(hmmio, pWf); if(!result) { return false; } result=GidxSound::WaveDaten(hmmio, pdwLaenge, ppbyWDat); if(!result) { return false; } mmioClose(hmmio, 0); return TRUE; }
// HEADER FILE #pragma comment(lib,"dsound.lib") #pragma comment(lib,"winmm.lib") #include <dsound.h> #include <windows.h> #include <stdio.h> #include <mmsystem.h> class GidxSound { private: LPDIRECTSOUND lpDS; HRESULT dsrval; bool WaveLaden(const char*,WAVEFORMATEX*,DWORD*,PBYTE*); bool WaveDaten(HMMIO, DWORD*, PBYTE*); bool WaveFormat(HMMIO, WAVEFORMATEX*); public: GidxSound(); ~GidxSound(); bool InitSound(HWND); bool LoadSnd(const char*, LPDIRECTSOUNDBUFFER*); bool PlaySnd(LPDIRECTSOUNDBUFFER,long,long); void StopSnd(LPDIRECTSOUNDBUFFER); void Pan(LPDIRECTSOUNDBUFFER,long); };
Schau mal ob du damit was anfangen kannst.
-
hu
g++.exe main.o -o "sound2.exe" -L"E:/Programme/Dev-Cpp/lib" ../lib/libwinmm.a ../lib/libdsound.a
main.o(.text+0xa9):main.cpp: undefined reference to `_Z17DirectSoundCreatePK5_GUIDPP12IDirectSoundP8IUnknown@12'
make.exe: *** [sound2.exe] Error 1
Ausführung beendet
cu
-
dxguid kann ja nicht fehlen, das hättest du lange per Boardsuche o.ä. rausgefunden...
Bye, TGGC (Der Held bei Dir!)
-
hi
Wie meinst das?
cu
-
So, wie ich es schreibe.
Bye, TGGC (Der Held bei Dir!)
-
hu
dxguid , was ist das?
cu
-
Bitte lesen. Danke.
Bye, TGGC (Reden wie die Großen)
-
hu
??? machts Spass Leute zu verarschen?
cu
-
Hast du alle nötigen Libs eingebunden?
-
hu
die dsound
und die winmm oder so ähnlich.cu
-
-
hu
Aber komischerweise wird nix abgespielt.
EDIT: doch geht nu, thx.
thx
-
auch dxgiud?
-
hu
Ne, das funxt leider nicht.
cu