Loading...

文章背景图

Bark:Suno 开源的文本到音频生成模型(多语言 TTS/音乐/音效)部署指南

2024-04-05
0
- 字
- 分钟
|

Bark:Suno 开源的文本到音频生成模型(多语言 TTS/音乐/音效)部署指南

Bark 是 Suno 开源的基于 Transformer 的文本到音频(text-to-audio)模型。它不是传统意义上的 TTS——不只是把文字念出来,而是能直接生成高逼真度的多语言语音,还能生成音乐、背景噪音、简单音效,以及笑、叹气、哭等非语言声音。为支持研究社区,Suno 开放了预训练 checkpoint,可直接推理,并从 2023 年 5 月起以 MIT 协议发布,允许商用。需要注意的是:Bark 是研究用途的全生成式模型,输出可能偏离提示词,Suno 不对生成结果负责,使用需自担风险。

与传统 TTS 模型相比,Bark 的定位更像"音频领域的 GPT":它不做规范化的"文本→标准发音"映射,而是把文本当作音频生成的条件,自由生成语音、音乐、环境音、音效与非语言人声。这意味着它的输出更生动——会笑、会叹气、会犹豫、会唱歌,但也意味着不可控性更强:同一段文本两次生成可能得到不同的语调和演绎。这种特性使 Bark 适合创意写作、游戏旁白、有声书原型、Demo 演示等场景,而不适合需要严格逐字播报的客服、导航等场景。它与本系列介绍的 FunASR、SenseVoice(语音识别方向)、OpenVoice(音色克隆)、Piper(本地离线 TTS)形成互补:Bark 是其中最"自由"也最"不可控"的一个,适合创意音频实验,不适合对稳定性有要求的生产播报。Bark 的输出每次都有随机性,同一提示词两次生成结果会有差异,这是 GPT 风格生成模型的固有特性。Suno 同时把 Bark 的能力集成进了 Suno Studio 在线 playground,没有 GPU 的用户可以在网页上体验更大的模型版本。

Bark 发布于 2023 年 4 月,是 Suno 在音乐生成之外开源的研究型模型;它与 Suno 主打 text-to-music 的商业产品不同,Bark 专注于"文本到任意音频"的通用生成,包括语音、音乐、音效与人声非语言片段。社区在 Discord 的 #audio-prompts 频道分享了大量可用提示词,语音提示词库则整理了跨语言的预设说话人,便于直接复用。与同期 Vall-E、AudioLM 等学术模型相比,Bark 的工程化程度更高:提供了 PyPI 可安装包、命令行、Hugging Face Space、Replicate 云 API、Colab 笔记本等完整体验链路,研究者和创作者可以在不碰训练代码的情况下直接生成音频。

一、项目官方信息

项目 信息
GitHub 仓库 suno-ai/bark
开发方 Suno(音乐生成公司)
Hugging Face suno/bark 与 Hugging Face Space
开源协议 MIT(2023 年 5 月起,可商用)
架构 GPT 风格,参考 AudioLM 与 Vall-E,音频表示用 EnCodec 量化
依赖 PyTorch 2.0+,CUDA 11.7 / 12.0
支持语言 英、德、西、法、印地、意、日、韩、波、葡、俄、土、简体中文共 13 种
语音预设 100+ 说话人预设,支持多语言;不支持自定义音色克隆

二、官方图片

Bark 仓库封面(本站封面):

Bark

三、核心能力与技术原理

  • 全生成式文本到音频:输入文本不经过音素中间层,直接转成音频;因此能泛化到语音之外的任意指令,如歌词、音效、非语音声音。
  • 多语言语音:开箱即用支持 13 种语言,并从输入文本自动判断语种;遇到语码混用(code-switched)文本时,Bark 会尝试用对应语言的母语口音生成。目前英语质量最好,其他语言会随模型规模扩大继续改进。
  • 音乐与音效:Bark 原则上不区分语音与音乐,有时会主动把文本唱出来;在歌词两侧加 ♪ 符号可引导它生成音乐。
  • 非语言声音:支持 [laughter]、[laughs]、[sighs]、[music]、[gasps]、[clears throat] 等标签,用 — 或 ... 表示犹豫,全大写表示强调,[MAN]/[WOMAN] 偏向男声/女声。
  • 100+ 说话人预设:通过 history_prompt 指定,Bark 会尽量匹配预设的音调、音高、情感与韵律;但不支持自定义音色克隆。

架构上,Bark 遵循 GPT 风格,与 AudioLM、Vall-E 同源,音频表示采用 EnCodec 的离散量化码本。与传统 TTS 流水线(文本归一化→音素→声学模型→声码器)不同,Bark 把文本直接映射到 EnCodec 的离散音频 token 序列,再由 EnCodec 解码波形。这种端到端路线的优势是灵活——能生成语音、音乐、环境音、音效等任意音频;代价是输出方差大、可能"跑题",且单次生成受上下文窗口限制在约 13 秒。Bark 之所以能"听懂" [laughter]、♪ 这类指令,正是因为训练数据里包含了非语音片段,模型学会了在文本条件下生成对应声学事件。

