Bark模型:音频生成的新兴力量
Bark模型是什么?
Bark是由Suno创建的一种基于Transformer的文本到音频模型。与传统的文本到语音(TTS)模型不同,Bark是一个完全生成式的模型,这意味着它不仅能生成自然的语音,还能创作音乐、背景噪音及其他音效。Bark模型的特点在于超真实的语音生成能力,尤其在英语方面表现突出,除了语音以外,它还可以产生非语言交流音效,如笑声、叹息声和哭泣声。
如何实战部署Bark模型?
在这一部分,我们将详细介绍如何在自己的环境中部署Bark模型并进行推理。
配置Python运行环境
首先,我们需要确保我们的Python环境配置正确。以下是安装所需库的步骤:
bash
pip install transformers4.42.3
pip install torch2.1.2
导入必要的库
运行以下代码来导入所需的库:
python
import torchaudio
import numpy as np
import pandas as pd
import transformers
import accelerate
import torchvision
加载模型进行推理
在实际运行模型之前,我们需要加载它:
python
from transformers import AutoProcessor, AutoModel
processor = AutoProcessor.from_pretrained(“suno/bark”)
model = AutoModel.from_pretrained(“suno/bark”, torch_dtype=torch.float16).eval().cuda()
Bark模型的功能展示
接下来,我们将通过一些示例展示Bark模型的实现效果。
生成英文文本对应的TTS效果
python
from IPython.display import Audio
inputs = processor(text=[“Hello, my name is Suno. And, uh — and I like pizza. [laughs] But I also have other interests such as playing tic tac toe.”], return_tensors=”pt”).to(“cuda”)
speech_values = model.generate(**inputs, do_sample=True)
sampling_rate = model.generation_config.sample_rate
Audio(speech_values.cpu().numpy().squeeze(), rate=sampling_rate)
输出效果展示:生成的英文语音效果相当自然流畅。
生成中文文本对应的TTS效果
python
inputs = processor(text=[“[laughs] 这个故事太好笑了.”], return_tensors=”pt”, voice_preset=”v2/zh_speaker_9″, max_length=2048).to(“cuda”)
speech_values = model.generate(**inputs, do_sample=True)
sampling_rate = model.generation_config.sample_rate
Audio(speech_values.cpu().numpy().squeeze(), rate=sampling_rate)
输出效果展示:中文生成效果稳定,但未必如英文那么流畅。
指定具体的音色
通过调整voice_preset
字段,我们可以指定对应的音色:
python
inputs = processor(text=[“听到你这么开心我也很高兴呢,发生什么好事啦?”], return_tensors=”pt”, max_length=2048, voice_preset=”zh_speaker_2″).to(“cuda”)
speech_values = model.generate(**inputs, do_sample=True)
sampling_rate = model.generation_config.sample_rate
Audio(speech_values.cpu().numpy().squeeze(), rate=sampling_rate)
输出效果展示:可以看到指定音色的清晰表达。
通过文本生成歌曲
生成音乐需要特定格式的文本,我们可以用“♪”作为开头和结尾。
python
text_prompt = “””♪ 可能南方的阳光 照着北方的风可能时光被吹走 从此无影无踪可能故事只剩下 一个难忘的人♪”””
inputs = processor(text=[text_prompt], return_tensors=”pt”, max_length=2048).to(“cuda”)
speech_values = model.generate(**inputs, do_sample=True)
sampling_rate = model.generation_config.sample_rate
Audio(speech_values.cpu().numpy().squeeze(), rate=sampling_rate)
输出效果展示:生成的旋律仍显得稚嫩,可能不如专业音乐产品的效果。
处理超长文本
由于Bark模型一次只能生成约14秒的音频,对于长文本需要进行手动拆分:
python
inputs = processor(text=”””人生没有白走的路,年少不经事,懂事已中年。在无知的年龄做了选择,在懂事的年纪承担后果。…”””.split(“。”), return_tensors=”pt