脚本基础
用几行 JavaScript 读取实时数据、做一些计算,并按名字控制节点和播放器。
Script 节点对流经它的数据运行 JavaScript。由触发器驱动的脚本每次触发运行一次。由其他节点驱动时,它每一帧都运行。
打开编辑器#
双击 Script 节点,或点击它设置中的 Editor ⤢。全屏编辑器有行号、语法着色,以及基于这个节点真实数据键的 Tab 补全。它还有实时检查:你停止输入片刻后,脚本会用当前的实时数据运行一遍。错误会在底部以红色显示,✓ runs on live data 表示没有问题。
▶ Run 应用脚本并运行一次。Close 应用脚本并返回 Patch。在此之前,节点会继续运行它上一个可用的版本。
读和写#
直接写名字即可。读取看到的是当前数据,写入的内容成为节点的输出:
system.beep = CDJ1.beat.bar; // beep every bar
value.inChorus = (CDJ1.phrase.current == "CHORUS") ? 1 : 0;
value.bpmRounded = Math.round(CDJ1.beat.currentBpm);
读取不存在的数据键会报错并显示完整路径,所以拼写错误会马上显现。你没有设置的数据键会原样通过。
需要同时用到原始值和修改后的值时,使用 source.(输入)和 output.(输出):
metadata.title = source.metadata.title + " [LIVE]";
按名字控制其他节点#
任何脚本都能通过节点名字访问每个节点的每个设置:
output.MainRouter.router.active = "Input 2"; // switch a router
output.FXScript.node.bypassed = true; // bypass a node
output.OSC.node.stopped = true; // stop a node
不想把名字写死?parent 是拥有输入数据的节点(Device 或最后一个 Router)。child 是这个脚本输出连到的节点:
var bar = source.parent.beat.bar;
output.child.node.bypassed = true;
控制播放器#
写入 setting.*、util.*、led.* 或 status.* 数据键会改变真实的 CDJ 或 DJM:
output.CDJ1.setting.quantize = 1; // player setting
output.CDJ1.led.sync = 1; // sync off? → press Sync
output.CDJ1.playback.state = "paused";
绘图#
把 Script 接到 Graphic 节点,用 g.* 绘图:
g.clear("#101014");
g.rect(4, 4, source.CDJ1.beat.beatInBar * 40, 24, "#f32a8b");
g.text(8, 60, source.CDJ1.metadata.title, "#ffffff");
g.waveform(0, 80, 640, 60, "detail", 1);
Graphic 节点可以输出到屏幕或 NDI。
