Ejemplo n.º 1
0
        public void Init()
        {
            cfg.logInfo("ENGINE - " + Name, "Init recognizer");

            engine.SpeechRecognized          += new EventHandler <SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
            engine.RecognizeCompleted        += new EventHandler <RecognizeCompletedEventArgs>(recognizer_RecognizeCompleted);
            engine.AudioStateChanged         += new EventHandler <AudioStateChangedEventArgs>(recognizer_AudioStateChanged);
            engine.SpeechHypothesized        += new EventHandler <SpeechHypothesizedEventArgs>(recognizer_SpeechHypothesized);
            engine.SpeechDetected            += new EventHandler <SpeechDetectedEventArgs>(recognizer_SpeechDetected);
            engine.SpeechRecognitionRejected += new EventHandler <SpeechRecognitionRejectedEventArgs>(recognizer_SpeechRecognitionRejected);

            engine.UpdateRecognizerSetting("CFGConfidenceRejectionThreshold", (int)(this.Confidence * 100));

            engine.MaxAlternates              = cfg.MaxAlternates;
            engine.InitialSilenceTimeout      = cfg.InitialSilenceTimeout;
            engine.BabbleTimeout              = cfg.BabbleTimeout;
            engine.EndSilenceTimeout          = cfg.EndSilenceTimeout;
            engine.EndSilenceTimeoutAmbiguous = cfg.EndSilenceTimeoutAmbiguous;

            if (!cfg.Adaptation)
            {
                engine.UpdateRecognizerSetting("AdaptationOn", 0);
            }

            cfg.logInfo("ENGINE - " + Name, "AudioLevel: " + engine.AudioLevel);
            cfg.logInfo("ENGINE - " + Name, "MaxAlternates: " + engine.MaxAlternates);
            cfg.logInfo("ENGINE - " + Name, "BabbleTimeout: " + engine.BabbleTimeout);
            cfg.logInfo("ENGINE - " + Name, "InitialSilenceTimeout: " + engine.InitialSilenceTimeout);
            cfg.logInfo("ENGINE - " + Name, "EndSilenceTimeout: " + engine.EndSilenceTimeout);
            cfg.logInfo("ENGINE - " + Name, "EndSilenceTimeoutAmbiguous: " + engine.EndSilenceTimeoutAmbiguous);

            tracker                = new PitchTracker();
            tracker.SampleRate     = 16000.0f;
            tracker.PitchDetected += OnPitchDetected;
        }
Ejemplo n.º 2
0
 public override void Start()
 {
     base.Start();
     tracker                = new PitchTracker();
     tracker.SampleRate     = 16000.0f;
     tracker.PitchDetected += OnPitchDetected;
 }
Ejemplo n.º 3
0
    /// <summary>
    /// Pitchs detected delegate.
    /// </summary>
    /// <param name="sender">Sender.</param>
    /// <param name="pitchRecord">Pitch record.</param>
    private void PitchDetectedListener(PitchTracker sender, PitchTracker.PitchRecord pitchRecord)
    {
        int pitch = (int)Mathf.Round(pitchRecord.Pitch);

        if (!detectedPitches.Contains(pitch))
        {
            detectedPitches.Add(pitch);
        }

        int lowestPitch = pitch;

        foreach (int p in detectedPitches)
        {
            if (p > 0 && p < lowestPitch)
            {
                lowestPitch = p;
            }
        }

        currrentPitch = lowestPitch;

        // Fire pitch detected event
        if (pitchDetectedEvent != null)
        {
            pitchDetectedEvent(currrentPitch);
        }
    }
Ejemplo n.º 4
0
 /// <summary>
 /// Initializes the PitchTracker.
 /// Add Pitch Detection delegate
 /// </summary>
 public void InitializePitchTracker()
 {
     pitchTracker                = new PitchTracker();
     pitchTracker.SampleRate     = samplerate;
     pitchTracker.PitchDetected += new PitchTracker.PitchDetectedHandler(PitchDetectedListener);
     AddAudioDataDelgates();
 }
