读取 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 |
参数、文件读取/编码或普通谱槽位选择错误 |
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 尘言