# expressive
**Repository Path**: xu_wanghao/expressive
## Basic Information
- **Project Name**: expressive
- **Description**: 〽️OpenUtau的表情参数导入工具。从现实歌手的人声中提取表情,并导入到工程的相应轨道上
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-04-06
- **Last Updated**: 2025-04-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Expressive
针对 [OpenUtau](https://github.com/stakira/OpenUtau) 开发的表情参数导入工具,用于从现实歌手的人声中提取表情,并导入到工程的相应轨道上。
当前版本支持`Dynamics`与`Pitch Deviation`表情参数导入。
OpenUtau from [keirokeer/OpenUtau-DiffSinger-Lunai](https://github.com/keirokeer/OpenUtau-DiffSinger-Lunai)
Singer from [yousa-ling-official-production/yousa-ling-diffsinger-v1](https://github.com/yousa-ling-official-production/yousa-ling-diffsinger-v1)
## 适用平台
- Windows / Linux
- OpenUtau
- Python == 3.10 *
建议使用带有NVIDIA显卡的硬件平台,显卡驱动版本 >= 452.39
点击查看更多信息
\* 音高提取器[CREPE](https://github.com/marl/crepe)依赖于TensorFlow框架**。而在Windows平台下,最后一个支持GPU加速的TensorFlow版本为2.10,且[PyPI](https://pypi.org/project/tensorflow/2.10.1/#files)只提供有限版本的`whl`支持
\** 未来考虑使用基于Pytorch的[PESTO](https://github.com/SonyCSLParis/pesto)代替CREPE
## 使用场景
- 目标:在OpenUtau中使用虚拟歌手翻唱歌曲时,已经做完带填词的无参轨道,现需要为其添加不同表情参数。该应用为解决此需求而生。
- 输入:用户需要为该应用提供
- 歌姬音声:OpenUtau 输出的虚拟歌手无参音声。曲速(`Tempo`)、分段尽量同参考人声相似。WAV 格式。
- 参考人声:参考歌手的纯人声。可通过 [UVR](https://github.com/Anjok07/ultimatevocalremovergui) 等工具去除伴奏和[混响](https://github.com/Anjok07/ultimatevocalremovergui/issues/469#issuecomment-1507664943)。WAV 格式。
- 输入工程:对应的 OpenUtau 工程文件。USTX 格式。
- 输出工程:处理后的 OpenUtau 工程文件的输出位置。
- 输出:在指定位置生成的一个新工程文件,其携带表情参数。本应用不会修改原始工程。
## 支持特性
- [x] Windows 适配
- [x] Linux 适配
- [x] NVIDIA GPU 加速
- [x] 导入 / 导出参数配置
- [x] `Pitch Deviation`表情参数生成
- [x] `Dynamics`表情参数生成
- [ ] `Tension`表情参数生成
## 已知问题
1. 目前尚不支持单轨道内`Tempo`的变化,全工程请使用同一个`Tempo`。未来版本将做出修复。
## 部署步骤
- **注意 1**:本项目仓库使用[Git LFS](https://git-lfs.com/)技术来存放`examples/`目录下的示例音频文件。在克隆项目前,请确保已安装相关支持,否则将无法访问这些文件。
- **注意 2**:此项目的Python依赖包数量较多,本地部署时建议使用虚拟环境。
克隆本仓库的最新内容
```sh
git clone https://github.com/NewComer00/expressive.git --depth 1
```
进入仓库所在目录
```sh
cd expressive
```
在当前Python环境中下载并安装依赖包
```sh
pip install -r ./requirements.txt
```
若`examples/`目录下的示例文件存在,可尝试运行测试。运行结束后,`examples/Прекрасное Далеко/`目录中会出现一个表情参数生成完毕的OpenUtau工程文件`output.ustx`
```sh
python ./expressive.py
```
运行命令行用户交互界面(CLI)
```sh
# show help
python ./expressive-cli.py --help
# exmaple
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
```
运行图形化用户界面(GUI)
```sh
# 中文界面
python ./expressive-gui.py --lang zh_CN
# English UI
python ./expressive-gui.py --lang en
```
## 算法原理
```mermaid
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
Pitch & MFCC"]
time_pitd["Time Alignment
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
RMS"]
time_dyn["Time Alignment
FastDTW"]
feat_dyn-->time_dyn
get_dyn["Get Dynamics"]
time_dyn-->get_dyn
end
```