Ejemplo n.º 5
0
        private void startBtn_Click(object sender, RoutedEventArgs e)
        {
            if (sourceStream == null)
            {
                InitializeSound(); // sets up sourcestream, dataIn event, buffer and waveout for data to be sent
                timePassed = 300;
            }

            try
            {
                sourceStream.StartRecording();
                StartTimer();
                noteList   = new List <int>();
                NoteOnList = new List <NoteOnEvent>();
                waveOut.Play();
            }
            catch (NAudio.MmException exception) //this error may occur when no input device is connected
            {
                System.Windows.MessageBox.Show("No Input Device available");
            }
            catch (InvalidOperationException)
            {
            }
            if (m_pitchTracker == null)
            {
                m_pitchTracker            = new PitchTracker();     //initilises class for detecting pitch
                m_pitchTracker.SampleRate = m_sampleRate;           // sample rate is set to 44100.0f as standard
                //  m_pitchTracker.PitchDetected += OnPitchDetected;    //
                m_audioBuffer = new float[(int)Math.Round(m_sampleRate * m_timeInterval / 1000.0)];
            }
        }
Ejemplo n.º 6
0
    void Start()
    {
        samples  = new float[SampleSize];
        spectrum = new float[SampleSize];

        // Project Settings > Audio > DSP Buffer Size = Best latency
        sampleFreq = AudioSettings.outputSampleRate;

        pitchTracker                        = new PitchTracker();
        pitchTracker.SampleRate             = sampleFreq;
        pitchTracker.PitchDetected         += PitchDetected;
        pitchTracker.DetectLevelThreshold   = Threshold;
        pitchTracker.SampleRate             = sampleFreq;
        pitchTracker.RecordPitchRecords     = true;
        pitchTracker.PitchRecordHistorySize = HistorySize;

        output.SetFloat("MasterVolume", -80f);
        AudioMixerGroup master = output.FindMatchingGroups("Master")[0];

        source      = GetComponent <AudioSource>();
        source.clip = Microphone.Start(null, true, 1, sampleFreq);
        source.outputAudioMixerGroup = master;
        source.loop = true;
        while (Microphone.GetPosition(null) <= 0)
        {
        }
        source.Play();
    }
Ejemplo n.º 7
0
    void PitchDetected(PitchTracker sender, PitchTracker.PitchRecord record)
    {
        if (!Constants.GameOn)
        {
            return;
        }

        if (record.Pitch > 0)
        {
            bool consistentNote = true;
            foreach (PitchTracker.PitchRecord rec in pitchTracker.PitchRecords)
            {
                if (rec.MidiNote != 0 && record.MidiNote != rec.MidiNote)
                {
                    consistentNote = false;
                    break;
                }
            }

            if (consistentNote)
            {
                MidiNote   = record.MidiNote;
                PitchValue = record.Pitch;
                PitchAC    = record.Pitch;
            }
        }
    }
Ejemplo n.º 8
0
 public void Initialize()
 {
     _pitchTracker = new PitchTracker();
     _pitchTracker.PitchDetected += HandleNewPitchDetected;
     _pitchTracker.SampleRate     = SAMPLE_RATE;
     Bass.RecordInit();
     _streamId = Bass.RecordStart(SAMPLE_RATE, 1, BassFlags.Float | BassFlags.RecordPause, HandleRecordingData);
 }
Ejemplo n.º 9
0
        private void PitchDetectedListener(PitchTracker sender, PitchTracker.PitchRecord pitchRecord)
        {
            int pitch = (int)Math.Round(pitchRecord.Pitch);

            if (!_detectedPitches.Contains(pitch))
            {
                _detectedPitches.Add(pitch);
            }
        }
Ejemplo n.º 10
0
        private void btnPlot_Click(object sender, EventArgs e)
        {
            int minFreq  = (int)nudMinFreq.Value;
            int maxFreq  = (int)nudMaxFreq.Value;
            int stepFreq = (int)nudFreqStep.Value;

            int samplingRate  = (int)nudSamplingRate.Value;
            int pcmDataLength = (int)nudSampleCount.Value / 2;

            float[] pcm = new float[samplingRate];

            var zcr        = new ZCR(samplingRate, cbParallel.Checked);
            var autocorrel = new AutocorrelationDetector(samplingRate, cbParallel.Checked);
            var tracker    = new PitchTracker();

            tracker.SampleRate = samplingRate;
            var maxLikehood = new MaximumLikehoodDetector(samplingRate, cbParallel.Checked);

            var zcrPairList           = new PointPairList();
            var autocorrelPairList    = new PointPairList();
            var autocorrelNewPairList = new PointPairList();
            var maxLikehoodPairList   = new PointPairList();

            for (int i = minFreq; i < maxFreq; i += stepFreq)
            {
                var     wave = PitchUtils.CreateSineWave(pcm, samplingRate, samplingRate, i, 1.0f, 0 /*, (float)i / 10, 0.05f*/);
                float[] fft  = new FFT(WindowType.Rectangle, cbParallel.Checked).Calculate(pcm);

                zcrPairList.Add(i, Math.Abs(i - zcr.Detect(pcm, fft)));
                autocorrelPairList.Add(i, Math.Abs(i - autocorrel.Detect(pcm, fft)));
                tracker.ProcessBuffer(pcm);
                autocorrelNewPairList.Add(i, Math.Abs(i - tracker.CurrentPitchRecord.Pitch));
                maxLikehoodPairList.Add(i, Math.Abs(i - maxLikehood.Detect(pcm, fft)));
            }

            zedGraphControl1.GraphPane.Title.Text = "Абсолютная ошибка";
            var graphPane = zedGraphControl1.GraphPane;

            graphPane.CurveList.Clear();
            graphPane.XAxis.Title.Text = "Частота (Hz)";
            graphPane.YAxis.Title.Text = "Ошибка (Hz)";

            graphPane.GraphObjList.Clear();
            graphPane.AddCurve("Пересечение с нулем", zcrPairList, System.Drawing.Color.Sienna, SymbolType.None);

            graphPane.GraphObjList.Clear();
            graphPane.AddCurve("Автокорреляция", autocorrelPairList, System.Drawing.Color.DarkGreen, SymbolType.None);

            graphPane.GraphObjList.Clear();
            graphPane.AddCurve("Автокорреляция модифицированная", autocorrelNewPairList, System.Drawing.Color.OrangeRed, SymbolType.None);

            graphPane.GraphObjList.Clear();
            graphPane.AddCurve("Гармоническое перемножение спектров", maxLikehoodPairList, System.Drawing.Color.SkyBlue, SymbolType.None);

            graphPane.AxisChange();
            zedGraphControl1.Refresh();
        }
Ejemplo n.º 11
0
    private void PitchDetected(PitchTracker sender, PitchTracker.PitchRecord pitchRecord)
    {
        float logPitch = Mathf.Log(pitchRecord.Pitch, 2);

        if (!float.IsInfinity(logPitch))
        {
            currentPitch   = logPitch - midPitch;
            isPitchChanged = true;
        }
    }
Ejemplo n.º 12
0
 private void Start()
 {
     pitchTracker = new PitchTracker
     {
         SampleRate           = FREQUENCY,
         DetectLevelThreshold = 0.0001f,
         RecordPitchRecords   = false,
     };
     pitchTracker.PitchDetected += PitchDetected;
     micRecording = Microphone.Start(null, true, 100, FREQUENCY);
     rb           = GetComponent <Rigidbody2D>();
 }
