ff14高级触发器不正经教程(4)-诗人自动演奏触发器教程。我爱你们,也深爱着这个世界

乐谱是可移植的!如果制作了乐谱并愿意与大家分享请随时联系我,我会尽可能在第一时间加入触发器并更新github。爱你们❤
本专栏的前半部分介绍触发器以及工作原理,后半部分介绍如何制作与分享乐谱。如果有搞不定的欢迎留言或者私信。后半段附录是没什么用的,在看到“正文部分结束了”这句话时,后面的东西就可以不用看了。晚些时候会上传演奏效果,视频链接会放在评论区~
虽然不太可能,但如果能形成一个社区的话我会开发远程下载谱子的功能。
演奏功能只是6.2.2版本AuraCan的一个组件,目前尚未上传至github。感兴趣的朋友可以私信我,我可以把这个独立组件拆出来先发你。
AuraCan的github仓库:https://github.com/raine01/ff14AuraCan
优点:
使用+=-与数字1-7表示三个八度的白健,使用qwe与数字1-5表示三个八度的黑键。会认钢琴卷就能打谱飞快。
移植性强,无需安装其他第三方软件,能运行高级触发器(大概)就能自动演奏。
键位好记,26个字母+10个数字即可完成配置,无需特殊符号。
可以后台演奏。
代码透明可见,你可以随时评估其安全性。
你可以在谱子里写注释。
缺点:
没法长按琴键,小提琴或者钢琴的延音无法复现。
导入触发器时会报警告,如果有不法分子篡改了触发器的代码极端情况下可能会搞崩电脑或者造成数据泄露。

我爱你-Ayasa绚沙(节选)
曲谱改编自
https://www.bilibili.com/video/BV1FT411577g/
原视频
【Ayasa】原创曲目《我爱你》
我想将这份感动分享给大家,哪怕只有其中的35个小节~我爱你们,也深爱着这个世界。
高级触发器官方文档(执行脚本章节)
https://github.com/paissaheavyindustries/Triggernometry/wiki/Triggernometry-FAQ-and-examples#scripting
感谢在我第一期不正经系列触发器教程下评论回复的朋友提醒我触发器内执行脚本的动作,由衷感谢。

早在6.1.4版本的AuraCan就已经制作出自动演奏的触发器了。但由于移植性较为糟糕因此6.1.5开始不再集成自动演奏,6.1.4版本也并未上传至github。现已加入6.2.2!这篇专栏将会介绍该触发器的实现原理,含有较大部分的C#代码,但并不太需要懂得C#的知识或准备编辑器。

该组触发器分为两部分:乐谱集与演奏。

先来简单说下演奏的原理

循环执行同一个触发器,这个触发器只做两件事:
在若干毫秒后,使用两个参数(乐谱名与行序号)调用自身。
向触发器发送某一按键。
具体发送哪个按键取决于名为“rp_piano_乐谱名”的持久化表格变量的第一列的第index行的数据。具体等待多久则要取决于第二列。(见下图)

对于图中的示例,触发器会向游戏发送76(对应的按键为字母L),等待340毫秒后发送77(对应M),340毫秒后发送76,340毫秒后发送77,340毫秒后发送81……直到将整张乐谱(整个rp_piano_我爱你变量)处理完毕。名为演奏的触发器别勾选计划任务中的顺序执行按钮,否则发送按键的命令会大大拖慢演奏的节奏。

如果你使用和我相同的演奏触发器,并且计划手搓乐谱,这个网址会给你一些帮助,它展示了按键与keycode的关系:(点击上图右下方蓝色的地球图标也可以打开网页)
https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.keys?view=windowsdesktop-7.0

再来看看乐谱集:(遇到问题可以参考我的这篇专栏)

这个触发器甚至没有打算使用日志触发,在我的预期中它只需要右键然后执行即可。接下来我会附上该C#脚本的完整内容并稍稍做一些讲解。
对于技术力足够的朋友,我建议去github上拉一份高级触发器的源码,并经常更新。前辈们更新高级触发器的速度实在是太快了,我的不正经系列的教程跟不上高级触发器更新的速度。

接下来是乐谱的编写与移植
很遗憾,触发器并非上手即用,与多数自动演奏工具一样,我们需要先设置键位

无需设置键位的触发器我也做过一版,但是局限性实在是太大了,几乎演奏不了稍稍厉害一些的谱子。因为原本一个按键就能做到的工作按照默认键位需要使用两个按键。

上图来自视频https://www.bilibili.com/video/BV1FT411577g/请多多支持原作者。
我们来看看视频中乐谱的第一页,这个乐谱以四分音符为一拍,每小节四拍(每个下方没有横线的数字代表一个四分音符,有1条横线的音符代表一个8分音符,两条横线的代表16分音符)。bpm为88,乐谱名为我爱你。
乐谱的前两行分别是名字和bpm:
之后我们开始看乐谱的第一小节,上方为主旋律下方为伴奏,伴奏的四个音符都为0,我们不用管0。
第一小节的每个音符下方都有一条横线,代表他们为原本长度的一半。因此第一小节的每个音符后都要以逗号分割,并且后面有一个2。
乐谱第一小节第五个八分音符的3上面有一个点,代表这个音符需要升一个八度。我们在乐谱中使用+表示升八度,用-表示降八度。完整的对应关系如下:
如:
-1表示按下键盘上的A,对应的keycode为65
=4表示按下键盘上的K,对应的keycode为75
!1比较特殊,按下的是shift+O的组合键,对应的keycode是“16,79”(注意是英文逗号)
研究过触发器与上方C#代码的光呆可能已经注意到了,多个按键只需要把keycode使用逗号进行分割就可以一起发送到游戏内执行。没错,是这样。但注意一点,以组合键发送的时候功能键会贯穿整个命令,也就是说“!1=2-3”演奏出来的实际效果会是“!1+2=3”(2和3升了一个8度)所以打谱时建议把!1放在每一行的最后面。
代码中有一行校验:
这行校验的意思是:含有01234567qwe+=-,!之外字符的行不会被处理,这有什么用呢?请看下面一小段谱子:
我喜欢用汉字来表示接下来的几行是第几小节的内容,同时我喜欢用#来表示这一行被我注释掉了(以备之后需要修改的情况)。25小节使用钢琴演奏效果很棒,但使用ff14内的乐器感觉就不太好了,因此我删掉了这一小节并修改了26小节。
26小节同样是空音符的示例,本小节中有三个仅做停顿的四分音符,还有两个8分音符。
第4小节的00,0.5与两行相邻的00,1理论上有相同的效果。同理,你可以在每一行的逗号后写任何(不太离谱)的数字,以供触发器计算发送下一按键前等待的时长。
在编写完乐谱后使用下划线替换每个换行符,并将其放入代码中string piano后面的字符串中,下面是触发器中的乐谱:
如果想要在触发器中保留多个谱子的源代码,请复制动作而非触发器。触发器根据隐式id判断,不熟悉的情况下复制触发器是很危险的行为。

同时我很推荐大家在描述内写上谱子相关的信息,不然可能一时间分辨不出加载的是哪首曲子的谱子~

如何演奏谱子呢?超简单,切换诗人拿出乐器,然后在聊天框中输入宏命令:
我爱你是谱子的名字,也就是持久化表格变量的名字,也就是乐谱中第一个下划线前的字符。
正文部分结束了,下面是附录:
放上编译后的持久化表格变量,如果你生成后想要核对一下,可以使用这一份。注意,变量是持久化表格变量,变量名为乐谱名(第一列与第二列使用tab进行分割):
预祝情人节快乐~