数字人初探

通过 conda 创建一个新环境,部分依赖需要 python 环境的版本为 3.10,需要注意。

conda create -n virtual-bot python=3.10

激活环境。

conda activate virtual-bot

文字转语音的模型使用 MeloTTS,具体安装过程参见其 git 文档。

git clone https://github.com/myshell-ai/MeloTTS.git
cd MeloTTS
pip install -e .
python -m unidic download

其实安装 unidic 只是里面的日语转换需要而已。安装之后就可以执行官网的示例代码。

from melo.api import TTS

# Speed is adjustable
speed = 1.0
device = 'cpu' # or cuda:0

text = "我最近在学习machine learning,希望能够在未来的artificial intelligence领域有所建树。"
model = TTS(language='ZH', device=device)
speaker_ids = model.hps.data.spk2id

output_path = 'zh.wav'
model.tts_to_file(text, speaker_ids['ZH'], output_path, speed=speed)

由于这个库只能生成语音,而其他一些“强对齐模型”可以同时输出音素序列。在这个简短的尝试里,我暂时没有探索那些强对齐模型,而是先选择另外的方式得到音素序列分析。使用的也是一个开源库 mfa,全称是 montreal-forced-aligner,其作用是提供文本以及语音文件,这个库通过查找语音库以及对应语言的词典,得到输入音频的音素序列。

首先安装 mfa 需要一些前置依赖。

conda install -c conda-forge openfst pynini kaldi

然后安装 mfa。

conda install -c conda-forge montreal-forced-aligner

注意这两步如果使用 pip 安装会有玄学问题,建议直接使用 conda 安装。安装 mfa 之后,需要下载声音库以及词典。下载的时候可能会有 github 链接问题导致下载失败,建议直接在 mfa官网 下载目标文件。

  • 中文语音信息可以在 这里 下载
  • 中文词典可以在 这里 下载

下载之后语音信息需要解压缩一下,然后就可以执行下面的命令来生成对应的音频的音素序列信息了。

mfa align_one zh.wav text ./mandarin_china_mfa.dict ./acoustic_mandarin_mfa ./

其语法为

mfa align_one 音频文件路径 文本文件路径 字典路径 音频信息路径 生成的音素序列存放路径