File: 09-multiple-outputs.py

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 (62 lines) | stat: -rw-r--r-- 1,688 bytes parent folder | download | duplicates (3)
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
"""
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...).

"""
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())