private void CallBack(IntPtr hdrvr, int msg, IntPtr instance, WaveHeader waveHeader, int reserved) { if (msg == WinMM.WaveInData && recording) { var hBuffer = (GCHandle)waveHeader.userData; var buffer = (WaveInBuffer)hBuffer.Target; if (buffer == null) { return; } lastReturnedBufferIndex = Array.IndexOf(buffers, buffer); DataAvailable?.Invoke(this, new WaveInEventArgs(buffer.Data, buffer.BytesRecorded)); buffer.Use(); } }
public WaveOutBuffer(IntPtr WaveOutHandle, int BufferSize) { waveOutHandle = WaveOutHandle; bufferSize = BufferSize; buffer = new byte[bufferSize]; hBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned); header = new WaveHeader(); hHeader = GCHandle.Alloc(header, GCHandleType.Pinned); header.dataBuffer = hBuffer.AddrOfPinnedObject(); header.bufferLength = bufferSize; header.loops = 1; hThis = GCHandle.Alloc(this); header.userData = (IntPtr)hThis; WinMM.waveOutPrepareHeader(waveOutHandle, header, Marshal.SizeOf(header)); }
private void CallBack(IntPtr hdrvr, int msg, IntPtr dwUser, WaveHeader waveHeader, int dwParam2) { Console.WriteLine("WaveOut"); if (msg == WinMM.WaveOutDone && playing) { try { GCHandle hBuffer = (GCHandle)waveHeader.userData; WaveOutBuffer buffer = (WaveOutBuffer)hBuffer.Target; lastReturnedBufferIndex = Array.IndexOf(buffers, buffer); //buffer.Use(); } catch { } } }
public static extern int waveOutWrite(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);
public static extern int waveOutPrepareHeader(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);
internal static extern int waveInAddBuffer(IntPtr hwi, WaveHeader pwh, int cbwh);
public static extern int waveInUnprepareHeader(IntPtr hWaveIn, WaveHeader lpWaveInHdr, int uSize);