Skip to content

🎼🎵𝐄𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐯𝐞 | 适用于OpenUtau的DiffSinger歌手表情参数导入工具。从现实歌手的人声中提取表情,并导入到工程的相应轨道上 Migrate expressions from real singers to DiffSingers

License

Notifications You must be signed in to change notification settings

NewComer00/expressive

Repository files navigation

Expressive

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 的显卡驱动。

点击展开更多平台说明
  • * 本项目使用 CREPE 作为音高提取器,依赖于 TensorFlow 框架。

    • 在 Windows 下,最后支持 GPU 加速的 TensorFlow 版本为 2.10,且 PyPI 提供的 .whl 文件版本有限。
  • ** 未来可能切换至基于 PyTorch 的 PESTO 替代 CREPE,以提高兼容性。

📌 使用场景

典型需求:在使用 DiffSinger 虚拟歌手翻唱时,用户通常已完成填词的音高轨,但缺少合适的情感表现。本工具正是为自动生成并导入这些表情参数而设计。

所需输入:

  • 歌姬音声:由 OpenUtau 输出的无表情虚拟歌声音频(WAV 格式)。建议节奏 (Tempo) 和分段尽量与参考人声一致。
  • 参考人声:原始人声录音(WAV 格式),可使用 UVR 等工具去除伴奏与混响。
  • 输入工程:原始 OpenUtau 工程文件(USTX 格式)。
  • 输出工程路径:处理完成后新工程文件的保存位置。

输出结果:

  • 一个携带情感参数的新 USTX 文件,原始工程不会被修改。

✨ 功能特性

  • Windows 支持
  • Linux 支持
  • NVIDIA GPU 加速
  • 参数配置导入 / 导出
  • Pitch Deviation 参数生成
  • Dynamics 参数生成
  • Tension 参数生成

⚠️ 已知问题

  1. 当前版本尚不支持单一轨道中的 Tempo 变化,建议工程全程使用统一节奏。该限制将在未来版本中解决。

🚀 快速开始

1. 克隆项目

本项目使用 Git LFS 存储 examples/ 下的示例音频等大文件。请确保本地已正确安装 Git LFS。

git clone https://github.com/NewComer00/expressive.git --depth 1
cd expressive

2. 安装依赖

建议在虚拟环境中操作:

pip install -r requirements.txt

3. 快速测试

若示例音频存在,可运行以下命令测试:

python ./expressive.py

输出工程文件将保存在 examples/Прекрасное Далеко/output.ustx

📖 使用方式

命令行界面(CLI)

显示帮助信息

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

图形用户界面(GUI)

启动中文界面

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
Loading

About

🎼🎵𝐄𝐱𝐩𝐫𝐞𝐬𝐬𝐢𝐯𝐞 | 适用于OpenUtau的DiffSinger歌手表情参数导入工具。从现实歌手的人声中提取表情,并导入到工程的相应轨道上 Migrate expressions from real singers to DiffSingers

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published