Samples in WAV-Files



  • hab schon gegoogelt und einiges gefunden, z.b. das hier: http://bdn.borland.com/article/0,1410,21300,00.html

    bin aber für alle tipps offen (bzgl. WINAPI), falls jemand noch was intelligentes zu sagen hat



  • flosko du ******
    da steht doch alles in dem dokument
    von wegen "gelesen" HAHAHAHA
    du bist so blöd dass sich die balken biegen



  • ich glaube es reicht wenn du ab einer bestimmt stelle einfach alle daten hintereinander ausließt, dann bekommt man das wav dingen was man abspielen kann.

    es gibt auch plugins für z.B. winamp womit du raw-wav daten auf platte speichern kannst, wenn du das format kennst (also 44100 16bit stereo) dann sollte es kein problem sein das auszulesen

    bei stereo stehen die daten abwechselnd da, also 16bit link .. 16 bit rechts... 16bit links...

    wenn meine ausführungen zu blöd waren, frag nochma 🙂

    rapso->greets();



  • Original erstellt von elise:
    **scheinen ja wieder ferien zu sein

    die kinder langweilen sich zu tode, vielleicht mal raus und basketball?**

    Basketball draussen im Winter? 😮 😮



  • @flosko

    -> mail 😉



  • bei einer wave-datei ist der header immer 44 byte lang ... die samples liegen dahinter, im alternated l/r mode ...

    bei einer 16 bit / stereo datei sind demnach die ersten 2 bytes hinter dem header für den einen, die nächsten 2 byte für den anderen kanal usw. ...

    die lassen sich dann einfach mit einem short-pointer auslesen ...

    rocknix ///



  • Ähhhh sacht mal ihr habt doch nicht mehr alle Tassen im Schrank, oder? Das hier ist ein Programmierforum und keine Beleidigungsgroup für kontaktarme Deppen, die wohl nicht den Arsc h versohlt bekommen! Benehmt euch doch mal wie anständige Informatiker und nicht wie kleine Pissblagen!

    *grrrrrrrrr*

    code_pilot



  • @code_pilot: Du scheinst offensichtlich genau das gleiche Problem zu haben wie die "kleinen Pissblagen".



  • Original erstellt von WebFritzi:
    @code_pilot: Du scheinst offensichtlich genau das gleiche Problem zu haben wie die "kleinen Pissblagen".

    GARANTIERT nicht!
    Mich regt dies einfach nur auf weil ich das schon in so vielen Threads gesehen habe! Und nur solche blöden Idioten die wirklich dumm sind kommen darauf, mal einfach jemanden als "DUMM" zu bezeichnen weil er nicht weiter weis und seine Fragen in dieses FORUM postet um eine Antwort zu erhalten, das regt mich einfach auf...

    Wozu ist dieses Forum da? Genau, um untereinander zu helfen und nicht um sich zu beleidigen ... das ist der Punkt!

    Grüsse, code_pilot



  • das ist ein auszug aus einer DirectSounf Wrapper klasse, die ich vor ewigkeiten mal (nach)geschrieben habe ...

    Da gibts auch eine Funktionssammlung zum laden von Wave Dateien ... Dabei werden die Funktionen
    mmioOpen(), mmioSeek(), mmioRead(), mmioDescend() und mmioClose()
    benutzt um auf die daten innerhalb der wave datei zuzugreifen ...

    Auszug aus MyDirecSound.cpp

    // läd ein WAV File, und füllt die übergebenen pointer entsprechend
    BOOL CMyDirectSound::LoadWave(const char *ccFileName, WAVEFORMATEX *wf, DWORD *pdwLength, PBYTE *ppbyWData)
    {
        HMMIO hmmio;
    
        //datei öffnen
        hmmio = mmioOpen( (char*)((LPCTSTR)ccFileName), NULL, MMIO_READ );
        if( !hmmio ){
            MessageBox( m_hWnd, "LoadWave:mmioOpen failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        // WaveFormat einlesen
        if( !WaveFormat( hmmio, wf ) ){
            MessageBox( m_hWnd, "LoadWave:WaveFormat failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        // WaveDaten einlesen
        if( !WaveData( hmmio, pdwLength, ppbyWData ) ){
            MessageBox( m_hWnd, "LoadWave:WaveData failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        mmioClose( hmmio, 0);
        return TRUE;
    }
    
    BOOL CMyDirectSound::WaveFormat(HMMIO hmmio, WAVEFORMATEX *wf)
    {
        // verschiedene stellen der datei anspringen und das WaveFormat auslesen
    
        MMCKINFO mmWave;
        MMCKINFO mmFmt;
        MMRESULT mmResult;
    
        ZeroMemory(&mmWave, sizeof(mmWave) );
        ZeroMemory(&mmFmt, sizeof(mmFmt) );
    
        mmResult = mmioSeek( hmmio, 0, SEEK_SET);
        if( FAILED(mmResult) ){
            MessageBox( m_hWnd, "WaveFormat:mmioSeek failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        mmWave.fccType = mmioStringToFOURCC( "WAVE", 0 );
        mmFmt.ckid     = mmioStringToFOURCC( "fmt", 0 );
    
        mmResult = mmioDescend( hmmio, &mmWave, NULL, MMIO_FINDRIFF);
        if( FAILED(mmResult) ){
            MessageBox( m_hWnd, "WaveFormat:mmioDescend:MMIO_FINDRIFF failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        mmResult = mmioDescend( hmmio, &mmFmt, &mmWave, MMIO_FINDCHUNK);
        if( FAILED(mmResult) ){
            MessageBox( m_hWnd, "WaveFormat:mmioDescend:MMIO_FINDCHUNK failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        mmResult = mmioRead(hmmio, (HPSTR)wf, sizeof(WAVEFORMATEX) );
        if( FAILED(mmResult) ){
            MessageBox( m_hWnd, "WaveFormat:mmioRead failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        return TRUE;
    }
    
    BOOL CMyDirectSound::WaveData(HMMIO hmmio, DWORD *pdwLength, PBYTE *ppbyWData)
    {
        // Hier werden die eigentlichen WAV daten eingelesen
        // Es werden wieder spezielle stellen im File angesprungen und ausgelesen
    
        MMCKINFO mmWave;
        MMCKINFO mmData;
        MMRESULT mmResult;
    
        ZeroMemory(&mmWave, sizeof(mmWave) );
        ZeroMemory(&mmData, sizeof(mmData) );
    
        mmResult = mmioSeek( hmmio, 0, SEEK_SET);
        if( FAILED(mmResult) ){
            MessageBox( m_hWnd, "WaveData:mmioSeek failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        mmWave.fccType = mmioStringToFOURCC( "WAVE", 0 );
        mmData.ckid     = mmioStringToFOURCC( "data", 0 );
    
        mmResult = mmioDescend( hmmio, &mmWave, NULL, MMIO_FINDRIFF);
        if( FAILED(mmResult) ){
            MessageBox( m_hWnd, "WaveData:mmioDescend:MMIO_FINDRIFF failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        mmResult = mmioDescend( hmmio, &mmData, &mmWave, MMIO_FINDCHUNK);
        if( FAILED(mmResult) ){
            MessageBox( m_hWnd, "WaveData:mmioDescend:MMIO_FINDCHUNK failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        // ab hier wirds interessant !!!
    
        *pdwLength = mmData.cksize;
    
        *ppbyWData = (PBYTE)malloc(*pdwLength);
        if( !ppbyWData ){
            MessageBox( m_hWnd, "WaveData:malloc failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        ZeroMemory(*ppbyWData, *pdwLength );
    
        mmResult = mmioRead( hmmio, (HPSTR)*ppbyWData, *pdwLength);
        if( FAILED(mmResult) ){
            MessageBox( m_hWnd, "WaveData:mmioRead failed !!", NULL, MB_OK ); 
            return FALSE;
        }
    
        return TRUE;
    }
    

    vielleicht hilf das weiter

    grüsse


Anmelden zum Antworten