01-flanger.py - Hand-made simple flanger. — Pyo 1.0.4 documentation

Pyo 1.0.4 documentation

# 01-flanger.py - Hand-made simple flanger.

A flanger is an audio effect produced by mixing two identical signals together, one signal delayed by a small and gradually changing period. This produces a swept comb filter effect: peaks and notches are produced in the resulting frequency spectrum, related to each other in a linear harmonic series. Varying the time delay causes these to sweep up and down the frequency spectrum.

    from pyo import *

    s = Server().boot()

    # Rich frequency spectrum as stereo input source.
    amp = Fader(fadein=0.25, mul=0.5).play()
    src = PinkNoise(amp).mix(2)

    # Flanger parameters                        == unit ==
    middelay = 0.005  # seconds

    depth = Sig(0.99)  # 0 --> 1
    depth.ctrl(title="Modulation Depth")
    lfospeed = Sig(0.2)  # Hertz
    lfospeed.ctrl(title="LFO Frequency in Hz")
    feedback = Sig(0.5, mul=0.95)  # 0 --> 1
    feedback.ctrl(title="Feedback")

    # LFO with adjusted output range to control the delay time in seconds.
    lfo = Sine(freq=lfospeed, mul=middelay * depth, add=middelay)

    # Dynamically delayed signal. The source passes through a DCBlock
    # to ensure there is no DC offset in the signal (with feedback, DC
    # offset can be fatal!).
    flg = Delay(DCBlock(src), delay=lfo, feedback=feedback)

    # Mix the original source with its delayed version.
    # Compress the mix to normalize the output signal.
    cmp = Compress(src + flg, thresh=-20, ratio=4).out()

    s.gui(locals())