问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

iOS端自动弹奏按键精灵脚本编写与使用

创作时间:
作者:
@小白创作中心

iOS端自动弹奏按键精灵脚本编写与使用

引用
百度
1.
https://tieba.baidu.com/p/7208629099

由于游戏内触屏不精准,音符时长难以控制,多音/和弦指法和已有乐器并无联系,导致手动曲谱弹奏效果很差。因此利用脚本来自动弹琴成为了很有必要的手段。

准备工作

  1. 安装手机端按键精灵需要越狱,可自行百度。如果你不准备给自己的iPhone越狱的话,那么你可以放弃继续看这个攻略了。安装按键精灵的教程如下:[http://bbs.anjian.com/showtopic-652186-1.aspx]

  2. 由于在手机端编写脚本很麻烦,建议使用电脑端编写,然后通过QQ之类的软件发送到手机端。电脑端写代码任何文本编辑器都可以,比如最常用的Word都行,虽然黑坨坨一堆代码看的很乱。个人Mac上用的是Sublime Text来写,不同的函数自变量之类的都自动用不同颜色区分看起来很舒服。

按键精灵基础函数介绍

  1. 关于手机像素点的介绍和基础触按键的介绍可以参看下面的链接[http://bbs.anjian.com/showtopic-604658-1.aspx]当然你也可以自行百度学习。这里简单介绍一下。

  2. 手机屏幕是由像素点组成的,比如iPhone 6s就是750*1344个像素点组成。从左上到右下建立坐标系。x取0到750的整数,y取0到1344的整数。

  3. TouchDown x, y, n
    这个函数就是按键精灵按下手机屏幕上(x,y)这个坐标位置的点。其中n为手指的标记,比如取1-10代表10个不同的手指,单音演奏的时候可以都默认用同一个,涉及到和弦和多轨道旋律演奏就要同时用到几个不同的手指。

  4. TouchUp n
    就是弹起标记为n的手指按下的按键。

  5. Delay t
    就是等待t毫秒

单旋律曲谱编写与示范

  1. 结合第3部分的知识,那么弹奏某个音符,时长为t的操作,只需要通过按键精灵按下该音符坐标的位置,Delay t时间,再弹起就可以做到。
    换成代码就是
    TouchDown x, y, n
    Delay t
    TouchUp n
    当然由于要反复弹很多单音,这3个函数可能要按这个顺序反复调用,因此我们可以专门编写一个函数来使得代码更加简洁。

  2. 关于音符坐标怎么确定可以通过按键精灵脚本录制,来获得游戏内3个8度,一共21个音的坐标位置。如下图所示,找到脚本录制的地方。
    打开游戏找到自由演奏的地方,点击按键精灵的浮窗来录制。
    结束录制后找到按键精灵内录制好的脚本。
    点击右上角来编辑脚本代码。
    这里就可以看到录制的脚本,也就是你刚刚按屏幕的所有操作自动录制转成的代码,其中那些坐标就是刚刚你弹奏的音符的坐标,建议从左下依次弹完一个8度,然后弹中音,最后高音。不过由于距离间隔是一样的,时机上你只录制3个音,用等差数列也可以推导出来。录制21个音然后每行去线性拟合坐标的话会比较精准一些。

  3. 单音弹奏函数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 n1
    80,n2190-30,1 这么写,实际上就是个等差数列的网格。
    这里的beat代表拍子的数目。不懂乐理的可以自动百度一个比如一个bpm120的曲子,代表120 beats per mins,每秒钟120拍,每拍就是0.5s=500ms。 对于一个4/4拍的曲子,就是1/4音符为1拍,每小节4拍。
    我这里第3行代码Delay beat
    1000就是代表了这个音弹拍子数乘以1000ms的时间,你可以通过修改这个1000来改变整首曲子的速度。这里相当于bpm60的速度。
    然后我左边n1代表这个里21个音3行的行数,n2代表列数。也就是n1取1,2,3分别代表低音,中音,高音,n2取1,2,3...代表do,re,mi....

  4. 单音曲谱代码示范

    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这个单音演奏的函数,然后反复调用这个这个单音函数一个音一个音来弹。//双斜线在代码里是注释用的,实际不会运行,一般用来让自己理解这里你写了啥,做个标记,我这里就把每小节分割了一下方便查错,你也可以多写一下这里是第几小节,特别是比较长的谱子等会你都找不到北了。

  5. 脚本运行
    电脑端写好了代码通过QQ之类的发送到手机,并直接粘贴覆盖掉刚刚我说的你录制脚本的代码,然后游戏内通过浮窗,点击运行就可以自动弹奏了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号