06-hand-made-chorus.py - Hand-written 8 delay lines stereo chorus.¶
A chorus (or ensemble) is a modulation effect used to create a richer, thicker sound and add subtle movement. The effect roughly simulates the slight variations in pitch and timing that occur when multiple performers sing or play the same part.
A single voice chorus uses a single delay that creates a single modulated duplicate of the incoming audio. Basic chorus effects and inexpensive guitar pedals are often single-voice.
A multiple voice chorus uses multiple modulated delays to create a richer sound with more movement than a single voice chorus.
The Chorus object (from pyo) implements an 8 delay lines chorus and should use less CPU than the hand-written version. this example’s purpose is only to show how it works or to be used as a starting point to build an extended version.
from pyo import * s = Server(duplex=0).boot() # Start a source sound. sf = SfPlayer("../snds/baseballmajeur_m.aif", speed=1, loop=True, mul=0.3) # Mix the source in stereo and send the signal to the output. sf2 = sf.mix(2).out() # Sets values for 8 LFO'ed delay lines (you can add more if you want!). # LFO frequencies. freqs = [0.254, 0.465, 0.657, 0.879, 1.23, 1.342, 1.654, 1.879] # Center delays in seconds. cdelay = [0.0087, 0.0102, 0.0111, 0.01254, 0.0134, 0.01501, 0.01707, 0.0178] # Modulation depths in seconds. adelay = [0.001, 0.0012, 0.0013, 0.0014, 0.0015, 0.0016, 0.002, 0.0023] # Create 8 sinusoidal LFOs with center delays "cdelay" and depths "adelay". lfos = Sine(freqs, mul=adelay, add=cdelay) # Create 8 modulated delay lines with a little feedback and send the signals # to the output. Streams 1, 3, 5, 7 to the left and streams 2, 4, 6, 8 to the # right (default behaviour of the out() method). delays = Delay(sf, lfos, feedback=0.5, mul=0.5).out() s.gui(locals())