1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ix!();

use crate::{
    RingModulator,
    RingModulatorParam,
    RINGMOD_MAX_UNISON,
};

impl RingModulator {

    pub fn new(
        tuner:     &       TunerHandle,
        tables:    &       TablesHandle,
        srunit:    &       SampleRateHandle,
    ) -> Self {
        Self {
            ringout:       Ringout::blocks(1000),
            params:        RingModulatorParam::new_runtime(),
            lp:            BiquadFilter::new(tuner,tables,srunit),
            hp:            BiquadFilter::new(tuner,tables,srunit),
            halfband_out:  HalfRateFilterSSE::new(6,true),
            halfband_in:   HalfRateFilterSSE::new(6,true),
            phase:         A1d::<f32>::zeros(RINGMOD_MAX_UNISON as usize),
            detune_offset: A1d::<f32>::zeros(RINGMOD_MAX_UNISON as usize),
            pan_l:         A1d::<f32>::zeros(RINGMOD_MAX_UNISON as usize),
            pan_r:         A1d::<f32>::zeros(RINGMOD_MAX_UNISON as usize),
            last_unison:   -1,
            tuner:         tuner.clone(),
            srunit:        srunit.clone(),
        }
    }
}