从ChatTTS获取语音数据方法
介绍:
ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在HuggingFace中开源的版本为4万小时训练且未SFT的版本。
详细介绍请看:ChatTTS介绍以及快速本地部署方法
获取ChatTTS数据步骤如下:
步骤一:加载模型
# 加载模型
chat = ChatTTS.Chat()
chat.load_models(source="local", local_path=CHATTTS_DIR, compile=True if os.getenv('compile', 'true').lower() != 'false' else False)
步骤二:定义要转换的文本
# 定义要转换的文本
text = "你好啊朋友们,听说今天是个好日子,难道不是吗。"
prompt = '[oral_2][laugh_0][break_0]'
步骤三:生成语音片段
# 生成语音片段列表
wavs = chat.infer([text], use_decoder=True)
print(type(wavs))
print(wavs)
步骤四:合并语音片段
可以采用流式输出或者整体输出
# 初始化一个空的numpy数组用于之后的合并
combined_wavdata = np.array([], dtype=wavs[0][0].dtype) # 确保dtype与你的wav数据类型匹配
# 合并语音片段
for wavdata in wavs:
combined_wavdata = np.concatenate((combined_wavdata, wavdata[0]))
print(type(combined_wavdata))
print(combined_wavdata)
步骤五:使用sounddevice库播放音频数据
# 使用sounddevice库播放音频数据
sampling_freq = 24000 # 假设采样率为 24000 Hz
sd.play(combined_wavdata, sampling_freq)
sd.wait() # 等待文件播放结束
保存为.wav文件并播放文件音频
sf.write('../temple_wav/1111.wav', combined_wavdata, 24000)
def play_wav_file(filename):
# 读取WAV文件
sampling_freq, audio = read(filename)
# 播放WAV文件
sd.play(audio, sampling_freq)
sd.wait() # 等待文件播放结束
filename = '../temple_wav/1111.wav'
play_wav_file(filename)