TuttiDAW 扩展
带预设和参数加载任意 TuttiDAW 乐器、MIDI 效果器或音频效果器;声部、编组和 Open in TuttiDAW。
像 .lpf 或 .room 这样的 Strudel 控制只是笼统地描述声音。TuttiDAW 增加了三个方法,
直接指名真实设备(就是你在工作室浏览器里看到的那些),并带上它们的工厂预设和参数:
| 方法 | 添加什么 | 放在哪里 |
|---|---|---|
.inst(name, params) |
一个乐器(每个声部一个) | 声部的乐器位置 |
.midifx(name, params) |
一个 MIDI 效果器 | 乐器之前,按调用顺序 |
.fx(name, params) |
一个音频效果器 | 乐器之后,按调用顺序 |
它们是 TuttiDAW 独有的:用到它们的程序无法在 strudel.cc 上播放,所以 /code 页面会为这样的 程序隐藏 “Open in strudel.cc” 链接。
乐器:.inst
名字是一个设备,或者是设备加上它的某个工厂预设,中间用冒号连接。大小写和标点不影响匹配。
setcpm(30)
bass: note("c2 [~ c2] eb2 [~ g1]").inst("Drift:Deep Bass")
keys: chord("<Cm7 Ab^7 Fm7 G7>").voicing().inst("Electric")即使声部同时写了 s(...),也由 .inst 决定乐器。在鼓声部上,s(...) 仍然负责选择打击垫,
所以这些鼓名可以在任何鼓组上演奏:
s("bd*2 [~ bd] sd ~, hh*8").inst("Drum Rack:909 Core Kit")音频效果器:.fx
效果器按你调用的顺序加在乐器之后。多次调用 .fx 就能搭出一条效果链。
note("<[c3,eb3,g3] [bb2,d3,f3]>")
.inst("Wavetable")
.fx("Chorus:Wide Classic")
.fx("Reverb:Large Hall", { decayTime: "4s", dryWetBalance: 0.35 })MIDI 效果器:.midifx
MIDI 效果器在音符进入乐器的路上改变它们,例如 Arpeggiator 把按住的和弦变成快速的琶音。 片段保留你写下的音符;效果器像在工作室里一样实时演奏它们。
note("<[c3,eb3,g3] [ab2,c3,eb3]>")
.midifx("Arpeggiator", { style: "UpDown", rate: "1/16" })
.inst("Operator")note("c3 ~ f3 ~").midifx("Chord:Minor 7 Chord").inst("Electric")参数
第二个参数是一个参数值对象:
- 键是设备的参数键(
decayTime、cutoff、dryWetBalance);参数在 Live 中唯一的标签 也可以用。设备目录列出了每个键的范围和单位。 - 数字使用参数自己的单位(Hz、ms、dB、半音)。带单位的字符串会自动换算:
"250ms"、"2s"、"-6dB"、"1.2kHz"、"30%"。 - 选项可以写它的标签(
"UpDown"、"1/16"、"Dorian")或从 0 开始的序号; 开关写true或false。 - 两个保留键:
on打开或关闭设备,id在同一个声部用了两台相同设备时给设备命名。
s("bd*4, ~ sd, hh*8")
.fx("Saturator", { drive: "6dB" })
.fx("Compressor", { threshold: "-18dB", ratio: 4, attack: "10ms" })超出参数范围的值会被限制在范围内,并给出警告。设备参数目前只接受常量;把 "<300 600>"
这样的模式写成设备参数会被报告,暂时不生效。Strudel 控制(.lpf("<300 600>"))已经可以
随时间变化。
Strudel 控制与设备一起用
Strudel 控制在设备旁边照常工作:.lpf(...) 仍然会加一台 Auto Filter。当声部自己指名了同类设备时,
控制会作用到那台设备上,而不是再加一台:.room(0.4) 配合 .fx("Reverb:...") 设置的是
那台 Reverb 的干湿比。
内联控件:slider 和 toggle
slider(value, min, max) 在编辑器里的数字旁边放一个小滑块;播放时拖动它就会改变程序。
toggle(1)(TuttiDAW 新增)在那里放一个开关。
note("c2*8").s("sawtooth").lpf(slider(800, 200, 4000))stack(
s("bd*4"),
s("hh*8").mask(toggle(1))
)声部变成轨道
程序里每个带标签的声部就是一条轨道。/code 页面上的 Open in TuttiDAW 会把程序保存为工作室项目:
- 程序放在一条编组轨道上:它的
{}按钮打开代码,在那里求值会更新所有声部; - 每个声部是编组里的一条轨道,带着它的乐器、效果器,以及一个装着该声部代码的 Pattern Clip;
- 变化中的控制会变成片段包络。
手动编辑某个声部(它的音符,或者代码设置过的参数)会让这个声部脱离代码,从而保留你的修改。 Re-attach 会把它交还给代码。单独的 Pattern Clip(放在 MIDI 片段里、没有编组的代码) 只演奏音符:代码里指名的设备在那里不会生效。