07-hilbert-transform.py - Barberpole-like phasing effect. — Pyo 1.0.4 documentation

Pyo 1.0.4 documentation

# 07-hilbert-transform.py - Barberpole-like phasing effect.

This example uses two frequency shifters (based on complex modulation) linearly shifting the frequency content of a sound.

Frequency shifting is similar to ring modulation, except the upper and lower sidebands are separated into individual outputs.

    from pyo import *

    class ComplexMod:
        """
        Complex modulation used to shift the frequency
        spectrum of the input sound.
        """

        def __init__(self, hilb, freq):
            # Quadrature oscillator (sine, cosine).
            self._quad = Sine(freq, [0, 0.25])
            # real * cosine.
            self._mod1 = hilb["real"] * self._quad[1]
            # imaginary * sine.
            self._mod2 = hilb["imag"] * self._quad[0]
            # Up shift corresponds to the sum frequencies.
            self._up = (self._mod1 + self._mod2) * 0.7

        def out(self, chnl=0):
            self._up.out(chnl)
            return self

    s = Server().boot()

    # Large spectrum source.
    src = PinkNoise(0.2)

    # Apply the Hilbert transform.
    hilb = Hilbert(src)

    # LFOs controlling the amount of frequency shifting.
    lf1 = Sine(0.03, mul=6)
    lf2 = Sine(0.05, mul=6)

    # Stereo Single-Sideband Modulation.
    wetl = ComplexMod(hilb, lf1).out()
    wetr = ComplexMod(hilb, lf2).out(1)

    # Mixed with the dry sound.
    dry = src.mix(2).out()

    s.gui(locals())