05-record-streams.py - Recording individual audio streams on disk.
============================================================================================================================================


The Record object can be used to record specific audio streams
from a performance. It can be useful to record a sound in mutiple
tracks to make post-processing on individual part easier. This
example record the bass, the mid and the higher part in three
separated files on the user's desktop.

The `fileformat` and `sampletype` arguments are the same as in
the Server's `recordOptions` method.

.. code-block:: python

    from pyo import *
    import os
    
    s = Server().boot()
    
    # Defines sound file paths.
    path = os.path.join(os.path.expanduser("~"), "Desktop")
    bname = os.path.join(path, "bass.wav")
    mname = os.path.join(path, "mid.wav")
    hname = os.path.join(path, "high.wav")
    
    # Creates an amplitude envelope
    amp = Fader(fadein=1, fadeout=1, dur=10, mul=0.3).play()
    
    # Bass voice
    blfo = Sine(freq=[0.15, 0.16]).range(78, 82)
    bass = RCOsc(freq=blfo, mul=amp).out()
    
    # Mid voice
    mlfo = Sine(freq=[0.18, 0.19]).range(0.24, 0.26)
    mid = FM(carrier=1600, ratio=mlfo, index=5, mul=amp * 0.3).out()
    
    # High voice
    hlfo = Sine(freq=[0.1, 0.11, 0.12, 0.13]).range(7000, 8000)
    high = Sine(freq=hlfo, mul=amp * 0.1).out()
    
    # Creates the recorders
    brec = Record(bass, filename=bname, chnls=2, fileformat=0, sampletype=1)
    mrec = Record(mid, filename=mname, chnls=2, fileformat=0, sampletype=1)
    hrec = Record(high, filename=hname, chnls=2, fileformat=0, sampletype=1)
    
    # After 10.1 seconds, recorder objects will be automatically deleted.
    # This will trigger their stop method and properly close the sound files.
    clean = Clean_objects(10.1, brec, mrec, hrec)
    
    # Starts the internal timer of Clean_objects. Use its own thread.
    clean.start()
    
    # Starts the Server, in order to be sync with the cleanup process.
    s.start()
    
    s.gui(locals())

