Esempio n. 1
0
        public Clapper()
        {
            // for pumping XNA framework events
            t = new Timer()
            {
                Interval = 50,
            };

            t.Tick += new EventHandler(t_Tick);

            UpperThreshold = 3000;
            LowerThreshold = 800;
            state = ClapperState.WaitLow;

            eventWatch = new Stopwatch();

            window = new Queue<short>();

            m = Microphone.Default;
            buffer = new byte[m.GetSampleSizeInBytes(TimeSpan.FromMilliseconds(100))];

            m.BufferReady += new EventHandler<EventArgs>(m_BufferReady);
        }
Esempio n. 2
0
        // This isn't great but the idea is that
        // there must be two peaks separated by more than 100ms
        // and those peaks must be within 1 second
        void StateCheck(short v)
        {
            if (eventWatch.ElapsedMilliseconds > 1000)
            {
                Debug.WriteLine("Timeout: Reset State");
                state = ClapperState.WaitLow;
                eventWatch.Reset();
            }

            switch (state)
            {
                case ClapperState.WaitLow:
                    if (v > UpperThreshold)
                    {
                        Debug.WriteLine("WL1 {0}", v);
                        state = ClapperState.WaitHigh;
                        eventWatch.Start();
                    }
                    break;
                case ClapperState.WaitHigh:
                    if (v < LowerThreshold &&
                        eventWatch.ElapsedMilliseconds > 50)
                    {
                        Debug.WriteLine("WH1 {0}", v);
                        state = ClapperState.WaitLow2;
                        eventWatch.Restart();
                    }
                    break;
                case ClapperState.WaitLow2:
                    if (v > UpperThreshold &&
                        eventWatch.ElapsedMilliseconds > 100)
                    {
                        Debug.WriteLine("WL2 {0}", v);
                        state = ClapperState.WaitHigh2;
                        eventWatch.Restart();
                    }
                    break;
                case ClapperState.WaitHigh2:
                    if (v < LowerThreshold &&
                        eventWatch.ElapsedMilliseconds > 50)
                    {
                        Debug.WriteLine("WH2 {0}", v);
                        state = ClapperState.WaitLow;
                        eventWatch.Reset();

                        if (OnClap != null)
                        {
                            OnClap(this, new ClapperEventArgs());
                        }
                    }
                    break;
            }
        }