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


Anmelden zum Antworten