Esempio n. 1
0
 def _post_process(self):
     '''Effects added to the instrument. They can linger beyond notes.'''
     if self._tremolo_freq > 0:
         self._wave = effects.tremolo(self._wave, self._tremolo_freq)
     if self._slow_intro:
         attack = adsr.linear_envelope(0, 1, self._total_dur)
         self._wave = mixer.multiply((self._wave, attack))
     self._wave = effects.echo(self._timer, self._wave, .2, 1/4)
Esempio n. 2
0
    def _chord_to_wave(self, chord_notes):
        '''Change lists of notes.Note() objects into numpy arrays of samples.'''
        # ring modulation done seperately for each indiv. note
        chord_waves = []
        for note in chord_notes:
            dur = self._timer.samples_per_note(note.dur)
            self._total_dur += dur
            if note is None or note.dur == 0:
                continue
            if note.note == notes.REST:
                return oscil.Flat(dur=dur)

            carrier = self._oscil(note.freq, self._vol, dur=dur)

            if self._detune == 1:
                modulated_tone = carrier
            else:
                modulator = self._oscil(note.freq/self._detune, self._vol,
                                        dur=dur)
                modulated_tone = mixer.multiply((carrier, modulator))
            chord_waves.append(modulated_tone)
        return mixer.add(chord_waves)
Esempio n. 3
0
 def _post_process(self):
     if self._tremolo_freq > 0:
         self._wave = effects.tremolo(self._wave, self._tremolo_freq)
     if self._slow_intro:
         attack = adsr.linear_envelope(0, 1, self._total_dur)
         self._wave = mixer.multiply((self._wave, attack))