maimaiDX-Api/Standalone/Script_GenerateMusicDB.py
2025-02-03 03:00:26 +08:00

51 lines
2.0 KiB
Python

# 感谢伟大的 Diving-Fish 让我被迫直面恐惧
import xml.dom.minidom as minidom
from pathlib import Path
import json
from loguru import logger
def makeMusicDBJson():
'''
从 HDD 的文件来生成 music_db.json
推荐的是如果要国服用 那就用国际服的文件来生成
免得国服每次更新还要重新生成太麻烦
'''
# 记得改
A000_DIR = Path('H:\PRiSM\Package\Sinmai_Data\StreamingAssets\A000')
OPTION_DIR = Path('H:\PRiSM\Package\Sinmai_Data\StreamingAssets')
music_db: dict[str, dict[str, str | int]] = {}
DEST_PATH = Path('../Data/musicDB.json')
music_folders = [f for f in (A000_DIR / 'music').iterdir() if f.is_dir()]
for option_dir in OPTION_DIR.iterdir():
if (option_dir / 'music').exists():
music_folders.extend([f for f in (option_dir / 'music').iterdir() if f.is_dir()])
for folder in music_folders:
xml_path = (folder / 'Music.xml')
if xml_path.exists():
xml = minidom.parse(xml_path.as_posix())
data = xml.getElementsByTagName('MusicData')[0]
music_id = data.getElementsByTagName('name')[0].getElementsByTagName('id')[0].firstChild.data
music_name = data.getElementsByTagName('name')[0].getElementsByTagName('str')[0].firstChild.data
music_version = data.getElementsByTagName('AddVersion')[0].getElementsByTagName('id')[0].firstChild.data
music_db[music_id] = {
"name": music_name,
"version": int(music_version)
}
logger.debug(f'Found {len(music_db)} music data')
serialized = '{\n'
sorted_keys = sorted(music_db.keys(), key=lambda x: int(x))
for key in sorted_keys:
value = music_db[key]
serialized += f' "{key}": {json.dumps(value, ensure_ascii=False)},\n'
serialized = serialized[:-2] + '\n}'
with open(DEST_PATH, 'w', encoding='utf-8') as f:
f.write(serialized)
if __name__ == '__main__':
makeMusicDBJson()
print('Done.')