本项目已用 Spring 框架重构,ff14_auto_spring 加入了 Json 和 YAML 文件的支持,同时代码扩展性高。
主程序是ff14_auto.exe,txt文件是曲谱文件,程序通过读取曲谱文件,根据曲谱文件里的内容建立链表,再模拟成键盘信号输出,就能实现游戏里自动弹琴。
其实这个版本是修改了几次之后的版本。
之前的版本 代码太丢人了 写的跟坨屎样
程序需要管理员权限,请右键-属性-兼容性-勾选 以管理员身份运行此程序-确定
游戏中的键位设置,从左到右:
黑键键位:1 2 3 4 5 6 7 8 9 0 K L O P ,
白键键位:Z X C V B N M A S D F G H J Q W E R T Y U I
目前程序不支持自定义键位,必须在最终幻想14中设置成这种键位。
打开程序,若曲谱文件和程序在同一个文件夹下,则直接输入曲谱名就行(注意要带后缀),若不在同一个文件夹下,输入绝对位置或相对位置均可。
若输入文件名有误,则会提示 cannot find the file: [文件名]
,重新输入即可。
程序打开文件成功后,会提示----切换到最终幻想14游戏中开始弹奏----
,这时程序会每隔100ms检测当前激活的窗口是否为最终幻想14,当切换到最终幻想14窗口后,程序会自动开始键盘信号的模拟。
- 第一行:调号 (C,D,E,F,G,A,B) ,'#'和'b'作为升号和降号。例
D#
- 第二行:BPM (曲速),2~3位的数字
- 第三行:音符。
-
首字符是数字 (表示不同的音高),同样能用'#'和'b'紧跟首字符表示升号和降号。
-
用'.'和'`'表示低音点和高音点,写在音高之后。
-
用'_'和'-'表示时值减半或加一拍,通过复数的'_'或'-'可以构成全音符、二分音符等不同时值的音符。 ( 注:不能混用 )
具体如下:( X表示音高 )
- 全音符:X---
- 二分音符:X-
- 四分音符:X
- 八分音符:X_
- 十六分音符:X__ ( 2* '_' )
- 三十二分音符:X___ ( 3* '_' )
-
用':'表示附点音符,要写在音符的最后面。
-
每个音符用一个空格隔开,当需要改变调号和BPM的时候,音符末尾要有空格,另起一行写调号,后一行写BPM。调号和BPM不能单独改变。 再后一行写音符。
-
文件最后的音符后面不要有空格。
-
写的时候不要开中文输入法,会造成符号错误。
例:
C 120 1 2 3 1 1 2 3 1 D 120 3 4 5 3 4 5
-
更新了同时按下多个按键的功能。
例:
1.23.4`56.7`---
对于连在一起的音符,程序会以 20ms 为间隔依次触发按键,只有最后一个音符后的时间是有效时间。
-
把弹奏的音域限制在 ff14 的音域内。如果超过 ff14 乐器的音域,就会把整个曲子降到 ff14 的音域内,如果低于 ff14 的音域就直接忽略(音调变成0)
-
之前是用的 Sleep() 来设置延时,但是频繁的调用 Sleep() 会因为分配 CPU 时间从而造成性能问题。所以用了一个比较笨的无限循环判断当前的毫秒数,达到设定的毫秒数就退出循环
装睡。
实测 Sleep(10) 消耗时间 16ms 左右,循环消耗 11ms 左右。(i5-9300H,16G RAM,GTX1650,512GB SN720)
当然这种替代方法有缺点,CPU 占用达到了 20% 之多。之前使用 Sleep() 时 CPU 占用基本上看不出来。不过电脑不好应该不会影响这个方法的准确度,毕竟循环的时间准确度取决于每次循环的间隔时间。
ps:图标也是我画的 :D
B站个人空间:https://space.bilibili.com/37864003 里面有介绍视频。