Ejemplo n.º 13
0
    private void Start()
    {
        DEVICE_NAME = Microphone.devices[0];

        pitchTracker = new PitchTracker
        {
            SampleRate           = RECORD_FREQUENCY,
            DetectLevelThreshold = 0.0001f,
            RecordPitchRecords   = false,
        };
        pitchTracker.PitchDetected += PitchDetected;
        StartRecording();
    }
        protected override void OnCreate()
        {
            base.OnCreate();

            var query = new EntityQueryDesc()
            {
                All = new ComponentType[] { typeof(PitchDetector), },
            };

            pitchDetectors = GetEntityQuery(query);

            pitchTracker            = new PitchTracker();
            pitchTracker.SampleRate = 44100;
        }
Ejemplo n.º 15
0
    private void PitchDetected(PitchTracker sender, PitchTracker.PitchRecord pitchRecord)
    {
        float logPitch = Mathf.Log(pitchRecord.Pitch, 2);

        if (!float.IsInfinity(logPitch))
        {
            if (!currentPitch.HasValue)
            {
                currentPitch = 0;
            }
            currentPitch += logPitch;
            numPitchSamples++;
        }
    }
Ejemplo n.º 16
0
        protected override void OnCreateManager()
        {
            base.OnCreateManager();

            var query = new EntityArchetypeQuery()
            {
                All = new ComponentType[] { typeof(PitchDetector), },
            };

            pitchDetectors = GetComponentGroup(query);

            pitchTracker            = new PitchTracker();
            pitchTracker.SampleRate = 44100;
        }
Ejemplo n.º 17
0
        private void Awake()
        {
            _instance = UnityEngine.Object.FindObjectOfType(typeof(InputManager)) as InputManager;
            if (_instance == null)
            {
                // try to load prefab
                UnityEngine.Object managerPrefab = Resources.Load("InputManager");                 // looks inside all 'Resources' folders in 'Assets'
                if (managerPrefab != null)
                {
                    UnityEngine.Object prefab = Instantiate(managerPrefab);
                    prefab.name = "InputManager";                     // otherwise creates a game object with "(Clone)" appended to the name
                }
                else if (UnityEngine.Object.FindObjectOfType(typeof(InputManager)) == null)
                {
                    // no prefab found, create new input manager
                    GameObject gameObject = new GameObject("InputManager");
                    gameObject.AddComponent <InputManager>();
                    DontDestroyOnLoad(gameObject);
                    gameObject.hideFlags = HideFlags.HideInHierarchy;
                }
                _instance = UnityEngine.Object.FindObjectOfType(typeof(InputManager)) as InputManager;
            }

            // start recording
            int minFreq, maxFreq;

            Microphone.GetDeviceCaps(_audioDevice, out minFreq, out maxFreq);
            if (minFreq > 0)
            {
                _micInput = Microphone.Start(_audioDevice, true, 1, minFreq);
            }
            else
            {
                _micInput = Microphone.Start(_audioDevice, true, 1, 44000);
            }

            // prepare for pitch tracking
            _samples                     = new float[_micInput.samples * _micInput.channels];
            _pitchTracker                = new PitchTracker();
            _pitchTracker.SampleRate     = _micInput.samples;
            _pitchTracker.PitchDetected += new PitchTracker.PitchDetectedHandler(PitchDetectedListener);
        }
Ejemplo n.º 18
0
    // Use this for initialization
    void Start()
    {
        audioSource = GetComponent <AudioSource> ();
        string _audioDevice = Microphone.devices [0];
        int    minFreq, maxFreq;

        Microphone.GetDeviceCaps(_audioDevice, out minFreq, out maxFreq);
        if (minFreq > 0)
        {
            _micInput = Microphone.Start(_audioDevice, true, 1, minFreq);
        }
        else
        {
            _micInput = Microphone.Start(_audioDevice, true, 1, 44000);
        }

        // prepare for pitch tracking
        _samples                     = new float[_micInput.samples * _micInput.channels];
        _pitchTracker                = new PitchTracker();
        _pitchTracker.SampleRate     = _micInput.samples;
        _pitchTracker.PitchDetected += new PitchTracker.PitchDetectedHandler(PitchDetectedListener);
    }
