Пример #1
0
        public FilterSampleProvider(uint filterHalfLength)
        {
            InputSampleProvider = new DCSampleProvider();
            CornerFrequency     = 440d;

            filterCoefficients = new float[filterHalfLength];

            inputBuffer       = new float[0];
            inputCircleBuffer = new CircleBuffer(2 * filterHalfLength);

            // Generate filter coefficients
            //int center = filterLength / 2;
            for (int i = 0; i < filterCoefficients.Length; i++)
            {
                //filterCoefficients[i] = (float)Math.Pow(0.5d, i + 1d);  // Some BS

                // Approximate all-pass filter
                //filterCoefficients[i] = i == (filterCoefficients.Length - 1) ? 0.5f : 0f;

                // TODO Fix this half-remembered nonsense

                /*double phase = (i - center) / (double)SampleRate;
                 * double x = 2 * Math.PI * phase * cornerFrequency;
                 * filterCoefficients[i] = x != 0d ? (float)(Math.Sin(x) / x) : 1f;*/
                double phase = (i - (filterCoefficients.Length - 0.5d)) / 44100d;
                double x     = 2 * Math.PI * phase * cornerFrequency;
                filterCoefficients[i] = 0.5f * (x != 0d ? (float)(Math.Sin(x) / x) : 0f);

                // TODO Apply (real) window function
                filterCoefficients[i] *= Math.Min(1f, i * 10f / filterCoefficients.Length);
            }
        }
Пример #2
0
        public EchoSampleProvider()
        {
            inputBuffer      = new float[0];
            echoCircleBuffer = new CircleBuffer((uint)SampleRate);

            InputSampleProvider = new DCSampleProvider();

            Delay     = 0.5f;
            Amplitude = 0.5f;
        }
Пример #3
0
        public ModulatedSineWaveProvider()
        {
            waveTable = new float[SampleRate];
            for (int i = 0; i < SampleRate; i++)
            {
                waveTable[i] = (float)Math.Sin(2 * Math.PI * i / SampleRate);
                //waveTable[i] = 2f * ((float)i / sampleRate) - 1f;   // Sawtooth
            }

            modulationBuffer = new float[0];

            Frequency = 440d;
            ModulationSampleProvider = new DCSampleProvider();

            SaveResetData();
        }