private void OnPlaybackStop() { bTerminating = true; WinmmHook.waveOutReset(hWaveOut); WinmmHook.waveOutUnprepareHeader(hWaveOut, ref pWaveHdr1, Marshal.SizeOf(pWaveHdr1)); WinmmHook.waveOutClose(hWaveOut); }
private void OnRecordingStart() { int bFailed = WinmmHook.waveInOpen(out hWaveIn, WinmmHook.WAVE_MAPPER, waveform, WaveInProc, 0, WinmmHook.CALLBACK_FUNCTION); if (bFailed != 0) { //could not open waveform audio return; } h_pBuffer1 = GCHandle.Alloc(pBuffer1, GCHandleType.Pinned); waveHdr1.lpData = h_pBuffer1.AddrOfPinnedObject(); waveHdr1.dwBufferLength = INP_BUFFER_SIZE; waveHdr1.dwBytesRecorded = 0; waveHdr1.dwUser = new IntPtr(0); //(IntPtr)GCHandle.Alloc(this); waveHdr1.dwFlags = 0; waveHdr1.dwLoops = 1; waveHdr1.lpNext = new IntPtr(0); waveHdr1.reserved = 0; WinmmHook.waveInPrepareHeader(hWaveIn, ref waveHdr1, Marshal.SizeOf(waveHdr1)); h_pBuffer2 = GCHandle.Alloc(pBuffer2, GCHandleType.Pinned); waveHdr2.lpData = h_pBuffer2.AddrOfPinnedObject(); waveHdr2.dwBufferLength = INP_BUFFER_SIZE; waveHdr2.dwBytesRecorded = 0; waveHdr2.dwUser = new IntPtr(0); //(IntPtr)GCHandle.Alloc(this); waveHdr2.dwFlags = 0; waveHdr2.dwLoops = 1; waveHdr2.lpNext = new IntPtr(0); waveHdr2.reserved = 0; WinmmHook.waveInPrepareHeader(hWaveIn, ref waveHdr2, Marshal.SizeOf(waveHdr2)); }
private void OnWimData() { WaveHdr header; byte[] samples; if (lastHeader == 1) { header = waveHdr1; samples = pBuffer1; } else if (lastHeader == 2) { header = waveHdr2; samples = pBuffer2; } else { if (bEnding) { WinmmHook.waveInClose(hWaveIn); } return; } byte[] result; int copyPos; if (pSaveBuffer == null) { result = new byte[header.dwBytesRecorded]; copyPos = 0; } else { result = new byte[pSaveBuffer.Length + header.dwBytesRecorded]; pSaveBuffer.CopyTo(result, 0); copyPos = pSaveBuffer.Length; } Array.Copy(samples, 0, result, copyPos, header.dwBytesRecorded); pSaveBuffer = result; if (bEnding) { WinmmHook.waveInReset(hWaveIn); WinmmHook.waveInClose(hWaveIn); return; } if (lastHeader == 1) { WinmmHook.waveInAddBuffer(hWaveIn, ref waveHdr1, Marshal.SizeOf(waveHdr1)); } else if (lastHeader == 2) { WinmmHook.waveInAddBuffer(hWaveIn, ref waveHdr2, Marshal.SizeOf(waveHdr2)); } }
private void OnPlaybackStart() { int val = WinmmHook.waveOutOpen(out hWaveOut, WinmmHook.WAVE_MAPPER, waveform, WaveOutProc, 0, WinmmHook.CALLBACK_FUNCTION); if (val == 11) { //invalid parameter. return; } }
/* * =============== Actions =============== */ private void OnWimOpen() { WinmmHook.waveInAddBuffer(hWaveIn, ref waveHdr1, Marshal.SizeOf(waveHdr1)); WinmmHook.waveInAddBuffer(hWaveIn, ref waveHdr2, Marshal.SizeOf(waveHdr2)); bRecording = true; bEnding = false; WinmmHook.PostMessage(parentHandle, WinmmHook.WM_USER + 1, (int)PlaybackStatus.Recording, 0); WinmmHook.waveInStart(hWaveIn); }
private void OnWomClose() { bPaused = false; bPlaying = false; WinmmHook.PostMessage(parentHandle, WinmmHook.WM_USER + 1, (int)PlaybackStatus.Stopped, 0); if (bTerminating) { MsgQueue.Add(PlayerMsg.TERMINATING); } }
private void OnTerminating() { if (bPlaying) { bTerminating = true; WinmmHook.waveOutReset(hWaveOut); return; } if (h_pbuffer.IsAllocated) { h_pbuffer.Free(); } MsgQueue.Add(PlayerMsg.EXIT); }
private void OnPlaybackPause() { if (!bPaused) { WinmmHook.waveOutPause(hWaveOut); bPaused = true; WinmmHook.PostMessage(parentHandle, WinmmHook.WM_USER + 1, (int)PlaybackStatus.Paused, 0); } else { WinmmHook.waveOutRestart(hWaveOut); bPaused = false; WinmmHook.PostMessage(parentHandle, WinmmHook.WM_USER + 1, (int)PlaybackStatus.Playing, 0); } }
private void OnWimClose() { WinmmHook.waveInUnprepareHeader(hWaveIn, ref waveHdr1, Marshal.SizeOf(waveHdr1)); WinmmHook.waveInUnprepareHeader(hWaveIn, ref waveHdr2, Marshal.SizeOf(waveHdr2)); if (h_pBuffer1.IsAllocated) { h_pBuffer1.Free(); } if (h_pBuffer2.IsAllocated) { h_pBuffer2.Free(); } bRecording = false; WinmmHook.PostMessage(parentHandle, WinmmHook.WM_USER + 1, (int)PlaybackStatus.Stopped, 0); MsgQueue.Add(RecorderMsg.TERMINATING); }
/* * =============== Event Handlers =============== */ private void OnWomOpen() { if (h_pbuffer.IsAllocated) { h_pbuffer.Free(); } h_pbuffer = GCHandle.Alloc(pbuffer, GCHandleType.Pinned); //handle (pointer) to the buffer pWaveHdr1.dwUser = (IntPtr)GCHandle.Alloc(this); //pointer to this pWaveHdr1.dwBufferLength = pbuffer.Length; //size of the buffer in bytes pWaveHdr1.lpData = h_pbuffer.AddrOfPinnedObject(); //IntPtr to buffer pWaveHdr1.dwFlags = 0; WinmmHook.waveOutPrepareHeader(hWaveOut, ref pWaveHdr1, Marshal.SizeOf(pWaveHdr1)); WinmmHook.waveOutWrite(hWaveOut, ref pWaveHdr1, Marshal.SizeOf(pWaveHdr1)); bPlaying = true; WinmmHook.PostMessage(parentHandle, WinmmHook.WM_USER + 1, (int)PlaybackStatus.Playing, 0); }
private void OnWomDone() { bTerminating = true; WinmmHook.waveOutUnprepareHeader(hWaveOut, ref pWaveHdr1, Marshal.SizeOf(pWaveHdr1)); WinmmHook.waveOutClose(hWaveOut); }