Ejemplo n.º 19
0
        private void OnPitchDetected(PitchTracker sender, PitchTracker.PitchRecord pitchRecord)
        {
            // During the call to PitchTracker.ProcessBuffer, this event will be fired zero or more times,
            // depending how many pitch records will fit in the new and previously cached buffer.
            //
            // This means that there is no size restriction on the buffer that is passed into ProcessBuffer.
            // For instance, ProcessBuffer can be called with one large buffer that contains all of the
            // audio to be processed, or just a small buffer at a time which is more typical for realtime
            // applications. This PitchDetected event will only occur once enough data has been accumulated
            // to do another detect operation.

            /*
             * cfg.logInfo("PITCH", "MidiCents: " + pitchRecord.MidiCents
             + " MidiNote: " + pitchRecord.MidiNote
             + " Pitch: " + pitchRecord.Pitch
             + " RecordIndex: " + pitchRecord.RecordIndex);*/
            double d = pitchRecord.Pitch;

            if (d > 0)
            {
                pitch.Add(d);
            }
        }
Ejemplo n.º 20
0
        private void btnCalculate_Click(object sender, EventArgs e)
        {
            int   samplingRate = Convert.ToInt32(nudSamplingRate.Value);
            float freq         = (float)nudFreq.Value;

            int pcmDataLength = (int)nudSampleCount.Value / 2;

            float[] pcm  = new float[pcmDataLength];
            var     wave = PitchUtils.CreateSineWave(pcm, pcmDataLength, samplingRate, freq, 1.0f, 0);

            var stopwatch = new Stopwatch();

            float[] fft         = new FFT(WindowType.Rectangle, cbParallel.Checked).Calculate(pcm);
            var     zcrDetector = new ZCR(samplingRate, cbParallel.Checked);

            stopwatch.Restart();
            float zcr = zcrDetector.Detect(pcm, fft);

            stopwatch.Stop();
            tbZCR.Text     = zcr.ToString();
            tbZCRTime.Text = stopwatch.ElapsedTicks.ToString();

            var autocorrelDetector = new AutocorrelationDetector(samplingRate, cbParallel.Checked);

            stopwatch.Restart();
            float autocorrel = autocorrelDetector.Detect(pcm, fft);

            stopwatch.Stop();
            tbAutocorrel.Text          = autocorrel.ToString();
            tbAutocorrelationTime.Text = stopwatch.ElapsedTicks.ToString();

            var tracker = new PitchTracker();

            tracker.SampleRate = samplingRate;
            stopwatch.Restart();
            tracker.ProcessBuffer(pcm);
            float autocorrelNew = tracker.CurrentPitchRecord.Pitch;

            stopwatch.Stop();
            tbAutocorrelNew.Text          = autocorrelNew.ToString();
            tbAutocorrelationNewTime.Text = stopwatch.ElapsedTicks.ToString();

            var hpsDetector = new HPS(samplingRate, cbParallel.Checked, 1);

            stopwatch.Restart();
            float hps = hpsDetector.Detect(pcm, fft);

            stopwatch.Stop();
            tbHPS.Text     = hps.ToString();
            tbHPSTime.Text = stopwatch.ElapsedTicks.ToString();

            var maxLikehoodDetector = new MaximumLikehoodDetector(samplingRate, cbParallel.Checked);

            stopwatch.Restart();
            fft = new FFT(WindowType.Rectangle, cbParallel.Checked).Calculate(pcm);
            float maxLikehood = maxLikehoodDetector.Detect(pcm, fft);

            stopwatch.Stop();
            tbMaxLikehood.Text     = maxLikehood.ToString();
            tbMaxLikehoodTime.Text = stopwatch.ElapsedTicks.ToString();
        }
