24a's blog
0x24a's personal blog.
首页
友情链接
联系我
文章分类
常用标签
友情链接
您正在查看: 默认分类 分类下的文章

最近在研究 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!)

2024-09-22 |0x24a

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.

如题,望周知!!
(BTW, 本站的萌 ICP 号是 20243939)

前言

看见 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 精神:读文档、善用搜索或自己摸索。

流程简介

  1. 录制原音声( 2 分钟 即可达到 非常优质 的效果!)
  2. 训练 GPT-SoVITS 模型
  3. 使用大量随机语料,生成净时间约为 3hr 的训练样本
  4. 使用 GPT-SoVITS 的输出训练 So-VITS-SVC 模型
  5. (Optional) 下载任意 UTAU 声库并通过批量 Infer 以制作高质量声库

具体步骤

W.I.P.