1 介绍

多语言的文字转语音模型。

地址: https://github.com/suno-ai/bark

2 模型原理

Bark 通过三个 Transformer 模型,将文本转换为音频。

2.1 文本到语义 Token

输入:由 Hugging Face 的 BERT 标记器分词的文本

输出:编码生成音频的语义 Token

2.2 语义到粗略 Token

输入:语义 Token

输出:来自 Facebook 的 EnCodec 编解码器的前两个 codebooks 的 Token

2.3 粗略到细节 Token

输入:EnCodec 的前两个 codebooks

输出:EnCodec 的 8 个 codebooks

3 使用方法

3.1 环境配置

1
docker pull pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime

运行 docker

1
nvidia-docker run -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all -p 8893:8888 -v /raid/:/opt/raid --gpus all --rm -it pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime bash

3.2 安装 bark

进入 docker 后:

1
2
3
4
5
6
7
8
9
10
11
# 安装 bark
git clone https://github.com/suno-ai/bark
cp /xxx/pip.conf /root/.pip/
export http_proxy=http://192.168.1.22:xxxx
export https_proxy=http://192.168.1.22:xxxx
cd bark
python setup.py install

# 安装 jupyter
pip install jupyter_nbextensions_configurator jupyter_contrib_nbextensions
jupyter notebook --allow-root -y --no-browser --ip=0.0.0.0

3.3 测试

设置环境变量:

1
2
3
4
import os
os.environ['SUNO_USE_SMALL_MODELS'] = 'True'
os.environ['XDG_CACHE_HOME'] = 'set local path to save models'
# default path: /USER_DIR/.cache/suno/bark_v0

合成语音:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from bark import SAMPLE_RATE, generate_audio, preload_models
from IPython.display import Audio

# download and load all models
preload_models()

# generate audio from text
text_prompt = """
我要试试能不能合成中文
"""
audio_array = generate_audio(text_prompt)

# play text in notebook
Audio(audio_array, rate=SAMPLE_RATE)

4 用后感

  • 试用 SMALL 版本,一共下载三个模型,大小分别是 1.1G,1.2G,2.5G,不是很大。
  • 试用普通版本,一共下载三个模型,大小分别是 3.5G, 3.7G, 5.5G,运行时占 GPU 6G 左右。
  • 小模型中英文都能合成人声,但听起来比较粗糙,普通模型比较清晰。流畅度还可以,对于中文的语调感觉不太好,无论模型大小均有此问题,有丢字,错误问题。
  • 可以用提示指定男声或女声。
  • 没看到论文,基本是现有技术的组合,结构类似 AudioLM。

5 参考资料

[语音合成最新技术分享]https://zhuanlan.zhihu.com/p/622980527