Beispiel #1
0
 public static extern int waveInAddBuffer(IntPtr hwi, ref WaveHdr pwh, int cbwh);
Beispiel #2
0
        static void waveInCallback(IntPtr hdrvr, int uMsg, int dwUser,
            ref WaveHdr wavehdr, int dwParam2)
        {
            //            byte[] soundBuffer = new byte[bufferSize];

            if (uMsg == MM_WIM_DATA)
            {
            //                Marshal.Copy(wavehdr.lpData, soundBuffer, 0, bufferSize);

            //                bw.Write(soundBuffer);
                waveInUnprepareHeader(hdrvr, ref wavehdr, Marshal.SizeOf(wavehdr));
                waveInPrepareHeader(hdrvr, ref wavehdr, Marshal.SizeOf(wavehdr));

                waveInAddBuffer(hdrvr, ref wavehdr, Marshal.SizeOf(wavehdr));
                analyze(wavehdr);
            }
        }
Beispiel #3
0
        static void analyze(WaveHdr wavehdr)
        {
            int index = 0, count = 0;
            int size = wavehdr.dwBytesRecorded / sizeof(short);
            short[] soundBuffer = new short[size];

            Marshal.Copy(wavehdr.lpData, soundBuffer, 0, size);

            while (index < size)
            {
                bool bit = soundBuffer[index++] > 0;

                count++;

                while (index < size && bit == (bool)(soundBuffer[index] > 0))
                {
                    index++;
                    count++;
                }

                processBit(bit, count);
                count = 0;

            }
        }
Beispiel #4
0
        static void Main(string[] args)
        {
            //StreamWriter sw = new StreamWriter("output.dat", false);
            //bw = new BinaryWriter(sw.BaseStream);

            int ret;
            IntPtr waveIn;
            WaveHdr waveHeader1 = new WaveHdr();
            WaveHdr waveHeader2 = new WaveHdr();
            GCHandle wh1 = GCHandle.Alloc(waveHeader1, GCHandleType.Pinned);
            GCHandle wh2 = GCHandle.Alloc(waveHeader2, GCHandleType.Pinned);

            WaveFormat wf = new WaveFormat();

            wf.wFormatTag = 1; // 1 is PCM
            wf.nChannels = 1;
            wf.nSamplesPerSec = sampleRate;
            wf.wBitsPerSample = 16;
            wf.nBlockAlign = 2;
            wf.cbSize = 0;
            wf.nAvgBytesPerSec = wf.nSamplesPerSec * wf.wBitsPerSample / 8;

            d = new WaveDelegate(waveInCallback);
            int devID = -1;

            int callbackInstance = 0;

            ret = waveInOpen(out waveIn, devID, ref wf, d,
                ref callbackInstance, CALLBACK_FUNCTION);
            if (ret != 0)
                return;
            waveHeader1.dwBufferLength = bufferSize;
            waveHeader2.dwBufferLength = bufferSize;
            waveHeader1.lpData = Marshal.AllocHGlobal(bufferSize);
            waveHeader2.lpData = Marshal.AllocHGlobal(bufferSize);

            ret = waveInPrepareHeader(waveIn, ref waveHeader1, Marshal.SizeOf(waveHeader1));
            ret = waveInAddBuffer(waveIn, ref waveHeader1, Marshal.SizeOf(waveHeader1));
            ret = waveInPrepareHeader(waveIn, ref waveHeader2, Marshal.SizeOf(waveHeader2));
            ret = waveInAddBuffer(waveIn, ref waveHeader2, Marshal.SizeOf(waveHeader2));

            ret = waveInStart(waveIn);
            Keyboard keyboard = new Keyboard();
            while (true)
            {
                Thread.Sleep(100);
                if (keyboard.AltKeyDown == true)
                    break;
            }

            ret = waveInStop(waveIn);
            ret = waveInClose(waveIn);
            //bw.Close();
        }
Beispiel #5
0
 public static extern int waveInUnprepareHeader(IntPtr hWaveIn, ref WaveHdr lpWaveInHdr, int uSize);