Ejemplo n.º 21
0
        private void btnPlotTimes_Click(object sender, EventArgs e)
        {
            int minSamples  = (int)nudMinSamples.Value;
            int maxSamples  = (int)nudMaxSamples.Value;
            int samplesStep = (int)nudSamplesStep.Value;

            var zcrPairList           = new PointPairList();
            var autocorrelPairList    = new PointPairList();
            var autocorrelNewPairList = new PointPairList();
            var maxLikehoodPairList   = new PointPairList();

            for (int i = minSamples; i < maxSamples; i += samplesStep)
            {
                float[] pcm  = new float[i];
                var     wave = PitchUtils.CreateSineWave(pcm, i, i, 400, 1.0f, 0);
                float[] fft  = new FFT(WindowType.Rectangle, cbParallel.Checked).Calculate(pcm);

                var zcr        = new ZCR(i, cbParallel.Checked);
                var autocorrel = new AutocorrelationDetector(i, cbParallel.Checked);
                var tracker    = new PitchTracker();
                tracker.SampleRate = i;
                var maxLikehood = new MaximumLikehoodDetector(i, cbParallel.Checked);

                var stopwatch = new Stopwatch();
                stopwatch.Restart();
                zcr.Detect(pcm, fft);
                stopwatch.Stop();
                zcrPairList.Add(i, stopwatch.ElapsedMilliseconds);

                stopwatch.Restart();
                autocorrel.Detect(pcm, fft);
                stopwatch.Stop();
                autocorrelPairList.Add(i, stopwatch.ElapsedMilliseconds);

                stopwatch.Restart();
                tracker.ProcessBuffer(pcm);
                stopwatch.Stop();
                autocorrelNewPairList.Add(i, stopwatch.ElapsedMilliseconds);

                stopwatch.Restart();
                fft = new FFT(WindowType.Rectangle, cbParallel.Checked).Calculate(pcm);
                maxLikehood.Detect(pcm, fft);
                stopwatch.Stop();
                maxLikehoodPairList.Add(i, stopwatch.ElapsedMilliseconds);
            }

            zedGraphControl2.GraphPane.Title.Text = "Время вычисления";
            var graphPane = zedGraphControl2.GraphPane;

            graphPane.CurveList.Clear();
            graphPane.XAxis.Title.Text = "Размер фрагмента (кол-во отсчетов)";
            graphPane.YAxis.Title.Text = "Время вычисления (мсек)";

            graphPane.GraphObjList.Clear();
            graphPane.AddCurve("Пересечение с нулем", zcrPairList, System.Drawing.Color.Sienna, SymbolType.None);

            graphPane.GraphObjList.Clear();
            graphPane.AddCurve("Автокорреляция", autocorrelPairList, System.Drawing.Color.DarkGreen, SymbolType.None);

            graphPane.GraphObjList.Clear();
            graphPane.AddCurve("Автокорреляция модифицированная", autocorrelNewPairList, System.Drawing.Color.OrangeRed, SymbolType.None);

            graphPane.GraphObjList.Clear();
            graphPane.AddCurve("Гармоническое перемножение спектров", maxLikehoodPairList, System.Drawing.Color.SkyBlue, SymbolType.None);

            graphPane.AxisChange();
            zedGraphControl2.Refresh();
        }
Ejemplo n.º 22
0
 private void HandleNewPitchDetected(PitchTracker sender, PitchTracker.PitchRecord pitchRecord)
 {
     _pitchesThisUpdate.Add(pitchRecord.Pitch);
 }
Ejemplo n.º 23
0
 /// <summary>
 /// Ends the pitch tracking.
 /// Remove Pitch Detection delegate
 /// </summary>
 public void EndPitchTracking()
 {
     RemoveAudioDataDelegates();
     pitchTracker.PitchDetected -= this.PitchDetectedListener;
     pitchTracker = null;
 }