四、版本更新历史

  • 2023.04.20:Bark 首次发布。
  • 2023.05.01:以 MIT 协议重新授权,允许商用;GPU 推理提速 2 倍、CPU 提速 10 倍;新增小版本模型(速度更快、质量略降);发布长 form 生成 notebook、语音一致性增强等示例;建立语音提示词库;支持低显存 GPU(<4GB)。

除本地部署外,Bark 还提供多种免安装体验入口:Hugging Face Space 在线试、Replicate 云 API、Google Colab 笔记本,以及 Suno 官方的示例音频库。这些入口适合快速评估效果,再决定是否本地部署。

五、环境要求与安装

注意:不要用 pip install bark——那是另一个不相关的包,不是 Suno 维护的。正确安装方式:

pip install git+https://github.com/suno-ai/bark.git

或源码安装:

git clone https://github.com/suno-ai/bark
cd bark && pip install .

硬件要求:完整模型约需 12GB VRAM 才能全部放在 GPU 上;企业级 GPU 加 PyTorch nightly 可接近实时生成。旧 GPU、Colab 默认环境或 CPU 上会明显变慢。想在 8GB 显存上跑,设环境变量 SUNO_USE_SMALL_MODELS=True 使用小模型;显存只有 2GB 左右时,再加 SUNO_OFFLOAD_CPU=True 把部分层卸载到 CPU。模型通过 Hugging Face 下载缓存,可用 HF_HOME 环境变量指定缓存目录。Bark 已在 PyTorch 2.0+、CUDA 11.7 与 12.0 上测试通过;CPU 推理可工作但速度慢,适合跑通流程或短文本 Demo。

六、部署步骤

1. Python 基础用法

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

# 下载并加载所有模型
preload_models()

# 从文本生成音频
text_prompt = """
     Hello, my name is Suno. And, uh — and I like pizza. [laughs]
     But I also have other interests such as playing tic tac toe.
"""
audio_array = generate_audio(text_prompt)

# 保存到磁盘
write_wav("bark_generation.wav", SAMPLE_RATE, audio_array)

# 在 notebook 里播放
Audio(audio_array, rate=SAMPLE_RATE)

2. 多语言与口音

text_prompt = """
    추석은 내가 가장 좋아하는 명절이다. 나는 며칠 동안 휴식을 취하고 친구 및 가족과 시간을 보낼 수 있습니다.
"""
audio_array = generate_audio(text_prompt)

因为 Bark 自动从文本识别语言,也可以用德语历史提示配英文文本,通常会得到"带德国口音的英语"。

3. 生成音乐

text_prompt = """
    ♪ In the jungle, the mighty jungle, the lion barks tonight ♪
"""
audio_array = generate_audio(text_prompt)

4. 说话人预设

text_prompt = """
    I have a silky smooth voice, and today I will tell you about
    the exercise regimen of the common sloth.
"""
audio_array = generate_audio(text_prompt, history_prompt="v2/en_speaker_1")

预设库在 Notion 页面 或仓库 bark/assets/prompts 目录里浏览。

5. 命令行

python -m bark --text "Hello, my name is Suno." --output_filename "example.wav"

命令行方式适合快速试一句,一条命令完成模型加载与合成,省去写 Python 脚本;Python 方式则适合批量处理、指定预设说话人、接入长 form notebook 等场景。

6. Hugging Face Transformers 集成

从 Transformers 4.31.0 起内置 Bark:

from transformers import AutoProcessor, BarkModel

processor = AutoProcessor.from_pretrained("suno/bark")
model = BarkModel.from_pretrained("suno/bark")

voice_preset = "v2/en_speaker_6"
inputs = processor("Hello, my dog is cute", voice_preset=voice_preset)
audio_array = model.generate(**inputs)
audio_array = audio_array.cpu().numpy().squeeze()

采样率从 model.generation_config.sample_rate 取,再用 scipy 写 wav。用 Transformers 路线的好处是依赖少、与 Hugging Face 生态打通,不需要装 Bark 包;但功能上 Bark 原生包提供了 preload_models、长 form notebook、命令行等便利工具,生产环境建议用原生包。

7. 长音频生成

默认 generate_audio 适合约 13 秒口语;长文本见仓库 notebooks/long_form_generation.ipynb,演示了长 form 生成、对话与语音一致性增强。13-14 秒的上限来自 GPT 风格架构的上下文窗口优化。长 form notebook 展示了如何把长文本切句、逐段生成、保持说话人一致,并把多段音频拼接成完整故事或对话,适合做有声书、播客 Demo 等场景。拼接时要注意段落之间的停顿与音量一致性,必要时在段落间插入静音或统一响度,避免多段拼接后听感跳跃。

