Bark:一个生成逼真多语言语音的模型

Bark是一个能够生成逼真、多语言语音的模型,包括背景噪音、音乐和简单音效。它遵循GPT风格的架构,能够从任何给定的脚本中意外地偏离。传统的文本到语音(TTS)引擎产生的声音机械且单调,而Bark使用GPT风格的模型生成逼真自然的声音,给人一种听真人说话的绝佳体验。

学习目标

了解Bark模型的基本使用和功能,包括其限制和应用。学习如何使用Python代码从文本生成音频文件。

使用Python和NLTK以及Bark库创建大型语音

本文是作为数据科学博客马拉松的一部分发布的。

目录

  • 安装Bark
  • 使用Bark生成音频
  • 使用Bark生成非语言语音
  • 使用Bark处理大型句子音频
  • 改进生成的语音
  • 文本到语音技术的最新趋势
  • 结论
  • 常见问题解答

安装Bark

让使用Google Colab笔记本来理解Bark的功能和应用。要安装Bark,请使用命令pip install git+https://github.com/suno-ai/bark.git。注意不要使用pip install bark,因为它会安装一个不同的包,不是由Suno.ai管理的。

使用Bark生成音频

Bark支持多种语言,如英语、中文、法语、印地语、德语等。它还支持Bark扬声器库,其中包含支持语言的多个语音提示。请检查扬声器库列表。Bark带有一些预定义的标签/注释,如背景噪音、礼堂、开头的沉默等,这些有助于理解扬声器的使用。可以根据用户的需求在Python代码中使用这些标签设置合适的提示。

以下Python代码根据选定的扬声器生成音频文件。

from bark import SAMPLE_RATE, generate_audio, preload_models # 导入Audio以在笔记本中播放生成的音频数组。 from IPython.display import Audio for a given text input, the generate_audio function will return a numpy audio array at the output with a sample frequency of 24khz. The history prompt picks the selected speaker from the speaker library list. The model then uses Scipy to save a .wav type sound file to the desired location for further usage. # Text which needs to be converted into Speech text_prompt1 = """ A Learjet 45 aircraft with eight people on board veered off on thursday""" # generate audio numpy array for given text speech_array1 = generate_audio(text_prompt1, history_prompt="en_speaker_6") # play text in notebook Audio(speech_array1, rate=SAMPLE_RATE) import scipy scipy.io.wavfile.write("bark_out1.wav", rate=SAMPLE_RATE,data=speech_array1)

Bark能够自动检测给定文本中的脚本,并在未指定的情况下生成适当语言的扬声器音频。可以给出某些扬声器提示,如旁白、男人、女人等,以生成特定的音频演讲。然而,这些并不总是被尊重,特别是如果给出了冲突的音频历史提示。

使用Bark生成非语言语音

Bark是一个完全生成性的文本到语音模型,用于研究和演示目的。与以前的方法不同,输入文本提示直接转换为音频,而不需要使用音素作为中间步骤。因此,它可以推广到任意指令之外的语音,如音乐歌词、音效或其他非语音声音。用户也可以使用Bark产生非语言交流,如笑、唱歌、添加犹豫等。以下是一些已知可以使用Bark生成的非语音声音列表。

  • [laughter]
  • [laughs]
  • [sighs]
  • [music]
  • [gasps]
  • [clears throat]
  • — 或 … 用于犹豫
  • ♪ 用于歌词
  • 大写用于强调一个词
  • [MAN] 和 [WOMAN] 分别偏向于男性和女性扬声器

Bark可以生成所有类型的音频,并且在原则上不区分语音和音乐。有时,Bark选择将文本作为音乐生成,但可以通过在歌词周围添加音乐符号来帮助它。

检查以下Python代码,用于生成语音中的犹豫和音乐。

text_prompt3 = """ I like Indian food but ... sometimes its very SPICY """ #... adds hesitation in speech. speech_array3 = generate_audio(text_prompt3,history_prompt="en_speaker_4") # play text in notebook Audio(speech_array3, rate=SAMPLE_RATE) text_prompt4 = """ ♪ 5 little ducks went swimming one day ♪ """ speech_array4 = generate_audio(text_prompt4) # play text in notebook Audio(speech_array4, rate=SAMPLE_RATE)

