surgefx-distortion 0.2.11-alpha.0

surge synthesizer -- distortion effect
crate::ix!();

impl Init for Distortion {

    fn init(&mut self) {

        self.update_all_bands();
        self.zero_drives();

        self.band1.suspend();
        self.band2.suspend();
        self.lp1.suspend();
        self.lp2.suspend();

        self.block_increment = 0;
        self.left  = 0.0;
        self.right = 0.0;
    }
}

impl Distortion {

    pub fn new(
        tuner:  & TunerHandle,
        tables: & TablesHandle,
        srunit: & SampleRateHandle) -> Self 
    {
        Self {
            hr_a:            Align16(HalfRateFilterSSE::new(3,false)),
            hr_b:            Align16(HalfRateFilterSSE::new(3,true)),
            drive:           Align16(LipolPs::new_with_blocksize(BLOCK_SIZE)),
            outgain:         Align16(LipolPs::new_with_blocksize(BLOCK_SIZE)),
            ringout:         Ringout::blocks(1000),
            params:          DistortionParam::new_runtime(), 
            band1:           BiquadFilter::new(tuner,tables,srunit),
            band2:           BiquadFilter::new(tuner,tables,srunit),
            lp1:             BiquadFilter::new_with_blocksize(tuner, tables, srunit, BLOCK_SIZE * DISTORTION_OS),
            lp2:             BiquadFilter::new_with_blocksize(tuner, tables, srunit, BLOCK_SIZE * DISTORTION_OS),
            block_increment: 0,
            left:            0.0,
            right:           0.0,
            tables:          tables.clone(),
            wetblock:        WetBlock2::<128>::default(),
        }
    }
}