最近在研究 YAMAHA Vocaloid5 的项目文件(.vpr
格式)。
按照对大厂套路的深入理解,后缀名改 zip 零帧起手,果然是个 ZIP 压缩包,里面包含了一个sequence.json
,存储了所有的工程数据(音轨、音符、参数等)。
于是写了一个 Python 解析库,把它的结构逆向出来了。
内容分析
解压后主要文件是Project/sequence.json
,包含项目的元信息、音轨(tracks
)、音符(notes
)、效果器等。
命名规则是驼峰命名法,按照 PEP8 要转换一下。
开始逆向!
用 Python 写了一个解析库,主要功能:
- 读取 VPR 文件 → 转成 Pydantic 模型(带类型检查)。
- 修改数据(比如改 BPM、音符参数)→ 重新打包成
.vpr
。 - 性能分析:内置
Timer
util 类,可以看各部分解析耗时。
示例用法:
from vpr_parser import VPRParser
parser = VPRParser()
project = parser.parse("song.vpr") # 读取文件
project.title = "New Song Name" # 改标题
parser.dump(project, "modified.vpr") # 保存
踩坑记录
奇怪的命名法
YAMAHA 命名规则太奇怪,本来用驼峰命名法,pydantic alias_generator 转换一下的事,结果comp_id
这个字段不是compId
,而是compID
😅
另、有的字段,比如global
,是 Python 保留字,需要替换(处理代码如下):
class AliasedBaseModel(BaseModel):
model_config = ConfigDict(
alias_generator=lambda x: (
to_camel(x).replace("Id", "ID") # this shit is so ass i hate you yamaha 😭
if x != "global_config"
else "global"
), # i love pyright randomly giving me 1mil errors ❤️
populate_by_name=True,
extra="forbid",
)
后续计划
- 给每个字段加入解释文档
- 有的类型还不是很完善,比如 ControllerEvent 只有几种类型(应该使用 Literal[...]),我却直接用了 str
GitHub 项目:vpr-parser(欢迎 Star/PR!)
This message is used to verify that this feed (feedId:60604135484631040) belongs to me (userId:56556488804868096). Join me in enjoying the next generation information browser https://follow.is.
前言
看见 tg 上面的 Warp+ Bot 2 小时才能生成一次,顿时对着闭源软件红温,望周知
安装
注:此教程假设你拥有 3.10 以上的 Python+Pip 和基本的问题排查能力
$ git clone https://github.com/0x24a/WarpPlusKeyGenerator-NG.git
$ cd WarpPlusKeyGenerator-NG
$ python3 -m pip3 install -r requirements.txt
生成
基本使用方法
$ python3 main.py
进阶使用方法
python3 main.py [-h] [-q 数量] [-o 输出文件] [-a] [-b BASEKEYS]
Generates Warp+ Keys
options:
-h, --help 显示此帮助信息
-q QUANTITY, --quantity 数量
生成数量
-o OUTPUT, --output 文件名
将生成的Keys输出到一个文件。
-a, --append 将Keys追加到文件。(如未制定,则覆盖)
-b BASEKEYS, --basekeys BASEKEYS
指定英文逗号分隔的basekeys.
会自动从 Github 获取 Basekeys,并显示类似下方内容的输出:
WARP+ Key Generator
By 0x24a, Version v0.0.4
Loading basekeys from the Github Repo...
Loaded 11 Base Keys
Generating... (1/1)
Account Type: limited
Data Limit: 1923837130 GiB
License Key: (生成的key)
Keys:
(生成的key)
导入方式
见之前的文章 免费获得 WARP 的小技巧 § 导入方式
已知问题
Account Type: free
显示账号类型为 free 时,WARP 的移动客户端会显示为 WARP+,但通过 Cloudflare 的 cdn-cgi/trace 接口检测,会显示为普通 WARP 线路。
在学校实在无聊,晚自习拿出了草稿纸开始头脑风暴。
最近试玩了 So-VITS-SVC 并且通过批量推理的方式给自己做了高质量的 UTAU VCV 声库,但整个录制过程过于困难(录制训练 SoVITS 的样本所花费的时间约为 2 天),于是想到了一种懒人方法来训练 TTS SoVITS 模型的方法。
事先叠甲
本篇教程仅提供 大体思路 ,对于部分操作步骤(如使用 Google Colab 进行训练、文中提到的开源软件的具体使用方法),请发挥你的 Geek 精神:读文档、善用搜索或自己摸索。
流程简介
- 录制原音声( 2 分钟 即可达到 非常优质 的效果!)
- 训练 GPT-SoVITS 模型
- 使用大量随机语料,生成净时间约为 3hr 的训练样本
- 使用 GPT-SoVITS 的输出训练 So-VITS-SVC 模型
- (Optional) 下载任意 UTAU 声库并通过批量 Infer 以制作高质量声库
具体步骤
W.I.P.