File: 09-multiple-outputs.rst.txt

package info (click to toggle)
python-pyo 1.0.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,332 kB
  • sloc: python: 135,133; ansic: 127,822; javascript: 16,116; sh: 395; makefile: 388; cpp: 242
file content (65 lines) | stat: -rw-r--r-- 1,995 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
How to send multiple outputs from a single expression
============================================================================================================================================


**09-multiple-outputs.py**

If the object generates only one channel output (the default), the last
expression in the script is the output signal. Otherwise, output signals
must be created with the `out` function.

Here is an example of a script that output four sine waves to four
different output channels.

.. code-block:: scheme

    (define osc (sin (* twopi (~ $1))))
    (out 0 (* (osc 250) 0.2))
    (out 1 (* (osc 500) 0.2))
    (out 2 (* (osc 750) 0.2))
    (out 3 (* (osc 1000) 0.2))

We retrieve the different channels from the Expr object with the
bracket syntax (obj[0] is the first channel, obj[1] the second,
and so on...).

.. code-block:: python

    from pyo import *
    
    s = Server().boot()
    
    expression = """// Lorenz strange attractor.
    // Control variables
    (let #pit 500)      // 1.0 -> 750.0
    (let #chaos 2.0)    // 0.5 -> 3.0
    // Initial constants
    (let #A 10.0)
    (let #B 28.0)
    
    // Computes the differential variables
    (let #delta (* (/ 1.0 sr) #pit))
    (let #vDX (* (- $y1[-1] $y0[-1]) #A))
    (let #vDY (- (* $y0[-1] (- #B $y2[-1])) $y1[-1]))
    (let #vDZ (- (* $y0[-1] $y1[-1]) (* #chaos $y2[-1])))
    
    // Three differential equations (the first two are the
    // desired audio signals).
    (out 0 (+ $y0[-1] (* #vDX #delta)))
    (out 1 (+ $y1[-1] (* #vDY #delta)))
    (out 2 (+ $y2[-1] (* #vDZ #delta)))
    
    """
    
    # We must tell the Expr object how many signals to output with the `outs` argument.
    # The `initout` argument sets the initial value og output signals (defaults to 0).
    expr = Expr(Sig(0), expression, outs=3, initout=1.0, mul=[0.044, 0.0328, 0.0])
    expr.editor()
    
    sc = Scope(expr)
    sp = Spectrum(expr)
    
    pan = Pan(expr, mul=0.3).out()
    
    s.gui(locals())