团队博客

Bark—一种 GPT 风格的 TTS

景朝阳  

Bark 介绍

Bark是一个 GPT 风格的模型。因此,它能在生成音频过程中增加一些创造性,相比传统的 TTS 有更高的差异性。它还有一些新特性如:音乐模式、背景噪音和一些音效,如大笑、叹气等。

项目目前比较活跃,更新也是很频繁。不过,对中文的支持暂时一般,生成的音频音色比较怪异,让人有一种外国友人说普通话的感觉。同时,中文的大笑音效也有问题。

上面简单介绍了下 Bark 项目以及笔者的使用体验,下面发下它在 GitHub 的项目地址:https://github.com/suno-ai/bark

Bark是安装是很简单的,但是因为项目在外网的原因,以及在第一次使用过程中需要从外网下载训练数据,所以安装很容易失败。这里如果你只是想尝鲜试用下,建议看下文的Colab快速体验版。如果你想完整的部署一套离线的Bark,那么建议你在本地环境开启全局代理,然后参考Bark本地部署。

在 Colabe 上快速体验 Bark

Bark 的作者很贴心的分析了一套Colabe环境,这样可以让大家快速的搭建一套体验环境。

Colaboratory 简称“Colab”,是 Google Research 团队开发的一款产品。在 Colab 中,任何人都可以通过浏览器编写和执行任意 Python 代码。它尤其适合机器学习、数据分析和教育目的。从技术上来说,Colab 是一种托管式 Jupyter 笔记本服务。

由于 Colabe 是 Google 的产品,所以在使用它之前,首先要确保你有一个 Google 账号,同时能正常登录 Google。如果这些条件你都满足了,那么在浏览器中打开下面地址即可:https://colab.research.google.com/drive/1eJfA2XUa-mXwdMy7DoYKVYHI1iTd9Vkt?usp=sharing

打开后,你将看到一个在线的 Jupyter Notebook 环境,它有下面三大部分:

  • Install
  • Basics
  • Advanced examples

Install类目下,找到下文的代码部分:

# install bark as well as pytorch nightly to get blazing fast flash-attention
!pip install git+https://github.com/suno-ai/bark.git && \
  pip uninstall -y torch torchvision torchaudio && \
  pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu118

可以点击前方的 ▶️ 符号运行,也可以单击代码部分再按Ctrl+Enter运行。运行过程的输入,可以在代码下方的输出栏实时看到,若看到Successfully installed字样则代表安装成功。另外,在安装中会有个 pip 的依赖错误,笔者测试时是没有影响,可以忽略它。

安装部分结束后,就可以依次跑Basics部分和Advanced examples部分的用例了。其中在执行preload_models()部分代码时,会下载大约 12G 的样本数据,时间会较久需要耐心等待。这部分成功运行完成后,就可以继续执行下方的generate_audio了。除了跑作者提供的示例,也可以自己改下代码运行测试。

Bark 本地部署

上文的尝鲜测试其实也包括了安装命令,只是环境是在 Google 上的,接下来说下本地的 Bark 安装和使用。Bark 是 Python 写的项目,同时它需要 Python3.8 及以上版本。如果你本地没有此 Python3.8 及以上环境,就需要自行安装,这部分就不再赘述。

在安装好 Python 环境后,打开命令行,使用 git 命令拉取代码并进行安装:

git clone https://github.com/suno-ai/bark
cd bark
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple .

看到Successfully installed字样,就是成功安装了。我们创建一个测试代码文件test-demo.py

from bark import SAMPLE_RATE, generate_audio, preload_models
from scipy.io.wavfile import write as write_wav

# download and load all models
preload_models()

# generate audio from text
text_prompt = """
     欢迎致电烟台小樱桃网络科技有限公司。
"""
audio_array = generate_audio(text_prompt)

# save to wav
write_wav("test.wav", SAMPLE_RATE, audio_array)

不过在第一次运行preload_models()时,也需要从外网下载 12G 左右的样本数据,这时要保证全局开启了代理。上述代码正常运行完成后,会生成一个test.wav音频文件。可以播放下它试试,如果能正常听到想要的内容,就是部署成功了。

上文跑了一个简单的例子,如果你想生成一个长文本的音频,那么恭喜你踩到第一个坑:不支持长文本。Bark目前算法模型还不支持长文本,如果想要转换长文本需要用一些自然语言断句工具,将其转换为短句,分批次生成音频数据,然后合并成一个长音频。示例如下:

from bark import SAMPLE_RATE, generate_audio, preload_models
from scipy.io.wavfile import write as write_wav
import numpy as np


# download and load all models
preload_models()

# generate audio from text
text_1 = """
    欢迎致电烟台小樱桃网络科技有限公司。
    烟台小樱桃是高新技术企业,坐落于美丽的黄海之滨。
"""
audio_array_1 = generate_audio(text_1, history_prompt="zh_speaker_0")

text_2 = '''
    让互联互通更顺畅、让实时互动更高效。
    烟台小樱桃将竭诚为您服务。
    感谢致电,再见。
'''
audio_array_2 = generate_audio(text_2, history_prompt="zh_speaker_0")

# merge numpy.ndarray
audio_array = np.concatenate((audio_array_1, audio_array_2))
# save to wav
write_wav("test-1.wav", SAMPLE_RATE, audio_array)

上文中除了合并长文本,还增加了音色指定为zh_speaker_0。当然这些还只是普通的文本转音频,Bark特色的地方是增加了下面这些特性:

  • [laughter]
  • [laughs]
  • [sighs]
  • [music]
  • [gasps]
  • [clears throat]
  • or ... for hesitations
  • for song lyrics
  • capitalization for emphasis of a word
  • MAN/WOMAN: for bias towards speaker

上面这些特性主要是针对英文,笔者试了中文的支持并不是很好,下面是我们在测试过程中生成的一些音频,供参考。

踩过的坑

  • Bark提供了 10 种音色,它们分别是zh_speaker_0 ~ zh_speaker_9。不过笔者测试其中zh_speaker_5生产的音频文件是有问题的,播放的都是杂音。
  • Bark还有一些音频特效,这些试了英文转换的音频表现很好,但是中文的不是想要的效果。比如[laughs] 在中文转换后是类似叹气的一个短音。
  • 本地部署部分没有细说GPU支持部分,是因为CUDA套件部署相对很麻烦,而且对硬件要求较高。一般本地测试,只使用CPU去运算也是可以的,只是会相对慢许多。
  • 目前Bark还不支持长文本,它生成生成的音频最多在 13 秒左右。
使用XCC-SDK搭建简单话务条