BARK AI部署在Colaboratory,并输出长语音
准备工作
- 依次点击修改–>笔记本设置->选择硬件加速器为 T4 GPU(不然跑模型会很慢)
程序示例
输出短语音(最长14S)
- 点击插入代码单元格
!pip install git+https://github.com/suno-ai/bark.git
# 从GitHub上获取Bark模型的源代码,并在Python环境中安装Bark文本转音频模型,使你可以在Python中使用Bark进行文本到音频的转换。
from bark import SAMPLE_RATE, generate_audio, preload_models
from scipy.io.wavfile import write as write_wav
from IPython.display import Audio
# download and load all models
preload_models()
# generate audio from text
text_prompt = """
# 在这里输入想转换为音频的文字
"""
audio_array = generate_audio(text_prompt)
# save audio to disk
write_wav("bark_generation.wav", SAMPLE_RATE, audio_array)
# play text in notebook
Audio(audio_array, rate=SAMPLE_RATE)
代码解释
这段代码使用Bark库来生成音频,然后保存为.wav文件,并在IPython环境中播放生成的音频。
-
导入必要的库和模块:
from bark import SAMPLE_RATE, generate_audio, preload_models
: 导入了Bark库中的一些函数和常量。from scipy.io.wavfile import write as write_wav
: 导入了SciPy库中的写.wav文件的函数。from IPython.display import Audio
: 导入了IPython中用于播放音频的函数。
-
加载Bark模型:
preload_models()
: 这个函数从Bark库中下载并加载所有必需的模型,以便后续生成音频。
-
定义文本内容:
text_prompt = """ ... """
: 这里定义了一个多行文本,作为输入用于生成音频。
-
生成音频:
audio_array = generate_audio(text_prompt)
: 使用Bark库中的generate_audio
函数将文本转换为音频数据。
-
保存音频到文件:
write_wav("bark_generation.wav", SAMPLE_RATE, audio_array)
: 将生成的音频数据保存为一个.wav文件,文件名为"bark_generation.wav"。
-
在IPython环境中播放音频:
Audio(audio_array, rate=SAMPLE_RATE)
: 使用IPython的Audio
函数将生成的音频以指定的采样率(SAMPLE_RATE)播放在Notebook中。
输出长语音(突破14S的限制)
import nltk
nltk.download('punkt')
# 可以在Python中使用NLTK提供的自然语言处理功能。
# 下载了NLTK库中的"Punkt"模型。Punkt是NLTK中的一个句子分割器(sentence tokenizer),用于将文本分割成句子。在自然语言处理任务中,句子分割通常是第一步,因为它将文本分成句子可以更容易地进行其他处理,比如词语分割和语法分析。
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
from IPython.display import Audio
import nltk # we'll use this to split into sentences
import numpy as np
from bark.generation import (
generate_text_semantic,
preload_models,
)
from bark.api import semantic_to_waveform
from bark import generate_audio, SAMPLE_RATE
preload_models()
script = """
# 在这里输入想转换为音频的文字
""".replace("\n", " ").strip()
sentences = nltk.sent_tokenize(script)
SPEAKER = "v2/en_speaker_6"
silence = np.zeros(int(0.25 * SAMPLE_RATE)) # quarter second of silence
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)
代码解释
这段代码执行以下操作:
-
设置CUDA可见设备:
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
这一行代码设置了CUDA的可见设备,通常用于配置在使用GPU加速的深度学习任务中哪个GPU设备被使用。 -
导入必要的库:
from IPython.display import Audio
用于在IPython环境中播放音频;import nltk
用于分割文本为句子;import numpy as np
用于处理数组;from bark.generation import generate_text_semantic, preload_models
和from bark.api import semantic_to_waveform
用于调用Bark文本到音频生成的函数。 -
预加载Bark模型:
preload_models()
这个函数用于预加载Bark文本到音频生成所需的模型,提前加载模型可以加快后续音频生成的速度。 -
定义文本脚本:
script = """ ... """
这里定义了一个文本脚本。文本被分割成句子,每个句子用于后续的音频生成。 -
将文本分割成句子:
sentences = nltk.sent_tokenize(script)
使用NLTK库将文本脚本分割成句子,这样每个句子都可以被单独处理。 -
定义生成音频的参数:
SPEAKER = "v2/en_speaker_6"
定义了生成音频时使用的说话者(speaker)。 -
生成音频并创建音频播放对象: 在
for
循环中,对每个句子执行generate_audio(sentence, history_prompt=SPEAKER)
函数,该函数生成给定文本句子的音频,并将音频与静音间隔组合到pieces
数组中。最后,np.concatenate(pieces)
将所有音频片段连接起来,Audio(np.concatenate(pieces), rate=SAMPLE_RATE)
创建了一个可以在IPython环境中播放的音频对象。
这段代码的目的是将给定的文本脚本转换为音频,并在IPython环境中播放生成的音频。