Bark有能力完全克隆声音,包括音调、音高、情感等,从输入音频中。它可能被滥用,通过使用已知的、著名的语音生成欺诈性、恶意内容。由于这个伦理问题,原始的Bark库限制了音频历史提示到Suno.ai为每种支持的语言提供的有限的完全合成选项。这些扬声器提示的列表在Bark扬声器库中提到。

使用Bark处理大型句子音频

Bark将其输出语音长度限制在13-14秒。所以,如果给它一个非常大的输入文本,它将只产生14秒的输出。由于Bark是一个GPT风格的模型,其优化的架构只能产生大约这个长度的语音。对于生成更长的音频,需要将所需的文本分成更小的句子。然后,为它们各自生成音频并将所有这样的音频文件组合起来,以产生整体音频。

按照以下步骤使用Bark生成短篇故事音频语音。

  1. 使用NLTK库将较长的文本分成句子,并生成句子列表。
  2. 使用Bark生成音频函数为每个句子生成音频文件,并在每个句子后添加四分之一秒的沉默。创建一个for循环,为句子生成音频,然后添加沉默。
  3. 连接生成的音频文件序列,然后检查组合的声音文件,以听取完整的语音。
story_1 = """ There was once a hare who was friends with a tortoise. One day, he challenged the tortoise to a race.Seeing how slow the tortoise was going, the hare thought he’ll win this easily. So he took a nap while the tortoise kept on going.When the hare woke up, he saw that the tortoise was already at the finish line. Much to his chagrin, the tortoise won the race while he was busy sleeping.""".replace("\n", " ") sentences = nltk.sent_tokenize(story_1) SPEAKER = "v2/en_speaker_6" # quarter second of silence silence = np.zeros(int(0.25 * SAMPLE_RATE)) pieces = [] for sentence in sentences: audio_array = generate_audio(sentence,history_prompt=SPEAKER) pieces += [audio_array, silence.copy()] Audio(np.concatenate(pieces), rate=SAMPLE_RATE)

最终组合的音频文件生成了一个好的声音剪辑,讲述了整个故事的叙述。

改进生成的语音

如果给定的文本太短,Bark会在提示的末尾自行添加一些额外的音频。这导致生成的音频输出不佳。这是一个例子。

text_prompt5 = """ what happened my friend? """ speech_array5 = generate_audio(text_prompt5,history_prompt="v2/en_speaker_6") # play text in notebook Audio(speech_array5, rate=SAMPLE_RATE)

上述代码的输出:上述代码为一个简单的语音行生成了5秒的音频,最后3秒是空白。为了克服这个问题并为这种情况生成高质量的音频,尝试使用参数min_eos_p。这个参数在generate_text_semantic函数中调整Bark生成文本的阈值。通过降低这个概率阈值,可以停止文本生成并解决额外添加音频的问题。

以下是改进生成音频的步骤。

  1. 使用generate_text_semantic函数从给定文本中生成语义标记。
  2. 将min_eos_p参数的值降低到0.05(默认值0.2)。
  3. 使用semantic_to_waveform函数生成numpy音频数组。
from bark.api import semantic_to_waveform from bark.generation import (generate_text_semantic,preload_models) semantic_token5 = generate_text_semantic(text_prompt5,history_prompt="v2/en_speaker_6", min_eos_p=0.05) # this controls how likely the generation is to end speech_array6 = semantic_to_waveform(semantic_token5, history_prompt="v2/en_speaker_6") # play text in notebook Audio(speech_array6, rate=SAMPLE_RATE)

文本到语音技术的最新趋势

  • Bark是一个高度逼真的生成模型,可以生成类似人类的自然声音输出。
  • 它是一个独特的模型,可以产生笑声、哭泣和音乐等音效。
  • 可以使用音频格式化技术和调整阈值参数来使用Bark生成高质量的语音。
  1. 问:BarkAI的用途是什么?
  2. 答:Bark是一个生成性文本到语音模型,可以产生高度表达性和情感性的声音。它提供了听真人的绝佳体验。
  3. 问:BarkAI可以商业使用吗?
  4. 答:Bark是一个基于变换器的文本到语音模型,由Suno.ai开发。该模型在MIT许可下授权,这意味着它可以商业使用。
  5. 问:可以使用Bark克隆自定义声音吗?
  6. 答:原始的Bark模型限制了生成的声音只限于Bark扬声器库中可用的有限扬声器提示。通过使用Hubert和Bark,可以从自定义声音生成音频。有关更多详细信息,请查看这里。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485