The order should be: waveInStop waveInReset waveInUnprepareHeader (for all buffers) And get rid of the Sleep() calls. There is absolutely NO reason for them. When you prepare the headers, you must initialize dwFlags (Use 0 for input buffers) as well as lpData and dwBufferLength. Also, IMO, "headersend + i" is confusing to read. I'd use "&headersend[i]". Mark
Mark Salsbery Microsoft MVP - Visual C++ :java: