Home

Awesome

<!-- * @Author: moying * @Date: 2021-08-17 14:58:21 * @LastEditTime: 2021-08-17 17:55:58 * @LastEditors: Please set LastEditors * @Description: 自述文件 * @FilePath: \maimaiMuriDetector\README.md -->

maimaiMuriDetector

简介

一个maimai谱面无理配置检测器,目前已集成至MajdataEdit

a maimai beatmap muri notes detector

检测内容

目前maimaiMuriDetector只保证可以检测非dx谱面

目前maimaiMuriDetector可以检测:

未来计划实现的一些无理检测功能可见TODO

多押

若某一时间点,谱面中出现超过双押以上的行为,就会被视为多押,并给出警告。

如某一slide正在进行,此时出现一对each tap,则此时会被判定为多押。

maimaiMuriDetector检测多押时,会始终尝试正攻slide。换言之,在一个较慢的slide正在滑动时,出现一对双押不被允许的即便玩家实际操作时不会用手始终跟随slide滑动。

如果您的谱面是协力宴谱,或允许出现多押的宴谱,您也可以在使用时禁用多押检测。

以下几种情况在官方谱面中被认为可正攻,但可能会被maimaiMuriDetector认为是多押:

回旋类的slide(^ > <)有部分重合,以此情况写出的一笔画(如felys -final remix-)

felys

部分或完全重合的slide,如believe the rainbow的边框slide(部分重合)、altale最后一个slide(完全重合)等

撞尾

所有的slide在结束时会进入A区,一些slide在中途也会经过A区(如pp/qq型、V型等)。

如果这些slide经过A区时,此A区有note进入了判定区间,则这个note会被意外的通过内屏触发。这样的情况被称为撞尾无理

maimaiMuriDetector检测撞尾时,会始终正攻slide。换言之,maimaiMuriDetector会模拟玩家始终用手紧紧跟随slide的情况。即便一些撞尾问题可以通过提前滑或延后滑的方式解决,但是这些问题仍然会被视为无理配置。

关于撞尾检测的精度问题,可见下文

使用

目前该功能已集成至MajdataEdit,您可以直接下载Majdata组合,并在MajdataEdit中的 菜单栏 -> 工具 -> 谱面无理检测中使用本功能。

如果您想直接使用本脚本,则需要python 3.6以上运行环境。

maiMuriDetector.py是核心文件,您可以直接使用,也可以作为模块调用。

直接使用

通过python运行maiMuriDetector.py,不带任何选项参数,或传入-h/--help选项,脚本会显示帮助信息

 $ python maiMuriDetector.py --help
帮助信息
maimaiMuriDetector [-h] [-i] [-c] [-m [-s]] [filepath]
-h --help               显示本帮助信息
-i --interactive        适合电......

交互模式

传入-i/--interactive选项,maimaiMuriDetector会以交互模式运行。

 $ python maiMuriDetector.py -i
请输入majdata.json的路径(也可将文件拖拽至该窗口):_

maimaiMuriDetector需要您输入谱面文件中majdata.json的路径。

majdata.jsonMajdataEdit生成。您需要使用MajdataEdit打开您的simai谱面文件(maidata.txt),切换至想要检查的谱面难度(如MASTER),并单击播放或“录制模式”。

p1

此时,MajdataEdit就会在您谱面文件的同一个文件夹中生成对应难度的majdata.json文件。

注意:majdata.json中只包含一个难度的谱面信息。如果您之后又切换到其他难度并进行了播放,那么原先的majdata.json就会被覆盖。另外,当您修改谱面后,您需要至少播放一次,majdata.json中的信息才会变动。

您可以复制这个文件的完整路径,或者在需要输入文件路径时,直接将文件拖拽至命令行窗口绝大部分命令行窗口都会自动识别并输入文件的路径。

MajdataMajdataEditMajdataView组成,是由国人开发者完成的新一代maimai制谱器、看谱器,也是simai的有力替代产品。现在由bbben和多名爱好者共同开发完善。

