Pure Data 关键词一览
这是 Pd 补丁中使用的对象与命令的参考手册。
基本操作
| 操作 | 快捷键 |
|---|---|
| 放置对象 | Cmd (Ctrl) + 1 |
| 放置消息 | Cmd (Ctrl) + 2 |
| 放置数字 | Cmd (Ctrl) + 3 |
| 放置符号 | Cmd (Ctrl) + 4 |
| 放置注释 | Cmd (Ctrl) + 5 |
| 编辑/运行模式的切换 | Cmd (Ctrl) + E |
| 放大显示 | Cmd (Ctrl) + Shift + ; |
| 临时的运行模式 | 一直按住 Cmd (Ctrl) |
| 帮助浏览器 | Cmd (Ctrl) + B |
| 放置 bang | Shift + Cmd (Ctrl) + B |
| 放置 toggle | Shift + Cmd (Ctrl) + T |
| 放置水平滑块 | Shift + Cmd (Ctrl) + J |
| 放置数组 | Cmd + Shift + A |
| 删除对象 | 选中 → Backspace |
| 对象的帮助(用法) | 右键点击对象 → 帮助 |
| 显示对象一览 | 右键点击空白处 → 帮助 |
基本概念
| 术语 | 含义 |
|---|---|
| 补丁(patch) | Pd 的程序文件 |
| 入口(inlet) | 位于对象上方的数据输入位置 |
| 出口(outlet) | 位于对象下方的数据输出位置。用线连接入口与出口,数据就会往来传递 |
| 值 | 指数值或字符串。入口与出口之间用 细实线 表示 |
| 信号 | 以音频信号为代表的连续数据。入口与出口之间用 粗实线 表示 |
| 消息(message) | 事先准备好的字符串或数值。在消息中放入 $1,就会替换为从入口输入的值后输出 |
| 数字(number) | 实时显示・输入数值的 GUI |
| 符号(symbol) | 显示字符串的 GUI |
| 数组(array) | 存放音频数据等的地方 |
| DSP | 信号的实时运算处理。把控制台右上角的复选框设为 ON,或调高音频输出的音量,处理就会开始 |
声音的生成
| 对象 | 说明 | 用法 |
|---|---|---|
osc~ | 正弦波振荡器 | [osc~ 频率] |
phasor~ | 锯齿波 | [phasor~ 频率] |
noise~ | 白噪声 | [noise~] |
else/tri~ | 三角波(ELSE 库) | [else/tri~ 频率] |
else/square~ | 方波(ELSE 库) | [else/square~ 频率] |
音频输入输出
| 对象 | 说明 | 用法 |
|---|---|---|
output~ | 音频输出 | 用 level 值 消息设定音量 |
else/out~ | 音频输出(带 DSP ON/OFF 开关) | ELSE 库 |
dac~ | 数模转换(音频输出) | [dac~ 声道编号] |
adc~ | 模数转换(音频输入) | [adc~] |
音量・包络
| 对象 | 说明 | 用法 |
|---|---|---|
*~ | 信号的乘法(用于音量控制) | 信号 × 信号 或 数值 |
line~ | 数值的自动变化(信号) | [目标值 时间(ms)] 的消息 |
vline~ | 连续的数值变化 | [值1 时间1, 值2 时间2 开始时间, ...] |
delay | 一定时间后输出 bang | [delay 时间(ms)] |
else/asr~ | ASR 包络 | ELSE 库 |
else/adsr~ | ADSR 包络 | ELSE 库 |
else/envgen~ | 自由的包络 | [else/envgen~ -curve] |
运算
| 对象 | 说明 | 用法 |
|---|---|---|
+, -, *, / | 四则运算(值) | [+ 数值] |
expr | 用数学式计算 | [expr $f1 * 2 + $f2] |
mtof | MIDI 音符→频率(Hz) 转换 | 中央 Do 是 60 |
数据的路由
| 对象 | 说明 | 用法 |
|---|---|---|
s (send) | 值的发送 | [s 收件方名称] |
r (receive) | 值的接收 | [r 收件方名称] |
sel | 值的分配 | [sel 值1 值2 ...](最右侧的出口原样输出未匹配的值) |
route | 按第一个值分配 | [route 地址1 地址2] |
change | 只在值变化时输出 | [change] |
t (trigger) | 按右→左的顺序发送值 | [t f b] (f:数值, b:bang, a:字符串) |
滤波器
| 对象 | 说明 | 用法 |
|---|---|---|
lop~ | 低通滤波器 | [lop~ 截止频率] |
hip~ | 高通滤波器 | [hip~ 截止频率] |
bp~ | 带通滤波器 | 中间:截止频率, 右:Q 值 |
滤波器的注意点
lop~以外的滤波器,右入口无法直接连接vline~的出口- 请注意值(细线)与信号(粗线)的区别
延迟
| 对象 | 说明 | 用法 |
|---|---|---|
delwrite~ | 写入延迟缓冲区 | [delwrite~ $0-delay 缓冲区大小(ms)] |
delread~ | 从延迟缓冲区读出 | [delread~ $0-delay 延迟时间(ms)] |
cyclone/delay~ | 延迟(cyclone 库) | cyclone 库 |
关于 $0
$0 是分配给 Pd 每个补丁的 ID 编号。像 $0-delay 这样用在缓冲区名称中,就能防止复制补丁时名称冲突。
信号与值的转换
| 对象 | 说明 | 用法 |
|---|---|---|
sig~ | 值→信号 转换 | [sig~] |
snapshot~ | 信号→值 转换 | 输出 bang 到来时的信号值 |
metro | 定期输出 bang | [metro 周期(ms)] |
else/s2f~ | 信号→值(自动) | 不需要 bang,始终输出 |
else/f2s~ | 值→信号 | ELSE 库 |
else/numbox~ | 信号值的显示 | 显示用 GUI |
注意 DSP
信号相关的对象,不打开 DSP 就不会工作。请把控制台右上角的复选框设为 ON,或调高 output~ 的音量。
音频文件处理
| 对象 | 说明 | 用法 |
|---|---|---|
else/play.file~ | 音频文件的播放 | [else/play.file~ 文件名 循环(0/1) 自动播放(0/1)]。用 start/stop/loop 1 消息进行播放・停止・循环 |
else/stretch.shift~ | 变调・时间拉伸 | [else/stretch.shift~ 缓冲区大小 初始音高 初始速度]。音高: 0=原样, 1200=1oct(从左数第 3 个入口)/速度: 100=原样(%)(从左数第 4 个入口) |
else/xselect~ | 交叉淡化切换 | [else/xselect~ 声道数 淡化时间(ms)]。向左入口输入声道编号(0, 1, 2…)即可切换 |
else/xfade~ | 交叉淡化 | ELSE 库 |
else/rec.file~ | 录音 | [else/rec.file~ 文件名]。文件保存在与补丁相同的位置 |
soundfiler | 把 wav 数据读入数组 | read 文件名 数组名 |
tabplay~ | 播放数组的音频 | [tabplay~ 数组名] |
.wav | 非压缩音源的文件格式 | 用于示例音源等 |
自动演奏
| 对象 | 说明 | 用法 |
|---|---|---|
text define | 文本数据的定义 | [text define -k 文件名]。在运行模式下点击即可编辑・保存文本(Cmd (Ctrl) + S) |
text sequence | 文本的依次送出(收件方 值;) | [text sequence 名称 -g], auto:自动, bang:1 步, line 0:回到开头 |
else/drum.seq | 节奏机 GUI。用 bang 逐步播放 | [else/drum.seq 行数 列数]。输出 [行号 on(1)/off(0)] 格式的值列表 |
else/tempo | BPM 速度输出 | [else/tempo BPM -mul 倍数] |
random | 随机整数输出 | [random 最大值] |
micro:bit 联动(OSC)
| 对象 | 说明 | 用法 |
|---|---|---|
else/osc.receive | OSC 数据的接收 | [else/osc.receive 端口号] |
else/osc.route | 按 OSC 地址分配 | [else/osc.route /地址1 /地址2] |
netreceive | 经由网络接收数据 | [netreceive -u -b 端口号](-u:UDP, -b:二进制) |
oscparse | 依据 OSC 协议解析数据 | 解析 netreceive 的输出。输出 [地址 值] 的列表 |
list trim | 去掉列表开头的选择符 | 使 oscparse 输出的 [地址 值] 能被 route 等处理 |
list | 把多个值或符号捆在一起 | [list] |
cyclone/scale | 值的映射 | [scale 输入min 输入max 输出min 输出max] |
clip | 值的裁剪 | [clip 下限 上限] |
else/smooth~ | 平滑(信号) | ELSE 库 |
GUI
| 对象 | 说明 | 操作 |
|---|---|---|
| bang | 发送触发 | 点击发送 |
| toggle | 0/1 切换 | 点击切换 |
| 数字框 | 数值的显示・输入 | 拖动改变数值 |
| 水平滑块 | 值的连续输入 | 右键→属性 设定上限・下限 |
| V. Radio | 纵向排列的单选按钮。点击后输出选中的索引(0〜开关数−1)。可从画面右侧的 Options 更改开关数 | 用 Put > New > V. Radio 放置。选中状态下从画面右侧 Options 更改开关数 |
其他
| 对象 | 说明 | 用法 |
|---|---|---|
print | 在控制台显示 | 用于调试 |
comport | 串口通信 | [comport 设备编号 波特率] |
pd 子补丁名 | 子补丁 | 在补丁内创建子补丁 |
clone 补丁名 | 补丁的复制 | 生成多个相同的补丁 |
小知识
韦伯-费希纳定律
该定律指出,人的主观感觉量与物理量的对数成正比。要让音量的变化显得自然,可以把音量值取 4 次方。
乐音的构造
乐器那样的声音,具有由基音(最低的音)与其整数倍的泛音合成的构造。组合多个 osc~,就可以做出各种各样的音色(加法合成)。