音频课程文档
使用 pipeline 进行音频生成
并获得增强的文档体验
开始使用
使用 pipeline 进行音频生成
音频生成包含一系列多用途任务,涉及生成音频输出。 我们将在此处研究的任务是语音生成(也称为“文本到语音”)和音乐生成。 在文本到语音中,模型将一段文本转换为栩栩如生的口语声音,为虚拟助手、视障人士的辅助工具和个性化有声读物等应用打开了大门。 另一方面,音乐生成可以实现创造性表达,主要用于娱乐和游戏开发行业。
在 🤗 Transformers 中,你会找到一个 pipeline,涵盖了这两项任务。 这个 pipeline 被称为 "text-to-audio"
,但为了方便起见,它也有一个 "text-to-speech"
别名。 在这里,我们将同时使用两者,你可以自由选择哪一个更适合你的任务。
让我们探索如何使用这个 pipeline 开始为文本生成音频旁白,以及用几行代码生成音乐。
这个 pipeline 是 🤗 Transformers 的新功能,是 4.32 版本发布的一部分。 因此,你需要将库升级到最新版本才能获得此功能
pip install --upgrade transformers
生成语音
让我们从探索文本到语音生成开始。 首先,就像音频分类和自动语音识别一样,我们需要定义 pipeline。 我们将定义一个文本到语音 pipeline,因为它最能描述我们的任务,并使用 suno/bark-small
checkpoint
from transformers import pipeline
pipe = pipeline("text-to-speech", model="suno/bark-small")
下一步非常简单,只需将一些文本传递到 pipeline 中。 所有预处理都将在后台为我们完成
text = "Ladybugs have had important roles in culture and religion, being associated with luck, love, fertility and prophecy. "
output = pipe(text)
在 notebook 中,我们可以使用以下代码片段来收听结果
from IPython.display import Audio
Audio(output["audio"], rate=output["sampling_rate"])
我们与 pipeline 一起使用的模型 Bark 实际上是多语言的,因此我们可以轻松地将初始文本替换为例如法语文本,并以完全相同的方式使用 pipeline。 它会自动识别语言
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 的细节,并且还将展示如何使用其他模型来完成此任务。 现在,让我们生成一些音乐吧!
生成音乐
和以前一样,我们将从实例化一个 pipeline 开始。 对于音乐生成,我们将定义一个文本到音频 pipeline,并使用预训练的 checkpoint 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"])