文生音乐开源项目DiffRhythm,8G显存本地部署之Windows篇
文生音乐开源项目DiffRhythm,8G显存本地部署之Windows篇
一、DiffRhythm:颠覆音乐创作的AI黑科技
DiffRhythm是由西北工业大学音频语音与语言处理实验室(ASLP@NPU)与香港中文大学(深圳)联合开发的开源音乐生成模型,其采用全扩散架构,能够在10秒内生成4分45秒的高质量双轨立体声音乐(包含人声与伴奏) 。该模型以非自回归结构实现极速推理,支持纯文字风格描述生成音乐(如"Jazzy Nightclub Vibe"或"Arctic research station, theremin auroras"等创意场景) ,且最低仅需8GB显存即可本地部署。
技术亮点:
端到端生成:无需多阶段拼接,直接输出完整歌曲;
句级歌词对齐:通过音素映射实现人声与歌词精准同步;
压缩鲁棒VAE:支持从MP3等压缩格式还原无损音质;
多模态输入:兼容文本提示、参考音频、歌词等多类型输入。
本地部署
我电脑依旧是使用
python 3.10.9
,而仍然使用
python3
自带的
venv
模块来搭建
python 虚拟环境
。
当然咯,你也非得要跟我一样,你也可以使用
python 3.11.X
、
python 3.12.x
,用
anaconda
或
miniconda
来构建
python 虚拟环境
,这一点,并没有什么特定要求。
创建
python 虚拟环境
你可以在电脑任一磁盘较为
宽裕
,来构建一个
python 虚拟环境
。
下载
DiffRhythm
推理代码
你得确保你的电脑安装好了
git
,否则的话,将无法通过以下命令进行
clone DiffRhythm
推理代码。
至于这么安装
git
工具,就不在这里进行赘述了,毕竟我前几篇文章是有讲解过的。
git clone https://github.com/ASLP-lab/DiffRhythm.git
cd DiffRhythm
安装
espeak-ng
DiffRhythm
生成的音乐包含人声演唱的歌词,这需要将文本歌词转化为音素序列(如国际音标
IPA
),并精确映射到音频的时间轴上。
eSpeak-NG
作为开源音素合成引擎,在此环节发挥关键作用:
- 音素解析:将用户输入的歌词(如中文、英文)转换为标准音素表示,例如中文
你好
→
/ni haʊ/
,确保模型理解发音规则。
- 发音规则库支持:
eSpeak-NG
内置100+语言的音素规则库,能够处理多语言歌词混合场景(如中英双语歌曲),避免发音错误。
- 对齐算法依赖:DiffRhythm通过句子级对齐机制,将音素序列映射到潜在表示的特定位置,确保生成的歌声与歌词在时间轴上严格同步。eSpeak-NG提供底层音素时间戳数据支撑这一过程。
我们直接下载
espeak-NG
官方编译好的安装包,https://github.com/espeak-ng/espeak-ng/releases。
双击刚刚下载的
espeak-ng.msi
,一路
Next
下去就好了。
还需将
espeak-ng
安装路径添加到
PATH
环境变量中。
安装项目所需的依赖
这一步是必不可少的,毕竟现代的项目都是
集成
项目,换句话说,一个大项目或多或少需要去
集成
优秀的
框架
及
工具库
等。
pip install -r requirements.txt
在国内,我们还是先设置一个国内镜像源,以便下载依赖库能够加快些,毕竟,
pypi.org
在国内访问起来真是
一言难尽啊
,就更别说再去
pypi.org
下载什么依赖库了。
下载模型
我们可以通过
HuggingFace.co
的国内镜像站
hf-mirror.com
进行下载模型。
DiffRhythm-base
模型地址:https://hf-mirror.com/ASLP-lab/DiffRhythm-base/tree/main
我们仍然是通过
git
工具来下载模型,所以,你的电脑得提前安装好
git
,是很有必要的。
git clone https://hf-mirror.com/ASLP-lab/DiffRhythm-base ASLP-lab/DiffRhythm-base
运行
python infer/infer.py
当模型下载完成了之后,这时,我们便可以通过以下命令,来生成音乐了。
python infer/infer.py --lrc-path infer/example/eg_cn.lrc --ref-audio-path infer/example/eg_cn.wav --audio-length 95 --repo_id ASLP-lab/DiffRhythm-base --output-dir infer/example/output --chunked
倘若,你运行了上述命令后,也出现了与下图一样的错误。
那么,你需要在
DiffRhythm\infer\infer_utils.py
文件中添加如下
语句
。
from sys import path
path.append(os.getcwd())
之所以出现找不到
model
这个模块,那是这是属于
DiffRhythm
自定义的模块,而我们本地暂时没把
DiffRhythm
这个路径添加到
python
模块所识别。
修改文件并保存后,再次运行后,却出现了在
windows
系统下常见的错误——
字符编码错误
。
那么,我们按照错误提示,依次对文件所在的行,进行相应的修改。
可当我们,再次运行后,却依旧是出错了,然而,这次给出的错误提示,是没有
inflect
这个模块。
以及
CUDAExecutionProvider
,很显然,我们之前安装的
torch
是
cpu
版本的,以至于无法调用
CUDA
。
我们可以通过
pip torch show
来查看当前安装的
torch
版本信息,从下图,我们可以看出,
requirements.txt
文件中的
torch
是
cpu
版本,所以,我们先卸载它,而后安装
CUDA
版本的
torch
。
pip uninstall torch torchaudio torchvision
等把
CPU
版的
torch
卸载完成后,我们执行以下命令来安装
CUDA
版本的
torch
。
pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu124
之后,我们再次查看
torch
版本信息时,这回,就是项目所需的了。
那么,我们就安装这个
inflect
依赖。
pip install inflect
CUDA
版本的
torch
也安装好了,这回总该可以运行成功了吧。
然而,事情总是与你想的不是那么一回事。要是,能按我们的想法进行下去,就不会有
事与愿违
这个成语了,
人生也就不会有那么多的不如意了
。
从报错的信息来看,说我们的系统没有安装
espeak
,我们明明却安装了,可项目为什么会找不到呢?
还是
按图索骥
的在抛出错误的这些文件修改。
在
DiffRhythm\g2p\utils\g2p.py
这个文件添加如下代码。
from phonemizer.backend.espeak.wrapper import EspeakWrapper
_ESPEAK_LIBRARY = "C:\Program Files\eSpeak NG\libespeak-ng.dll"
EspeakWrapper.set_library(_ESPEAK_LIBRARY)
保存修改好的文件后,我们再次运行,其实,经过几次的
挫败
,我们已然对这次还会抛出什么
幺蛾子
的问题,已不再是那么
惊愕
了,而是有了一种
如果在报错的话,那就明天再弄吧,先看会儿电视剧,别整这个破玩意儿,这个人都郁闷了,那就不好了。
可是,这回却
出乎你的意料
,而又在
情理之中
,却运行成功了。
那么,我们使用DeepSeek`为我们编写一首歌词。
再次运行它。