000
26.06.2003, 15:02 Uhr
~Andrea Boeswett
Gast
|
Hallo,
bin noch frisch mit C++, verzeiht daher magelhafte Beschreibungen!? Versuche gerade eine Klasse die Daten aus einem Wav-File in einen Buffer schiebt zu überarbeiten. Ich wollte mich von dem Wav-File lösen und es flexibel auf LineIn und/oder Micro umbauen.
Bisherige Klasse:
bool StreamSource_Wave::getData(char* pBuf, unsigned lenBuf) { assert(pBuf); if ((lenBuf + mReadOffset) <= mDataSize) { if (mmioRead(mhFile, (char*)pBuf, lenBuf) == -1) { mErrStr += "filling buffer with data\n"; return (false); } mReadOffset += lenBuf; mDataCopied += lenBuf; } else// ((lenBuf + mReadOffset) > mDataSize) //wrap around { unsigned diff = mDataSize - mReadOffset; if (mmioRead(mhFile, (char*)pBuf, diff) == -1) { mErrStr += "filling buffer with data\n"; return (false); } if (mmioSeek(mhFile, mDataOffset, SEEK_SET) == -1) { mErrStr += "Error seeking into wav file \n"; return (false); } mReadOffset = 0; unsigned diff2 = lenBuf - diff; if (mmioRead(mhFile, (char*)(pBuf+diff), diff2) == -1) { mErrStr += "filling buffer with data\n"; return (false); } mReadOffset = diff2; mDataCopied += lenBuf; } return (true); }
Diese wollte ich nun wie gesagt überarbeiten. Nun meine Frage, wie kann ich kurz und knapp auf LineIn und Micro zugreifen. Dachte an:
WaveDevice(UINT nDevice = WAVE_MAPPER);
Allerdings weiß ich nicht welches angesprochen wird, LineIn oder Micro? Weiterhin liegt ein Problem an, welches sich auf das kopieren der Daten in den Buffer betrifft. Ganz grob ist die Reihenfolge doch so ähnlich:
// handle for input wave HWAVEIN hwi; // call CALLBACK_FUNCTION waveInOpen(&hwi, m_waveDevice.GetDevice(), &wf,(DWORD)waveInProc, NULL, CALLBACK_FUNCTION))
waveInPrepareHeader( hwi, &hdr, sizeof(WAVEHDR) )
waveInAddBuffer( hwi,&hdr,sizeof(hdr)
waveInStart(hwi) waveInStop(hwi)
waveInUnprepareHeader(hwi, &hdr, sizeof(WAVEHDR));
waveInClose(hwi);
//Callbackfunction void CALLBACK waveInProc(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
Hier dann die weitere Frage, benötige ich alle Funktionen oder kann ich es eingrenzen? Wie passe ich es grob an meine Klasse an?
Danke,
Gruß Andrea |