private void setupBuffer() { pWaveHdr1 = new WAVEHDR(); pWaveHdr1.lpData = bufferPin.AddrOfPinnedObject(); pWaveHdr1.dwBufferLength = INP_BUFFER_SIZE; pWaveHdr1.dwBytesRecorded = 0; pWaveHdr1.dwUser = IntPtr.Zero; pWaveHdr1.dwFlags = 0; pWaveHdr1.dwLoops = 1; pWaveHdr1.lpNext = IntPtr.Zero; pWaveHdr1.reserved = (System.IntPtr)null; int i = waveInPrepareHeader(handle, ref pWaveHdr1, Convert.ToUInt32(Marshal.SizeOf(pWaveHdr1))); if (i != 0) { this.Text = "Error: waveInPrepare " + i.ToString(); return; } i = waveInAddBuffer(handle, ref pWaveHdr1, Convert.ToUInt32(Marshal.SizeOf(pWaveHdr1))); if (i != 0) { this.Text = "Error: waveInAddrBuffer"; return; } }
public static extern int waveInUnprepareHeader(IntPtr hwi, ref WAVEHDR pwh, uint cbwh);
public static extern int waveInAddBuffer(IntPtr hWaveIn, ref WAVEHDR lpWaveHdr, uint cWaveHdrSize);
public static extern int waveInPrepareHeader(IntPtr hWaveIn, ref WAVEHDR lpWaveHdr, uint Size);
public void callbackWaveIn(IntPtr deviceHandle, uint message, IntPtr instance, ref WAVEHDR wavehdr, IntPtr reserved2) { int i = 0; uint ii = 0; if (message == 0x3BF) {//WIM_CLOSE // i = waveInUnprepareHeader(deviceHandle, ref wavehdr, Convert.ToUInt32(Marshal.SizeOf(wavehdr))); // if (i != 0) // { // this.Text = "Error: waveInUnprepareHeader " + i; // } } else if (message == 958) {//WIM_OPEN return; } else if (message == 0x3C0) //WIM_DATA //if (this.InvokeRequired) // this.Invoke(waveIn, deviceHandle, message, instance, wavehdr, reserved2); //else { { if (wavehdr.dwBytesRecorded > 0) { byte[] temp = new byte[sampleLength + wavehdr.dwBytesRecorded]; Array.Copy(samples, temp, sampleLength); Array.Copy(buffer, 0, temp, sampleLength, wavehdr.dwBytesRecorded); sampleLength += wavehdr.dwBytesRecorded; samples = temp; // foreach (byte buf in buffer) // { // form.addData(buffer); // do something cool with your byte stream // } i = waveInUnprepareHeader(deviceHandle, ref wavehdr, Convert.ToUInt32(Marshal.SizeOf(wavehdr))); if (i != 0) { this.Text = "Error: waveInUnprepareHeader " + i; } setupBuffer(); } if (endRecording) { return; } } } else //SHOULD NOT GET HERE { endRecording = true; } }