MajdataEdit相比于过去的记事本或notepad++制谱,不仅可以提供音频可视化、小节线提醒、note可视化以外,还有迅速定位note在文本中的位置,快速翻转某一段note等实用的功能。

MajdataView是新一代maimai看谱器,是目前最接近本家视觉效果的看谱器。软件使用unity开发,无需配置复杂的环境,开箱即用。可与MajdataEdit端联动,实现暂停、回放功能,易于调试和使用。

之后,maimaiMuriDetector会询问您关于多押检测撞尾检测精度的设置。

多押检测会检测谱面中可能出现的多押(常见于slide时),默认开启此检测。但是如果您想为您的协宴,或允许出现多押的宴谱(如[宴]Oshama Scramble)进行无理检测,那么您可以禁用这项功能。

撞尾检测精度设置会影响到maimaiMuriDetector对于撞尾无理配置的检测严格程度。这项设置的单位是毫秒默认值为150

当精度设置为150ms时,相当于最宽松的撞尾检测,若设置低于150ms,则可能会出现绝对无法正攻的无理配置,所以请不要设置低于150的值

相反的,如果您想更严格的审查谱面,检查是否存在难以正攻或容易蹭tap的配置,您可以适当提高精度,如200ms。

上述两项设置如果什么都不输入直接按下回车的话,就会使用默认值来代替。

随后maimaiMuriDetector会完成审查,并给出结果和建议。

命令行模式

传入-c/--command-line选项,maimaiMuriDetector会以命令行模式启动。

命令行模式中,您需要直接将各个设置和参数一次性传入maimaiMuriDetector

最简单的使用中,您只需要传入majdata.json的路径。需要注意的是,如果您的路径中存在空格,您需要用半角引号包围您的路径

 $ python maiMuriDetector.py --command-line "D:\simai\Tempestissimo Remake\majdata.json"
【谱面信息】
Tempestissimo - t+pazolite
MASTER lv.14
......

如同在交互模式中一样,您也可以修改多押检测撞尾检测精度两项设置。

传入-m/--mult-note-detection来控制是否禁用多押检测

 $ python maiMuriDetector.py -c -m false ./majdata.json
 $ python maiMuriDetector.py -c -m f ./majdata.json
 $ python maiMuriDetector.py -c -m 0 ./majdata.json
// 以上均可禁用多押检测
 $ python maiMuriDetector.py -c --mult-note-detection=false ./majdata.json
// 亦可使用长选项格式

传入-s/--slide-detection-accuracy来调整撞尾检测精度

 $ python maiMuriDetector.py -c -s 200 ./majdata.json
 $ python maiMuriDetector.py -c --slide-detection-accuracy=false ./majdata.json
// 长短选项格式均可

另外,您也可以省略-c选项,maimaiMuriDetector默认工作在命令行模式下

作为模块调用

您也可以将maiMuriDetector.py作为python模块来使用。

目前maiMuriDetector作为模块来使用的功能并不完善,后续开发会进一步优化。

maiMuriDetector.py中引入MaiMuriDetector类来开始使用:

from maiMuriDetector import MaiMuriDetector

检测器类初始化时需要传入majdata.json的路径:

from maiMuriDetector import MaiMuriDetector

mmd = MaiMuriDetector(filepath)

调用对象的detectMuri方法,可以开始进行检测。方法需要2个参数,即多押检测和撞尾精度(单位秒)。

from maiMuriDetector import MaiMuriDetector

mmd = MaiMuriDetector(filepath)
mmd.detectMuri(
    multNoteDetectEnable = True,
    slideDetectAccuracy = 0.15
)

您也可以分别调用对象的multNoteDetectslideDetect方法,这两个方法分别对应多押检测和撞尾检测,检测中发现的错误会直接打印在控制台中,方法则会返回检测到的错误数量。

检测时发现错误的输出信息暂时无法更改,后续开发会进一步优化。

TODO