S
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