Skip to content

Commit 3d5e568

Browse files
committed
add: chu3 music
1 parent 3d061a6 commit 3d5e568

File tree

4 files changed

+36779
-1
lines changed

4 files changed

+36779
-1
lines changed

apps/tools/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"private": true,
66
"scripts": {
77
"genFileIds": "tsx src/genFileIds.ts",
8-
"update-allmusic-web": "scp all-music.json daisy:/etc/nginx/aqua-data/mai2/00"
8+
"update-allmusic-web": "scp all-music.json daisy:/etc/nginx/aqua-data/mai2/00",
9+
"update-allmusic-web-chu": "scp chu-all-music.json daisy:/etc/nginx/aqua-data/chu3/00/all-music.json"
910
},
1011
"devDependencies": {
1112
"@clansty/maibot-data": "workspace:^",
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { CHU_ALL_MUSIC } from '@clansty/maibot-data';
2+
import fs from 'node:fs';
3+
import fsP from 'node:fs/promises';
4+
import path from 'node:path';
5+
import { XMLParser } from 'fast-xml-parser';
6+
7+
const data = CHU_ALL_MUSIC;
8+
const baseDir = process.argv[2];
9+
const parser = new XMLParser();
10+
const skipWhenExist = process.argv[3] === 'skip';
11+
const optionDirs = await fsP.readdir(path.join(baseDir, 'option'));
12+
13+
for (const opt of [path.join(baseDir, 'data', 'A000'), ...optionDirs.map(d => path.join(baseDir, 'option', d))]) {
14+
if(!fs.existsSync(path.join(opt, 'music'))) continue;
15+
16+
for (const f of await fsP.readdir(path.join(opt, 'music'))) {
17+
if (!f.startsWith('music')) continue;
18+
if (!fs.existsSync(path.join(opt, 'music', f, 'Music.xml'))) continue;
19+
20+
const meta = parser.parse(await fsP.readFile(path.join(opt, 'music', f, 'Music.xml'), 'utf-8'));
21+
let music: typeof CHU_ALL_MUSIC[48] = {};
22+
if (data[meta.MusicData.name.id]) {
23+
if (skipWhenExist)
24+
continue;
25+
music = data[meta.MusicData.name.id];
26+
} else {
27+
data[meta.MusicData.name.id] = music;
28+
}
29+
30+
music.name = meta.MusicData.name.str.toString();
31+
console.log(music.name);
32+
music.ver = meta.MusicData.releaseTagName.str.toString();
33+
music.composer = meta.MusicData.artistName.str.toString();
34+
// music.genre = meta.MusicData.genreName.str.toString();
35+
music.worldsEndStars = meta.MusicData.starDifType.toString();
36+
music.worldsEndTag = meta.MusicData.worldsEndTagName.str.toString();
37+
38+
music.notes = [];
39+
for (let i = 0; i < 5; i++) {
40+
music.notes.push({
41+
lv: Number.parseFloat(`${meta.MusicData.fumens.MusicFumenData[i].level}.${meta.MusicData.fumens.MusicFumenData[i].levelDecimal}`)
42+
});
43+
}
44+
for (let i = music.notes.length - 1; i > -1; i--) {
45+
if (!music.notes[i].lv) music.notes.pop();
46+
else break;
47+
}
48+
}
49+
}
50+
51+
await fsP.writeFile('./chu-all-music.json', JSON.stringify(data, null, '\t'));

0 commit comments

Comments
 (0)