iOS端自动弹奏按键精灵脚本编写与使用
iOS端自动弹奏按键精灵脚本编写与使用
由于游戏内触屏不精准,音符时长难以控制,多音/和弦指法和已有乐器并无联系,导致手动曲谱弹奏效果很差。因此利用脚本来自动弹琴成为了很有必要的手段。
准备工作
安装手机端按键精灵需要越狱,可自行百度。如果你不准备给自己的iPhone越狱的话,那么你可以放弃继续看这个攻略了。安装按键精灵的教程如下:[http://bbs.anjian.com/showtopic-652186-1.aspx]
由于在手机端编写脚本很麻烦,建议使用电脑端编写,然后通过QQ之类的软件发送到手机端。电脑端写代码任何文本编辑器都可以,比如最常用的Word都行,虽然黑坨坨一堆代码看的很乱。个人Mac上用的是Sublime Text来写,不同的函数自变量之类的都自动用不同颜色区分看起来很舒服。
按键精灵基础函数介绍
关于手机像素点的介绍和基础触按键的介绍可以参看下面的链接[http://bbs.anjian.com/showtopic-604658-1.aspx]当然你也可以自行百度学习。这里简单介绍一下。
手机屏幕是由像素点组成的,比如iPhone 6s就是750*1344个像素点组成。从左上到右下建立坐标系。x取0到750的整数,y取0到1344的整数。
TouchDown x, y, n
这个函数就是按键精灵按下手机屏幕上(x,y)这个坐标位置的点。其中n为手指的标记,比如取1-10代表10个不同的手指,单音演奏的时候可以都默认用同一个,涉及到和弦和多轨道旋律演奏就要同时用到几个不同的手指。TouchUp n
就是弹起标记为n的手指按下的按键。Delay t
就是等待t毫秒
单旋律曲谱编写与示范
结合第3部分的知识,那么弹奏某个音符,时长为t的操作,只需要通过按键精灵按下该音符坐标的位置,Delay t时间,再弹起就可以做到。
换成代码就是
TouchDown x, y, n
Delay t
TouchUp n
当然由于要反复弹很多单音,这3个函数可能要按这个顺序反复调用,因此我们可以专门编写一个函数来使得代码更加简洁。关于音符坐标怎么确定可以通过按键精灵脚本录制,来获得游戏内3个8度,一共21个音的坐标位置。如下图所示,找到脚本录制的地方。
打开游戏找到自由演奏的地方,点击按键精灵的浮窗来录制。
结束录制后找到按键精灵内录制好的脚本。
点击右上角来编辑脚本代码。
这里就可以看到录制的脚本,也就是你刚刚按屏幕的所有操作自动录制转成的代码,其中那些坐标就是刚刚你弹奏的音符的坐标,建议从左下依次弹完一个8度,然后弹中音,最后高音。不过由于距离间隔是一样的,时机上你只录制3个音,用等差数列也可以推导出来。录制21个音然后每行去线性拟合坐标的话会比较精准一些。单音弹奏函数Note的编写
Function Note(n1,n2,beat)
TouchDown n180,n2190-30,1
Delay beat1000
TouchUp 1
End Function
这里我的21个音的坐标分别是(80,160) (80,350) (80,540)....(160,160)(160,350)(160,540)...因此就有了第2行TouchDown n180,n2190-30,1 这么写,实际上就是个等差数列的网格。
这里的beat代表拍子的数目。不懂乐理的可以自动百度一个比如一个bpm120的曲子,代表120 beats per mins,每秒钟120拍,每拍就是0.5s=500ms。 对于一个4/4拍的曲子,就是1/4音符为1拍,每小节4拍。
我这里第3行代码Delay beat1000就是代表了这个音弹拍子数乘以1000ms的时间,你可以通过修改这个1000来改变整首曲子的速度。这里相当于bpm60的速度。
然后我左边n1代表这个里21个音3行的行数,n2代表列数。也就是n1取1,2,3分别代表低音,中音,高音,n2取1,2,3...代表do,re,mi....单音曲谱代码示范
Function Note(n1,n2,beat)
TouchDown n180,n2190-30,1
Delay beat*1000
TouchUp 1
End Function
Call Note(2,6,0.5)
Call Note(2,5,0.5)
//
Call Note(2,2,1.5)
Call Note(3,1,0.5)
Call Note(2,7,0.5)
Call Note(2,5,0.5)
Call Note(2,3,0.5)
Call Note(2,2,0.5)
//
Call Note(2,3,3)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
//
Call Note(2,2,1.5)
Call Note(3,1,0.5)
Call Note(2,7,0.5)
Call Note(2,5,0.5)
Call Note(2,3,0.5)
Call Note(2,2,0.5)
//
Call Note(2,3,3)
Call Note(3,1,0.75)
Call Note(2,7,0.25)
//
Call Note(2,6,1.5)
Call Note(2,7,0.5)
Call Note(2,6,0.5)
Call Note(2,7,0.25)
Call Note(2,6,0.25)
Call Note(2,5,0.5)
Call Note(2,2,0.5)
//
Call Note(2,3,0.5)
Call Note(2,5,0.5)
Call Note(2,2,0.5)
Call Note(2,1,0.5)
Call Note(1,6,1)
Call Note(2,6,0.5)
Call Note(2,3,0.5)
//
Call Note(2,2,0.5)
Call Note(2,3,0.5)
Call Note(2,2,0.5)
Call Note(1,6,0.5)
Call Note(2,2,1)
Call Note(2,3,1)
//
Call Note(1,6,3)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
//
Call Note(2,2,1.5)
Call Note(3,1,0.5)
Call Note(2,7,0.5)
Call Note(2,5,0.5)
Call Note(2,3,0.5)
Call Note(2,2,0.5)
//
Call Note(2,3,3)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
//
Call Note(2,2,1.5)
Call Note(3,1,0.5)
Call Note(2,7,0.5)
Call Note(2,5,0.5)
Call Note(2,3,0.5)
Call Note(2,2,0.5)
//
Call Note(2,3,3)
Call Note(3,1,0.75)
Call Note(2,7,0.25)
//
Call Note(2,6,1.5)
Call Note(2,7,0.5)
Call Note(2,6,0.5)
Call Note(2,7,0.25)
Call Note(2,6,0.25)
Call Note(2,5,0.5)
Call Note(2,2,0.5)
//
Call Note(2,3,0.5)
Call Note(2,5,0.5)
Call Note(2,2,0.5)
Call Note(2,1,0.5)
Call Note(1,6,1)
Call Note(2,6,0.5)
Call Note(2,3,0.5)
//
Call Note(2,2,0.5)
Call Note(2,3,0.5)
Call Note(2,2,0.5)
Call Note(1,6,0.5)
Call Note(2,2,1)
Call Note(2,3,1)
//
Call Note(1,6,3)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
//
Call Note(2,3,0.5)
Call Note(2,2,0.5)
Call Note(2,5,0.5)
Call Note(2,3,0.5)
Call Note(2,2,1)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
//
Call Note(2,2,0.5)
Call Note(2,1,0.5)
Call Note(2,5,0.5)
//小颤音//
Call Note(2,2,0.2)
Call Note(2,1,0.1)
Call Note(2,2,0.2)
Call Note(2,1,1)
Call Note(2,2,0.5)
Call Note(2,1,0.5)
//
Call Note(1,6,0.5)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
Call Note(2,3,0.5)
Call Note(2,2,1)
Call Note(2,3,0.5)
Call Note(2,5,0.5)
//
Call Note(2,3,3)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
//
Call Note(2,3,0.5)
Call Note(2,2,0.5)
Call Note(2,5,0.5)
Call Note(2,3,0.5)
Call Note(2,2,1)
Call Note(3,1,0.75)
Call Note(2,7,0.25)
Call Note(2,3,0.5)
Call Note(2,2,0.5)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
Call Note(2,1,1)
Call Note(1,6,0.5)
Call Note(2,3,0.5)
//
Call Note(2,2,0.5)
Call Note(2,3,0.5)
Call Note(2,2,0.5)
Call Note(1,6,0.5)
Call Note(2,3,1)
Call Note(1,6,0.5)
Call Note(2,2,0.5)
//
Call Note(2,3,3)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
//
Call Note(2,3,0.5)
Call Note(2,2,0.5)
Call Note(2,5,0.5)
Call Note(2,3,0.5)
Call Note(2,2,1)
Call Note(3,1,0.75)
Call Note(2,7,0.25)
//
Call Note(2,3,0.5)
Call Note(2,2,0.5)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
Call Note(2,1,1)
Call Note(2,2,0.5)
Call Note(2,1,0.5)
//
Call Note(1,6,0.5)
Call Note(2,6,0.5)
Call Note(2,5,0.5)
Call Note(2,3,0.5)
Call Note(2,2,1)
Call Note(2,3,0.5)
Call Note(2,5,0.5)
//
Call Note(2,6,7)这里开头就是定义了Note这个单音演奏的函数,然后反复调用这个这个单音函数一个音一个音来弹。//双斜线在代码里是注释用的,实际不会运行,一般用来让自己理解这里你写了啥,做个标记,我这里就把每小节分割了一下方便查错,你也可以多写一下这里是第几小节,特别是比较长的谱子等会你都找不到北了。脚本运行
电脑端写好了代码通过QQ之类的发送到手机,并直接粘贴覆盖掉刚刚我说的你录制脚本的代码,然后游戏内通过浮窗,点击运行就可以自动弹奏了。