按键脚本
在FreePiano内部, 所有的操作都是以“命令”的形式存在的,而命令的组合是非常多变的。从1.8版开始,命令也支持多国语言了, 这样命令就更容易被理解了。
提到脚本, 大部分可能都会马上产生恐惧。 确实,作为命令,只要写错一点,计算机就无法正确地执行。 但是FreePiano的脚本与其他脚本不同:
- FreePiano的脚本最多只能当成命令,它没有复杂的逻辑控制,也没有各种各样的公式和符号,所以是很容易学习的。
- FreePiano的脚本只是用来输入的,在FreePiano内部并不保存脚本。如果您的某一行脚本输入错误了,那么这行将不能被识别, 就跟没输入一样。 其他的地方完全不受影响。
- FreePiano会自动帮你转换脚本的格式,所以有没有写对很容易看出来。
所以不用害怕, 让我们来学习FreePiano的高级配置命令吧!
新的命令编辑方式
从FreePiano 1.7开始,脚本可以在按键配置的界面上直接修改了,所以现在已经不建议再直接编辑FreePiano的map文件,除非你有大量的批处理操作,直接修改文件能方便一些。
之前在键盘布局的介绍中我们已经看到过命令的编辑界面了,下面我们再看一下这个界面:
手动编写命令时,我们只需要关心界面中间部分的脚本区域就可以了, 如果自动应用
这个选项被选中,那么编辑完成后您甚至不需要点应用
按钮来让脚本生效。
如果不小新修改了脚本,你可以点刷新
按钮,这样就会放弃当前的修改,恢复之前按键对应的脚本。
命令绑定方式
我们编写的脚本是绑定在按键上,在键盘按下或松开时执行。FreePiano中定义了以下绑定方式:
英文命令 | 中文命令 | 说明 |
Keydown | 键盘按下 | 命令会在键盘按下时执行。 |
Keyup | 键盘松开 | 后面跟随的命令将被在键盘松开时执行。 |
Label | 标签 | 定义按键上显示的文字,如果没有定义标签,FreePiano会帮你根据内容自动生成一个。 |
Color | 颜色 | 定义按键按下时的颜色,如果没有定义,将使用配置中的自动颜色值。 |
Sequence | 序列 | 指定按键命令的序列分割,每次按键只会触发当前序列的命令,然后自动切换到下一个序列。 |
按键绑定命令的格式为:
在按键命令绑定界面上编写脚本时,FreePiano会自动帮你修改按键名称
为了方便脚本编写,在FreePiano的按键绑定窗口上修改脚本时,FreePiano会强制帮你把命令绑定到当前选中的按键上,所以在编写时,可以随便写一个按键名称就好。 </div> ## 音符命令 下面的格式说明中, 我们统一将命令绑定在`键盘按下 A`上,前面已经说过FreePiano会帮你自动修改名称,所以这些命令拷贝到任何按键上都可以直接使用。 音符命令格式如下: 通道可以是`输入_0`到`输入_15`, 您也可以直接写一个数字,FreePiano会帮你自动转换。 音符的名称这里要用统一的音名表示。 这里还可以填写一个力度, 最小0,最大255。 如果填写127或者不填,FreePiano会使用100%的力度。 这个力度值成为“独立力度”,它和通道的力度是成比例关系的, 换算公式为: 换算过后,大于127的力度会认为是最大力度,而小于5的力度会被认为是按键抬起。 示范:一键多音脚本 将上面的命令拷贝到任何一个按键的脚本里, 然后按下这个按键就可以听到效果。 示范:音符序列脚本 ## 参数修改命令 参数修改有2种,一种是全局参数,比如曲调,另外一种是通道参数,比如力度。 全局命令格式: 通道参数命令的格式是: 可修改的参数有:
英文名称 | 中文名称 | 类型 | 说明 |
KeySignature | 曲调 | 全局 | 当前的曲调,值的范围时-4到7 |
Group | 分组 | 全局 | 当前的键盘分组 |
Volume | 总音量 | 全局 | FreePiano的输出音量 |
Velocity | 力度 | 通道 | 通道的力度 |
FollowKey | 跟随曲调 | 通道 | 当前通道是否跟随曲调 |
Transpose | 移位 | 通道 | 以一个半音为单位的音符移位 |
FollowKey | 八度 | 通道 | 以1个八度(12个半音)为单位的移位 |
Channel | 通道 | 通道 | 定义一个输入通道所对应的输出通道 |
Pitch | 弯音 | 通道 | 类似弯音轮的效果,值可以从-64到64,代表降低2个半音到升高2个半音 |
Program | 乐器 | 通道 | 选择通道所使用的乐器 |
BankMSB | 乐器组1 | 通道 | 选择乐器组 |
BankLSB | 乐器组2 | 通道 | 选择乐器组 |
Sustain | 延音 | 通道 | 延音踏板 |
Modulation | 颤音 | 通道 | 颤音轮 |
ChannelVolume | 通道音量 | 通道 | 单独控制每个通道的音量,需要音源支持 |
ChannelPan | 通道声像 | 通道 | 单独控制每个通道的声像,需要音源支持 |
英文 | 中文 | 说明 |
Set | 设置为 | 新值 = 值 |
Inc | 增加 | 新值 = 当前值 + 值 |
Dec | 减少 | 新值 = 当前值 - 值 |
Flip | 反转 | 新值 = 值 - 当前值 |
Press | 脉冲 | 新值 = 值; 20毫秒以后, 新值 = 当前值 |
Release | 释放 | 新值 = 值; 任意一个按键抬起前,新值 = 当前值 |
Set10 | 设置十位 | 新值的十位 = 值的十位 |
Set1 | 设置个位 | 新值的个位 = 值的个位 |
SyncSet | 同步设置 | 同步设置会再下一次按键之后才生效 |
SyncInc | 同步增加 | 同步设置会再下一次按键之后才生效 |
SyncDec | 同步减少 | 同步设置会再下一次按键之后才生效 |
SyncFlip | 同步反转 | 同步设置会再下一次按键之后才生效 |
SyncPress | 同步脉冲 | 同步设置会再下一次按键之后才生效 |
英文命令 | 中文命令 | 说明 |
Play | 播放 | 播放乐曲 |
Record | 录制 | 开始录音 |
Stop | 停止 | 停止播放或录音 |
MIDI | MIDI | 发送原始的MIDI消息。 |
Menu | 菜单 | 可以用按键弹出主菜单。 |