七、使用方法要点

  • 非语言声音标签:[laughter]、[sighs]、[music]、[gasps]、[clears throat] 等标签直接写进文本即可;— 或 ... 表示犹豫停顿;♪ 表示歌词;全大写词强调;[MAN]/[WOMAN] 偏向性别。
  • 小模型与 CPU 卸载:低显存机器在生成前设 os.environ["SUNO_USE_SMALL_MODELS"]="True" 与 os.environ["SUNO_OFFLOAD_CPU"]="True"。
  • 长文本:不要把几百字一次塞进 generate_audio,按句子切分后逐段生成,再拼接,参考长 form notebook。
  • 语音一致性:用同一个 history_prompt 多次生成,能保持说话人音色一致;Bark 不支持上传参考音频做音色克隆。
  • 输出音质:Bark 从零生成音频,不保证录音室级高保真;输出可能是完美语音,也可能是棒球场边多人争吵、用劣质麦克风录的那种现场感。
  • 提示词技巧:在文本里用 [laughs]、[sighs] 等标签插入非语言声音;用 — 或 ... 模拟犹豫停顿;歌词两侧加 ♪ 引导音乐生成;全大写单词表示强调;[MAN]/[WOMAN] 偏向性别。语码混用文本(如英文段落夹德语历史)会得到带母语口音的英语。
  • 模型缓存:首次运行 preload_models() 会从 Hugging Face 下载完整 checkpoint,约数 GB;可用 HF_HOME 指定缓存目录,避免占满系统盘。

八、支持语言与致谢

Bark 官方支持的 13 种语言全部标记为可用:英语(en)、德语(de)、西班牙语(es)、法语(fr)、印地语(hi)、意大利语(it)、日语(ja)、韩语(ko)、波兰语(pl)、葡萄牙语(pt)、俄语(ru)、土耳其语(tr)、简体中文(zh)。未来语言支持请求在 GitHub Discussions 或 Discord #forums 频道提出。Bark 自动从输入文本判断语种,不需要显式指定语言代码;遇到语码混用文本时,会尝试用各语言的母语口音生成,例如英文段落夹德语历史,通常得到带德国口音的英语。

Bark 的开发站在多个开源项目与论文之上:nanoGPT 提供了极简极速的 GPT 风格实现;EnCodec 是一流的音频编解码器;AudioLM 提供了相关训练与推理代码;Vall-E、AudioLM 等开创性论文奠定了研究基础。Suno 同时开发了 Suno Studio(模型 playground,含 Bark),可在官网申请早鸟体验,适合不想配置本地 GPU、想先试听效果的用户。

九、常见问题 FAQ

Q:为什么不要 pip install bark? A:PyPI 上的 bark 是另一个无关包,不是 Suno 维护;必须用 pip install git+https://github.com/suno-ai/bark.git 或从源码安装。

Q:生成结果为什么和提示词不一致? A:Bark 是 GPT 风格模型,会做"创造性发挥",输出方差比传统 TTS 大;这是全生成式模型的特性,不是 bug。

Q:支持自定义音色克隆吗? A:不支持。Bark 提供 100+ 预设说话人,也能生成随机新音色,但不能上传参考音频克隆特定人。

Q:为什么输出只有约 13-14 秒? A:GPT 架构的上下文窗口就是按这个长度优化的;长文本请用长 form notebook 分段生成再拼接。

Q:需要多少显存? A:完整模型约 12GB;8GB 用小模型;2GB 左右加 SUNO_OFFLOAD_CPU=True 与 SUNO_USE_SMALL_MODELS=True。

Q:生成的音频为什么听起来像 1980 年代电话音质? A:Bark 从零生成音频,目标不是高保真录音室语音;输出风格是开放式的,现场感、底噪、多人声都可能出现。

Q:模型缓存目录怎么改? A:Bark 用 Hugging Face hub 下载模型,设 HF_HOME 环境变量即可改缓存位置。

Q:Bark 能商用吗? A:2023 年 5 月起 Bark 以 MIT 协议发布,预训练 checkpoint 也可商用;但它是研究用途模型,输出可能偏离提示词,Suno 不负责生成内容,商用前请自行评估风险。

Q:Bark 和 Piper、SenseVoice 有什么区别? A:Piper 是传统流水线 TTS(espeak-ng 音素 + VITS 声学模型),稳定、快、离线;SenseVoice 是语音理解模型(识别+情感+事件),不做合成;Bark 是全生成式文本到音频模型,能生成语音、音乐、音效、非语言人声,但不可控性强、单次约 13 秒、需要 12GB 显存。选哪个取决于场景:要稳定播报选 Piper,要语音理解选 SenseVoice,要创意音频选 Bark。

Q:怎么让生成的语音更像某个预设? A:在 generate_audio 里传 history_prompt="v2/en_speaker_6" 等预设名,Bark 会匹配该预设的音调、音高、情感与韵律;同一预设多次生成可保持音色一致。预设库在 Notion 页面或 bark/assets/prompts 目录浏览。

Q:Bark 能生成中文吗? A:能,简体中文(zh)在官方支持列表里;Bark 自动从文本判断语种,中文文本直接喂即可。目前英语质量最好,其他语言包括中文会随模型迭代继续改进。

Q:生成失败或显存溢出怎么办? A:先确认是否在 generate_audio 之前设了 SUNO_USE_SMALL_MODELS=True 与 SUNO_OFFLOAD_CPU=True;把长文本切短到 13 秒以内;关闭其他占显存的进程;CPU 推理虽然慢但能跑通,适合调试。

十、跳转链接

评论交流

文章目录