Exemplo n.º 1
0
        /// <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
            {
                Proto      = IIRFilter.ProtoType.Butterworth,
                Type       = IIRFilter.FilterType.HP,
                Order      = 5,
                FreqLow    = 45.0f,
                SampleRate = (float)m_sampleRate
            };

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

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

            m_iirFilterHiHi = new IIRFilter
            {
                Proto      = IIRFilter.ProtoType.Butterworth,
                Type       = IIRFilter.FilterType.LP,
                Order      = 5,
                FreqHigh   = 1500.0f,
                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);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Setup
        /// </summary>
        private void Setup()
        {
            if (sampleRate < 1.0f)
            {
                return;
            }

            dsp = new PitchDsp(sampleRate, kMinFreq, kMaxFreq, detectLevelThreshold);

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

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

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

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

            detectOverlapSamples = (int)(kDetectOverlapSec * sampleRate);
            maxOverlapDiff       = kMaxOctaveSecRate * kDetectOverlapSec;

            pitchBufSize         = (int)(((1.0f / (float)kMinFreq) * 2.0f + ((kAvgCount - 1) * kAvgOffset)) * sampleRate) + 16;
            pitchBufLo           = new float[pitchBufSize + detectOverlapSamples];
            pitchBufHi           = new float[pitchBufSize + detectOverlapSamples];
            samplesPerPitchBlock = (int)Math.Round(sampleRate / pitchRecordsPerSecond);

            circularBufferLo = new CircularBuffer <float>((int)(kCircularBufSaveTime * sampleRate + 0.5f) + 10000);
            circularBufferHi = new CircularBuffer <float>((int)(kCircularBufSaveTime * sampleRate + 0.5f) + 10000);
        }
        /// <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);
        }