13-using-audio-objects.py - Using audio objects as generators.
============================================================================================================================================


Because Events computes its events in real time, it is possible to use
the current value of audio streams as generators for parameter (even
as generators for EventGenerator's arguments). So, wherever a float or
an EventGenerator is possible, a PyoObject is too.

Considering the wide range of audio signal possibilities pyo is offering,
it is worthy to explore these combinations!

.. code-block:: python

    from pyo import *
    
    s = Server().boot()
    
    # Attack - decay envelope.
    env = CosTable([(0, 0.0), (64, 1.0), (8191, 0.0)])
    
    # The pool of notes.
    scl = EventScale(root="C", scale="egyptian", first=4, octaves=3)
    
    # LFO on the duration multiplier.
    durmul1 = Sine(freq=0.1).range(0.5, 1.5)
    # Random on the length of each segment.
    segment1 = RandInt(max=6, freq=0.5)
    # Random on the distance between segments starting points.
    step1 = RandInt(max=6, freq=0.75, add=-3)
    
    e1 = Events(
        midinote=EventSlide(scl, segment1, step1), beat=1 / 4.0, db=[-12, -18, -18], envelope=env, durmul=durmul1,
    ).play()
    
    # Out-of-phase LFO on the duration multiplier.
    durmul2 = Sine(freq=0.1, phase=0.5).range(0.5, 1.5)
    segment2 = RandInt(max=6, freq=0.5)
    step2 = RandInt(max=6, freq=0.75, add=-3)
    
    e2 = Events(
        midinote=EventSlide(scl, segment2, step2),
        db=[-9, -15, -15],
        envelope=env,
        durmul=durmul2,
        beat=1 / 4.0,
        bpm=60,
        transpo=-12,
    ).play()
    
    s.gui(locals())

