Exemplo n.º 1
0
 private void OnPlaybackStop()
 {
     bTerminating = true;
     WinmmHook.waveOutReset(hWaveOut);
     WinmmHook.waveOutUnprepareHeader(hWaveOut, ref pWaveHdr1, Marshal.SizeOf(pWaveHdr1));
     WinmmHook.waveOutClose(hWaveOut);
 }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
            }
        }
Exemplo n.º 4
0
        private void OnPlaybackStart()
        {
            int val = WinmmHook.waveOutOpen(out hWaveOut, WinmmHook.WAVE_MAPPER, waveform, WaveOutProc, 0, WinmmHook.CALLBACK_FUNCTION);

            if (val == 11)
            {
                //invalid parameter.
                return;
            }
        }
Exemplo n.º 5
0
        /*
         * ===============  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);
        }
Exemplo n.º 6
0
        private void OnWomClose()
        {
            bPaused  = false;
            bPlaying = false;
            WinmmHook.PostMessage(parentHandle, WinmmHook.WM_USER + 1, (int)PlaybackStatus.Stopped, 0);

            if (bTerminating)
            {
                MsgQueue.Add(PlayerMsg.TERMINATING);
            }
        }
Exemplo n.º 7
0
        private void OnTerminating()
        {
            if (bPlaying)
            {
                bTerminating = true;
                WinmmHook.waveOutReset(hWaveOut);
                return;
            }

            if (h_pbuffer.IsAllocated)
            {
                h_pbuffer.Free();
            }
            MsgQueue.Add(PlayerMsg.EXIT);
        }
Exemplo n.º 8
0
 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);
     }
 }
Exemplo n.º 9
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);
        }
Exemplo n.º 10
0
        /*
         * ===============  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);
        }
Exemplo n.º 11
0
 private void OnWomDone()
 {
     bTerminating = true;
     WinmmHook.waveOutUnprepareHeader(hWaveOut, ref pWaveHdr1, Marshal.SizeOf(pWaveHdr1));
     WinmmHook.waveOutClose(hWaveOut);
 }