跳转至

Pyo文档(二)实例

作者是Olivier Bélanger,自ajaxsoundstudio.com; 黄复雄编译,有意译和少量省略。

本文相当于原文档的Examples部分,但内容全部根据Pyo编辑器附带的实例(共128个,比文档要多一些)。标题如“起步/01-intro”,其中“起步”译自文档相应标题,“01-intro”是编辑器附带实例所在文件夹的名称。

起步/01-intro#

音频服务器/01-audio-server.py#

 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
"""
01-audio-server.py - 引导音频服务器。

服务器对象要在所有别的音频对象之前生成。
服务器对象负责与音频与midi驱动程序通信,
还负责跟踪处理链条。
"""
from pyo import *

# 生成服务器(Server)对象,使用缺省参数。
# 请看手册,看如何更改采样率、缓冲大小、声道数,
# 或别的全局设置。
s = Server()

# 引导服务器。此步骤使音频与midi流初始化。
# 音频与midi配置(如果有)必须在此回调之前完成。
s.boot()

# 开动服务器。此步骤激活服务器的处理循环。
s.start()

# 这里放置处理链条...

# 服务器对象提供一个图形用户界面,通过
# `gui()`方法。其目的在于保持程序激活,
# 期间计算采样需要耗时。如果用`locals`字典作
# 参数,用户可以不断地从GUI发送命令到
# Python解释器。
s.gui(locals())

正弦音/02-sine-tone.py#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
"""
02-sine-tone.py - 音频编程的"hello world"!

本脚本简单地播放一个1000Hz正弦声音。
"""
from pyo import *

# 生成、引导服务器。
# 用户要从GUI发送`start`命令。译注:
# 用GUI上的`start`按钮,或在GUI的
# 解释器单元格中输入`s.start()`脚本。
s = Server().boot()
# 降低增益到20 dB。
s.amp = 0.1

# 生成正弦波播放器。
# `out()`方法开动处理过程
# 并把信号发送到输出。
a = Sine().out()

# 打开服务器的图形界面。
s.gui(locals())

并行处理/03-parallel-proc.py#

 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
"""
03-parallel-proc.py - 单个资源的多重处理。

本例展示如何同时播放不同的音频对象。
所有处理对象(即调整音频资源的东西)的
第一个参数都叫“输入/input”。此参数接收
音频对象,以用于处理。

注意,输入变量给到处理对象,而调用
每个对象的`out()`方法将发送其采样到输出。
"""
from pyo import *

s = Server().boot()
s.amp = 0.1

# 生成正弦波,作为资源以供处理。
a = Sine()

# 通过一个泛音器传递正弦波。
hr = Harmonizer(a).out()

# 同时通过一个合唱起。
ch = Chorus(a).out()

# 同时通过一个移频器。
sh = FreqShift(a).out()

s.gui(locals())

串行处理/04-serial-proc.py#

 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
"""
04-serial-proc.py - 链接单个资源的多个处理。

本例展示如何链接单个资源的多个处理。
所有处理对象(即调整音频资源的东西)的
第一个参数都叫“输入/input”。此参数接收
音频对象,以用于处理。

注意输入变量给到了每个泛音器。
"""
from pyo import *

s = Server().boot()
s.amp = 0.1

# 生成一个正弦波,用作处理资源。
a = Sine().out()

# 通过一个泛音器传递正弦波。
h1 = Harmonizer(a).out()

# 然后泛化的音通过另一个泛音器。
h2 = Harmonizer(h1).out()

# 然后又。。。
h3 = Harmonizer(h2).out()

# 然后又。。。
h4 = Harmonizer(h3).out()

s.gui(locals())

选择输出声道/05-output-channels.py#

 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
"""
05-output-channels.py - 发送信号到不同的物理输出。

选择输出声道(以接收声音)的最简单方法,是把它作为`out()`方法的
第一个参数。实际中,`out()`方法的签名如下:

`.out(chnl=0, inc=1, dur=0, delay=0)`

`chnl`是输出,这是对象的第一个声道(流)要发送到的地方。
`inc`是给别的声道的输出增量。`dur`是处理过程的持续时间,以秒计。
持续时间为0,表示一直播放。`delay`是激活处理前的延迟,以秒计。
"""
from pyo import *

s = Server().boot()
s.amp = 0.1

# 生成一个资源(白噪音)
n = Noise()

# 发送低频(地狱1000Hz)到左声道
lp = ButLP(n).out()

# 发送高频(高于1000Hz)到右声道
hp = ButHP(n).out(1)

s.gui(locals())

参数控制/02-controls#

固定的控制/01-fixed-control.py#

 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
"""
01-fixed-control.py - 用数字作参数。

要控制音频对象的行为,可在初始化时
传值给参数。
"""
from pyo import *

s = Server().boot()
s.amp = 0.1

# 设置基础频率
freq = 200

# 模拟三角波形,方法是添加奇次泛音(奇次谐波),
# 其振幅与泛音数字的平方之倒数成比例。
h1 = Sine(freq=freq, mul=1).out()
h2 = Sine(freq=freq*3, phase=0.5, mul=1./pow(3,2)).out()
h3 = Sine(freq=freq*5, mul=1./pow(5,2)).out()
h4 = Sine(freq=freq*7, phase=0.5, mul=1./pow(7,2)).out()
h5 = Sine(freq=freq*9, mul=1./pow(9,2)).out()
h6 = Sine(freq=freq*11, phase=0.5, mul=1./pow(11,2)).out()

# 显示最终波形
sp = Scope(h1+h2+h3+h4+h5+h6)

s.gui(locals())

动态控制/02-dynamic-control.py#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
"""
02-dynamic-control.py - 以图形控制参数。

使用Pyo,便于快速尝试一些参数联合体,
要用的控制窗口已经为有每个对象都配置好了。
要打开控制窗口,只要在你想要控制的对象上面,
调用`ctrl()`方法。
"""
from pyo import *

s = Server().boot()
s.amp = 0.1

# 生成两个对象,都有很酷的参数,对象各对应一个声道。
a = FM().out()
b = FM().out(1)

# 打开控制窗口
a.ctrl(title="Frequency modulation left channel")
b.ctrl(title="Frequency modulation right channel")

s.gui(locals())

03-generators#

04-soundfiles#

05-envelopes#

06-filters#

07-effects#

18-multicore#

algorithmic#

control#

effects#

fft#

matrix#

sampling#

sequencing#

snds#

synthesis#

tables#

utilities#

wxgui#

评论