public EqualizerSampleProvider(ISampleProvider sourceProvider, EqualizerPresets preset)
 {
     this.sourceProvider = sourceProvider;
     channels            = this.sourceProvider.WaveFormat.Channels;
     filters             = SetupPreset(preset, this.sourceProvider.WaveFormat.SampleRate);
     bandCount           = filters.Length;
     Bypass     = false;
     OutputGain = 1.0;
 }
        private BiQuadFilter[,] SetupPreset(EqualizerPresets preset, float sampleRate)
        {
            BiQuadFilter[,] filters;
            switch (preset)
            {
            case EqualizerPresets.VHFEmulation:
                filters = new BiQuadFilter[channels, 5];

                for (int i = 0; i < channels; i++)
                {
                    filters[i, 0] = BiQuadFilter.HighPassFilter(sampleRate, 310, 0.25f);
                    filters[i, 1] = BiQuadFilter.PeakingEQ(sampleRate, 450, 0.75f, 17.0f);
                    filters[i, 2] = BiQuadFilter.PeakingEQ(sampleRate, 1450, 1.0f, 25.0f);
                    filters[i, 3] = BiQuadFilter.PeakingEQ(sampleRate, 2000, 1.0f, 25.0f);
                    filters[i, 4] = BiQuadFilter.LowPassFilter(sampleRate, 2500, 0.25f);
                }
                break;

            case EqualizerPresets.VHFEmulation2:
                filters = new BiQuadFilter[channels, 7];

                for (int i = 0; i < channels; i++)
                {
                    filters[i, 0] = BiQuadFilterExt.Build(1.0, 0.0, 0.0, -0.01, 0.0, 0.0);
                    filters[i, 1] = BiQuadFilterExt.Build(1.0, -1.7152995098277, 0.761385315196423, 0.0, 1.0, 0.753162969638192);
                    filters[i, 2] = BiQuadFilterExt.Build(1.0, -1.71626681678914, 0.762433947105989, 1.0, -2.29278115712509, 1.00033663293577);
                    filters[i, 3] = BiQuadFilterExt.Build(1.0, -1.79384214686345, 0.909678364879526, 1.0, -2.05042803669041, 1.05048374237779);
                    filters[i, 4] = BiQuadFilterExt.Build(1.0, -1.79409285259567, 0.909822671281377, 1.0, -1.95188929743297, 0.951942325888074);
                    filters[i, 5] = BiQuadFilterExt.Build(1.0, -1.9390093095185, 0.9411847259142, 1.0, -1.82547932903698, 1.09157529229851);
                    filters[i, 6] = BiQuadFilterExt.Build(1.0, -1.94022767750807, 0.942630574503006, 1.0, -1.67241244173042, 0.916184578658119);
                }
                break;

            default:
                throw new Exception("Preset not defined");
            }
            return(filters);
        }