本文仅提供数据集制作教程,炼丹相关请自行寻找其它教程
之前总是看到群友在问马娘的音频数据集怎么弄,目前已有的提取方式都过于繁琐,于是自己尝试写了个一键提取脚本,希望对各位有用。
您只需要修改示例代码内的角色ID和提取方式, 然后运行脚本即可。脚本会自动帮您下载缺失的语音文件、解密加密的文件、提取文本内容,然后输出到您指定的目录。
注: 若下载缺失文件时报错 HTTP 403,请自行使用魔法。
项目地址: https://github.com/chinosk114514/umamusume-voice-text-extractor
环境要求
赛马娘DMM版: https://dmg.umamusume.jp
python 3.8或更高版本: https://www.python.org/downloads
.Net 6.0: https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0
使用方法
1. 将本项目克隆到你的计算机
2. 安装python包:
pip install -r requirements.txt
3. 已更新GUI,不需要手动修改代码了。
GUI操作的详细说明可以查看项目内的 README

单角色提取

多角色提取

提取LIVE音频

混合LIVE音频
3. 编辑 "main.py", 然后运行即可, 以下是代码说明
import voiceex # 设置保存路径、当缺失文件时是否直接下载、从所有角色个人剧情中获取音频(耗时很长) ex = voiceex.VoiceEx(save_path="save", download_missing_voice_files=True, get_voice_from_all_stories=False) # 设置wav采样率, 位数, 声道数 (可选, 若不设置, 则以源文件参数输出) ex.set_wav_format(22050, 16, 1) # 设置下载代理 (可选, 若不需要, 直接注释掉即可) ex.set_proxies("http://127.0.0.1:10087") 单角色提取方式
# 单角色模式
# 开始提取角色 No.1024 (摩耶重炮) 的语音/文本
ex.extract_all_char_text_single(1024) 多角色提取方式
# 多角色模式
# 设置各角色的输出ID (Union[int, str])
ex.set_multi_char_out_ids([
(1024, "0"), (1046, 1)
])
# 开始提取角色 No.1024 (摩耶重炮) 和 No.1046 (醒目飞鹰) 的语音
ex.extract_all_char_text_multi([1024, 1046]) 修改完成后直接运行 "main.py" 即可
python main.py
关于不同的提取模式
不同的提取方式会生成不同格式的文件,请根据自己的需求选择~
单角色提取方式会生成如下格式的文件
xxx/xxx.wav|这是语音文本
xxx/xxx2.wav|这是语音文本2
xxx/xxx3.wav|这是语音文本3 多角色提取提取方式会生成如下格式的文件
xxx/xxx.wav|0|这是角色0的语音文本
xxx/xxx2.wav|0|这是角色0的语音文本2
xxx/xxx3.wav|1|这是角色1的语音文本
xxx/xxx3.wav|2|这是角色2的语音文本
生成效果

提取的语音文件

单角色模式提取文本

多角色模式提取文本
数据相关
下面简单分享一下提取数据的思路
数据库位置
%UserProfile%/AppData/LocalLow/Cygames/umamusume/meta
%UserProfile%/AppData/LocalLow/Cygames/umamusume/master/master.mdb 故事文本
打开 "meta" 数据库,可以看到所有的文件以及对应的 bundle,执行查询语句即可获取所有故事语音文本的文件名
story/data/{base}/{chara_id}/storytimeline_{base}{chara_id}% base 值:
02:主线故事;04:角色个人剧情;09:额外故事;10:周年庆故事
使用此文件名可在 "meta" 数据库内查询到对应包的 hash,通过hash即可获取文件在本地的位置
%UserProfile%/AppData/LocalLow/Cygames/umamusume/dat/{hash[:2]}/{hash} 知道包的位置后,读取对应包内 "StoryTimelineTextClipData" 的语音数据即可

故事语音文件结构
之后根据语音ID即可得到对应语音文件名
sound/c/snd_voi_story_{语音ID}.acb sound/c/snd_voi_story_{语音ID}.awb .awb 为加密的语音文件
.acb 文件内存放了各段语音的序号
角色系统文本
系统文本存放于 "master" 数据库 "character_system_text" 表内。系统文本语音包含了 标题、主页、抽卡、队伍、比赛、训练、情人节 等语音

根据上文获取到的语音文件名,可以在 "meta" 数据库中查询到对应的 hash 值,若此hash对应的文件不存在,则下载。
之后根据上文得到的语音序号,即可提取出本段语音文件。
语音解密、提取相关实现,请自行查看:https://github.com/chinosk114514/umamusume-voice-text-extractor/tree/main/voice%20extractor
至此,我们已经成功获取到对应的语音文本和解密后的文件。