예제 #1
0
        void UpdateDisplay()
        {
            // Show the detector results
            if (detector.Pitch > 1.0f)
            {
                if (detector.Pitch >= 1000.0f)
                {
                    detectorPitch.text = (detector.Pitch / 1000.0f).ToString("F4");
                    detectorUnits.text = "kHz";
                }
                else
                {
                    detectorPitch.text = detector.Pitch.ToString("F3");
                    detectorUnits.text = "Hz";
                }

                detectorMidiNote.text  = PitchDsp.GetNoteName(detector.MidiNote, true, true);
                detectorMidiCents.text = detector.MidiCents.ToString();

                //var diffPercent = 100.0 - (100.0f * this.GeneratorPitch / curPitchRecord.Pitch);

                //if (diffPercent >= 0.0f)
                //    detectorError.text = "+" + diffPercent.ToString("F3");
                //else
                //detectorError.text = diffPercent.ToString("F3");
            }
            else
            {
                detectorPitch.text     = "--";
                detectorUnits.text     = "Hz";
                detectorError.text     = "--";
                detectorMidiNote.text  = "--";
                detectorMidiCents.text = "--";
            }
        }
예제 #2
0
        //Before i looked in to using MIDI , i had attempted to create methods that as it turns out, worked the same way.
        //private void Note_start()
        //{
        //    var curPitchRecord = m_pitchTracker.CurrentPitchRecord;
        //    float freq = curPitchRecord.Pitch;
        //    StartDuration = this.TimeInterval;
        //    CurrentFrequency = ((int)freq);
        //}

        //private void Note_End()
        //{
        //    EndDuration = this.TimeInterval;
        //    if (Recording)
        //    {
        //        RecordString = TheRecorder.AddNextNote(CurrentFrequency, (int)(EndDuration - StartDuration));
        //    }
        //}

        private void UpdateDisplay()
        {
            // Show the detector results
            var curPitchRecord = m_pitchTracker.CurrentPitchRecord; // places the current pitch in to the curpitchrecord variable
            var curNote        = PitchDsp.GetNoteName(curPitchRecord.MidiNote, true, true);

            if (curPitchRecord.Pitch > 1.0f)                                                   // if a significant value is given
            {
                if (curPitchRecord.Pitch >= 1000.0f)                                           // for the purpose of converting the units from khz to hz
                {
                    pFrequencyValueLbl.Text = (curPitchRecord.Pitch / 1000.0f).ToString("F4"); // converts given value in to khz
                    pFrequencyUnitsLbl.Text = "kHz";                                           // sho9ws that value is in khz
                }
                else                                                                           //if pitch !>= 1000, then it is in hz
                {
                    pFrequencyValueLbl.Text = curPitchRecord.Pitch.ToString("F3");             //no need to convert to khz
                    pFrequencyUnitsLbl.Text = "Hz";                                            // shows that value is in hz
                }
                noteValueLbl.Text = curNote;
                noteList.Add(curNote);
                nListView.SubItems.Add(curNote);
            }
        }
        /// <summary>
        /// Setup
        /// </summary>
        private void Setup()
        {
            if (m_sampleRate < 1.0f)
                return;

            m_dsp = new PitchDsp(m_sampleRate, kMinFreq, kMaxFreq, m_detectLevelThreshold);

            m_iirFilterLoLo = new IIRFilter();
            m_iirFilterLoLo.Proto = IIRFilter.ProtoType.Butterworth;
            m_iirFilterLoLo.Type = IIRFilter.FilterType.HP;
            m_iirFilterLoLo.Order = 5;
            m_iirFilterLoLo.FreqLow = 45.0f;
            m_iirFilterLoLo.SampleRate = (float)m_sampleRate;

            m_iirFilterLoHi = new IIRFilter();
            m_iirFilterLoHi.Proto = IIRFilter.ProtoType.Butterworth;
            m_iirFilterLoHi.Type = IIRFilter.FilterType.LP;
            m_iirFilterLoHi.Order = 5;
            m_iirFilterLoHi.FreqHigh = 280.0f;
            m_iirFilterLoHi.SampleRate = (float)m_sampleRate;

            m_iirFilterHiLo = new IIRFilter();
            m_iirFilterHiLo.Proto = IIRFilter.ProtoType.Butterworth;
            m_iirFilterHiLo.Type = IIRFilter.FilterType.HP;
            m_iirFilterHiLo.Order = 5;
            m_iirFilterHiLo.FreqLow = 45.0f;
            m_iirFilterHiLo.SampleRate = (float)m_sampleRate;

            m_iirFilterHiHi = new IIRFilter();
            m_iirFilterHiHi.Proto = IIRFilter.ProtoType.Butterworth;
            m_iirFilterHiHi.Type = IIRFilter.FilterType.LP;
            m_iirFilterHiHi.Order = 5;
            m_iirFilterHiHi.FreqHigh = 1500.0f;
            m_iirFilterHiHi.SampleRate = (float)m_sampleRate;

            m_detectOverlapSamples = (int)(kDetectOverlapSec * m_sampleRate);
            m_maxOverlapDiff = kMaxOctaveSecRate * kDetectOverlapSec;

            m_pitchBufSize = (int)(((1.0f / (float)kMinFreq) * 2.0f + ((kAvgCount - 1) * kAvgOffset)) * m_sampleRate) + 16;
            m_pitchBufLo = new float[m_pitchBufSize + m_detectOverlapSamples];
            m_pitchBufHi = new float[m_pitchBufSize + m_detectOverlapSamples];
            m_samplesPerPitchBlock = (int)Math.Round(m_sampleRate / m_pitchRecordsPerSecond); 

            m_circularBufferLo = new CircularBuffer<float>((int)(kCircularBufSaveTime * m_sampleRate + 0.5f) + 10000);
            m_circularBufferHi = new CircularBuffer<float>((int)(kCircularBufSaveTime * m_sampleRate + 0.5f) + 10000);
        }
예제 #4
0
 public static string NoteToName(int note)
 {
     return(PitchDsp.GetNoteName(note, true, true));
 }