Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DXTag

读取 maidata.txt,输出曲名、难度和五维分数。评分包含键盘、星星、技巧、体力、爆发,范围为 0.0–10.0,保留一位小数。

安装与运行

运行环境:Node.js 22 或更新版本。

npm ci
npm run build
node dist/cli.mjs "maidata.txt"

默认计算文件中的全部普通难度。使用 -d 选择一张谱面:

node dist/cli.mjs "maidata.txt" -d master
node dist/cli.mjs "maidata.txt" -d 5 > scores.json
npm run --silent score -- "maidata.txt" -d master
Simai 槽位 难度参数
inote_2 basic 或 2
inote_3 advanced 或 3
inote_4 expert 或 4
inote_5 master 或 5
inote_6 remaster、re:master 或 6

参数不区分大小写。--json 与默认输出相同,--help 显示帮助。

输入编码支持 UTF-8(含 BOM)及带 BOM 的 UTF-16 LE/BE。

输出

输出始终是 JSON 数组,每张谱面包含三个字段:

  • title:maidata 的 &title;缺省时为空字符串。
  • difficulty:BASIC、ADVANCED、EXPERT、MASTER 或 Re:MASTER。
  • scores:五项数值。

例如《TECHNOPOLIS 2085》MASTER:

[
  {
    "title": "TECHNOPOLIS 2085",
    "difficulty": "MASTER",
    "scores": {
      "键盘": 8.5,
      "星星": 5.1,
      "技巧": 8.9,
      "体力": 4.2,
      "爆发": 5.6
    }
  }
]

计算失败的谱面从结果中略过,原因写入标准错误。全部失败时输出 []。

退出码 含义
0 全部成功
1 部分或全部谱面计算失败
2 参数、文件读取/编码或普通谱槽位选择错误

JavaScript 接口

import {readFileSync} from 'node:fs';
import {scoreChart, scoreMaidata} from './dist/index.mjs';

const text = readFileSync('./maidata.txt', 'utf8');
const chart = scoreChart(text, 5);  // {title, difficulty, scores}
const charts = scoreMaidata(text); // [{title, difficulty, scores}, ...]

两个接口在计算失败时抛出异常。scoreMaidata 可传入错误回调以继续计算其他谱面:

const charts = scoreMaidata(text, undefined, error => {
  console.error(error.difficulty, error.message);
});

开发

npm run build
npm test

真实谱回归通过 DXTAG_CHARTS_DIR 指定谱面库根目录,保留 版本目录/曲名/maidata.txt 的目录结构;未提供对应谱面时跳过。

$env:DXTAG_CHARTS_DIR = '.\charts'
npm test

算法与公式见 技术文档。

许可

项目使用 MIT License。

Copyright (c) 2026 尘言

About

舞萌谱面难点分析,从键盘、星星、技巧、爆发、体力五个维度分别对一张谱面进行评分

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages