《MainStage 使用手册》
- 欢迎使用
在 MainStage 中创建脚本编辑器 MIDI 插件控制
本节概述了如何使用脚本编辑器来创建标准界面控制器,如脚本编辑器插件的滑块和菜单。只有“名称”是你必须为新参数定义的强制属性。这是基本滑块的默认值。另外,你可以使用更多属性来更改控制的类型和功能。
载入相应的 Tutorial 设置以在脚本编辑器中查看脚本。这有助于你理解语法结构以及代码和注释的布局。请参阅使用脚本编辑器。
可选属性
类型:键入以下一种字符串作为值:
“lin”:创建线性推子。
“log”:创建对数推子。
“momentary”:创建一个瞬时按钮。
“menu”:创建菜单。
菜单类型需要附加的 valueStrings 属性(显示在菜单中的一系列字符串)。请参阅 Tutorial 脚本 13。
defaultValue:键入一个整数或浮点数以设定默认值。如果未键入值,那么默认为 0.0。
minValue:键入一个整数或浮点数以设定最小值。如果未键入值,那么默认为 0.0。
maxValue:键入一个整数或浮点数以设定最大值。如果未键入值,那么默认为 1.0。
numberOfSteps:键入一个整数以定义步进数。
单位:键入一个字符串作为插件控制中的单位描述。如果不键入值,则默认不显示单位。
text:键入文本以在插件 UI 中创建分隔器或标头。
Tutorial 脚本 11:创建滑块
在 MainStage中,在脚本编辑器窗口中键入以下内容,以创建一个名为“Parameter x”的滑块,其默认范围为 0 到 1。滑块的中间点值设定为 0.5。
var PluginParameters = [{name:"Parameter x", defaultValue:0.5}];
Tutorial 脚本 12:滑块范围
在 MainStage中,在脚本编辑器窗口中键入以下内容,以创建一个线性滑块类型,具有五个可能的位置(步进),其范围为 0 到 5。
var PluginParameters = [{name:"Octaves", defaultValue:3, minValue:0, maxValue:5,
numberOfSteps:5, unit:"octaves", type:"lin"}];
Tutorial 脚本 13:创建菜单
在 MainStage中,在脚本编辑器窗口中键入以下内容,以创建一个名为“范围”的菜单,此菜单选项包括“低”、“中”和“高”。
var PluginParameters = [{name:"Range", type:"menu", valueStrings:["Low", "Mid", "High"]}];
动态隐藏或显示 MIDI 插件控制
在复杂的 MainStage 脚本中,动态隐藏或显示参数控制可能有所帮助。例如,对于一个菜单项,可让你选取要显示的一组控制。在脚本编辑器窗口中键入以下内容,以创建这些控制器类型。
var PluginParameters = [{name:'uno'}, {name:'dos', hidden:true}];
调用
UpdatePluginParameters()
以进行动态更改。
获取插件参数值
使用参数名称调用 GetParameter(),以使用参数的当前值返回一个值(数字对象)。GetParameter() 通常用在 HandleMIDI 函数或 ProcessMIDI 函数内。
在 MainStage中,此代码示例将调制事件转换为音符事件,并提供了一个用来确定音符长度的滑块。
“/*”之后的文本显示解释 JavaScript 代码的注释。
var PluginParameters = [{name:"Note Length", minValue:0, maxValue: 100, unit:"%"}]; /* create a slider (default range 0 - 100) */
function HandleMIDI(event) {
if(event instanceof ControlChange && event.number == 1) { /* if event is MIDI cc1 (modwheel) */
var note = new NoteOn; /* create a NoteOn object */
if(event.value == 0)
/* because modwheel range is 0-127 and pitch range is 1-127, convert a modwheel value of 0 to 1 */
event.value = 1;
note.pitch = event.value; /* use cc value as note pitch */
note.velocity = 100; /* use velocity 100 */
note.send(); /* send note on */
var off = new NoteOff(note); /* create a NoteOff object that inherits the NoteOn pitch and velocity values */
var delayInBeats = GetParameter("Note Length")/100 + 0.1; /* retrieve the parameter value of the slider you created (add 0.1 to guarantee note on and off are not simultaneous) */
off.sendAfterBeats(delayInBeats); /* send note off after the length in beats is set via the slider */
}
}