Expressive 是一个为 OpenUtau 开发的 DiffSinger 表情参数导入工具,旨在从真实人声中提取情感参数,并导入至工程的相应轨道。
当前版本支持以下表情参数的导入:
Dynamics (curve)
Pitch Deviation (curve)
Tension (curve)
OpenUtau 版本来自 keirokeer/OpenUtau-DiffSinger-Lunai 歌手模型来自 yousa-ling-official-production/yousa-ling-diffsinger-v1
- Windows / Linux
- OpenUtau Beta(支持 DiffSinger)
- Python 3.10 *
支持使用 NVIDIA GPU 进行计算加速,需安装支持 CUDA 11.x 的显卡驱动。
点击展开更多平台说明
典型需求:在使用 DiffSinger 虚拟歌手翻唱时,用户通常已完成填词的音高轨,但缺少合适的情感表现。本工具正是为自动生成并导入这些表情参数而设计。
所需输入:
- 歌姬音声:由 OpenUtau 输出的无表情虚拟歌声音频(WAV 格式)。建议节奏 (
Tempo
) 和分段尽量与参考人声一致。 - 参考人声:原始人声录音(WAV 格式),可使用 UVR 等工具去除伴奏与混响。
- 输入工程:原始 OpenUtau 工程文件(USTX 格式)。
- 输出工程路径:处理完成后新工程文件的保存位置。
输出结果:
- 一个携带情感参数的新 USTX 文件,原始工程不会被修改。
- Windows 支持
- Linux 支持
- NVIDIA GPU 加速
- 参数配置导入 / 导出
-
Pitch Deviation
参数生成 -
Dynamics
参数生成 -
Tension
参数生成
- 当前版本尚不支持单一轨道中的
Tempo
变化,建议工程全程使用统一节奏。该限制将在未来版本中解决。
本项目使用 Git LFS 存储
examples/
下的示例音频等大文件。请确保本地已正确安装 Git LFS。
git clone https://github.com/NewComer00/expressive.git --depth 1
cd expressive
建议在虚拟环境中操作:
pip install -r requirements.txt
若示例音频存在,可运行以下命令测试:
python ./expressive.py
输出工程文件将保存在 examples/Прекрасное Далеко/output.ustx
。
显示帮助信息
python ./expressive-cli.py --help
在 Windows PowerShell 中执行示例命令
python .\expressive-cli.py `
--utau_wav "examples/明天会更好/utau.wav" `
--ref_wav "examples/明天会更好/reference.wav" `
--ustx_input "examples/明天会更好/project.ustx" `
--ustx_output "examples/明天会更好/output.ustx" `
--track_number 1 `
--expression dyn `
--expression pitd `
--pitd.semitone_shift 0 `
--expression tenc
在 Linux Shell 中执行示例命令
python ./expressive-cli.py \
--utau_wav "examples/明天会更好/utau.wav" \
--ref_wav "examples/明天会更好/reference.wav" \
--ustx_input "examples/明天会更好/project.ustx" \
--ustx_output "examples/明天会更好/output.ustx" \
--track_number 1 \
--expression dyn \
--expression pitd \
--pitd.semitone_shift 0 \
--expression tenc
启动中文界面
python ./expressive-gui.py --lang zh_CN
Launch with English UI
python ./expressive-gui.py --lang en
graph TD;
ustx_in[/"OpenUtau Project (USTX)"/]
refwav[/"Reference WAV"/]
utauwav[/"OpenUtau WAV"/]
refwav-->feat_pitd
ustx_in-.->|Export|utauwav
utauwav-->feat_pitd
ustx_in-->|Tempo|time_pitd
subgraph PitdLoader
feat_pitd["Features Extraction<br>Pitch & MFCC"]
time_pitd["Time Alignment<br>FastDTW"]
feat_pitd-->time_pitd
pitch_algn["Pitch Alignment"]
time_pitd-->pitch_algn
get_pitd["Get Pitch Deviation"]
pitch_algn-->get_pitd
end
utsx_out[/"OpenUtau Project Output"/]
get_pitd-->utsx_out
subgraph DynLoader
feat_dyn["Features Extraction<br>RMS"]
time_dyn["Time Alignment<br>FastDTW"]
feat_dyn-->time_dyn
get_dyn["Get Dynamics"]
time_dyn-->get_dyn
end
subgraph TencLoader
feat_tenc["Features Extraction<br>RMS"]
time_tenc["Time Alignment<br>FastDTW"]
feat_tenc-->time_tenc
get_tenc["Get Tension"]
time_tenc-->get_tenc
end