音频课程文档

使用管道进行音频生成

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

使用管道进行音频生成

音频生成包含一系列涉及生成音频输出的通用任务。我们将在这里探讨的任务是语音生成(又称“文本转语音”)和音乐生成。在文本转语音中,模型将一段文本转换为逼真的口语,为虚拟助手、视障辅助工具和个性化有声读物等应用打开了大门。另一方面,音乐生成可以实现创造性表达,主要用于娱乐和游戏开发行业。

在 🤗 Transformers 中,您会找到一个涵盖这两个任务的管道。这个管道被称为 "text-to-audio",但为了方便起见,它也有一个 "text-to-speech" 别名。在这里我们将同时使用这两个,您可以自由选择哪个更适用于您的任务。

让我们探讨如何使用此管道,仅需几行代码即可开始为文本生成音频旁白和音乐。

此管道是 🤗 Transformers 的新功能,作为 4.32 版本的一部分发布。因此,您需要将库升级到最新版本才能获得此功能

pip install --upgrade transformers

生成语音

让我们从探索文本转语音生成开始。首先,就像音频分类和自动语音识别一样,我们需要定义管道。我们将定义一个文本转语音管道,因为它最能描述我们的任务,并使用 suno/bark-small 检查点。

from transformers import pipeline

pipe = pipeline("text-to-speech", model="suno/bark-small")

下一步就像将一些文本传递给管道一样简单。所有预处理都将在幕后为我们完成

text = "Ladybugs have had important roles in culture and religion, being associated with luck, love, fertility and prophecy. "
output = pipe(text)

在笔记本中,我们可以使用以下代码片段来收听结果

from IPython.display import Audio

Audio(output["audio"], rate=output["sampling_rate"])

我们与管道一起使用的模型 Bark 实际上是多语言的,因此我们可以轻松地将原始文本替换为法语文本,并以完全相同的方式使用管道。它会自行识别语言

fr_text = "Contrairement à une idée répandue, le nombre de points sur les élytres d'une coccinelle ne correspond pas à son âge, ni en nombre d'années, ni en nombre de mois. "
output = pipe(fr_text)
Audio(output["audio"], rate=output["sampling_rate"])

这个模型不仅是多语言的,它还可以生成包含非语言交流和歌唱的音频。以下是您可以让它唱歌的方法

song = "♪ In the jungle, the mighty jungle, the ladybug was seen. ♪ "
output = pipe(song)
Audio(output["audio"], rate=output["sampling_rate"])

我们将在后续专门介绍文本转语音的单元中深入探讨 Bark 的具体细节,并展示如何将其他模型用于此任务。现在,让我们生成一些音乐!

生成音乐

和之前一样,我们首先实例化一个管道。对于音乐生成,我们将定义一个文本转音频管道,并使用预训练检查点 facebook/musicgen-small 初始化它。

music_pipe = pipeline("text-to-audio", model="facebook/musicgen-small")

让我们创建一个我们想要生成的音乐的文本描述

text = "90s rock song with electric guitar and heavy drums"

我们可以通过向模型传递一个额外的 max_new_tokens 参数来控制生成输出的长度。

forward_params = {"max_new_tokens": 512}

output = music_pipe(text, forward_params=forward_params)
Audio(output["audio"][0], rate=output["sampling_rate"])
< > 在 GitHub 上更新