Exemple #1
0
    def __init__(self, freq=1000, dur=1, mul=1, add=0):
        PyoObject.__init__(self, mul, add)
        self._freq = freq
        self._dur = dur
        self._mul = mul
        self._add = add

        # Begin processing.

        # 1st Saw oscillator.
        saw1Table = SawTable(order=50, size=24000).normalize()
        self._saw1 = Osc(saw1Table, self._freq, interp=4, mul=0.6839)
        # Dummy amplitude knobs to split Saw 1 into two paths with independent
        # amplitudes.
        # Out to Reson1.
        saw1Dummy1 = self._saw1 * 1.0
        saw1Dummy1.setMul(0.63)
        # Out to Reson2.
        saw1Dummy2 = self._saw1 * 1.0
        saw1Dummy2.setMul(0.38)

        # 1st Resonant filter.
        # total duration =  note value + 1954ms
        # sustain at 95%
        self._reson1Env = Adsr(1.280, 0.097, 0.95, 0.577, dur=self._dur)
        reson1 = EQ(saw1Dummy1,
                    freq=self._freq,
                    q=100,
                    boost=3.0,
                    type=1,
                    mul=self._reson1Env * 0.7079)
        # Dummy amplitude knob; lets us more easily balance the filter levels.
        reson1Dummy = reson1 * 1.0

        # 2nd Saw oscillator.
        saw2Table = SawTable(order=50, size=24000).normalize()
        self._saw2 = Osc(saw2Table, self._freq / 2, interp=4, mul=0.5433)
        # Dummy amplitude knob to allow mixing with Saw1, going into Reson2.
        saw2Dummy = self._saw2 * 1.0
        saw2Dummy.setMul(0.38)

        # 2nd Resonant filter.
        # total duration =  note value + 1954ms
        # sustain at 53%
        self._reson2Env = Adsr(1.280, 0.097, 0.53, 0.577, dur=self._dur)
        reson2 = EQ(saw1Dummy2 + saw2Dummy,
                    freq=self._freq + 1300,
                    q=100,
                    boost=3.0,
                    type=1,
                    mul=self._reson2Env * 0.7079)
        # Dummy amplitude knob; lets us more easily balance the filter levels.
        reson2Dummy = reson2 * 1.0

        # Amplitude envelopes for the filters.
        # total duration =  note value + 1954ms
        # sustain at %100
        self._amp1Env = Adsr(0.577, 0.097, 1.0, 1.280, dur=self._dur)
        # total duration =  note value + 1862ms
        # sustain at %100
        self._amp2Env = Adsr(0.577, 0.005, 1.0, 1.280, dur=self._dur)

        # Tweak filter levels
        reson1Dummy.setMul(self._amp1Env * 0.3)
        reson2Dummy.setMul(self._amp2Env * 0.4842)
        filtersDummy = reson1Dummy + reson2Dummy
        bpf = ButBP(filtersDummy, freq=325, q=1)

        # Volume knob
        aqueous = Mix(bpf, mul=self._mul)

        self._base_objs = aqueous.getBaseObjects()