根据之前文章后续chatTTS文本转语音 实践相关记录-CSDN博客 直接合成多条音频,顺序会乱,最终合成的效果不显著,改进了合成音频的代码
直接获取文件夹中的所有 WAV 文件,并按文件名排序来合并它们。
wav_files.sort()
默认是按字母升序排序,也就是说,文件名的顺序是从小到大(如 line_1.wav
在 line_2.wav
之前)。对于命名格式 line_{index}.wav
,这种方式会保证它们按数字顺序排列,因为文件名中的数字在字母排序中是升序的。
如果想要更明确地按照文件名中的数字顺序排序,可以使用一个自定义的排序函数,确保它按数字进行排序。
import os
from pydub import AudioSegment# 指定文件夹路径
folder_path = 'output_wav_files'# 创建一个空的 AudioSegment 对象
combined = AudioSegment.empty()# 获取所有 WAV 文件
wav_files = [f for f in os.listdir(folder_path) if f.endswith('.wav')]# 按文件名中的数字进行排序
wav_files.sort(key=lambda x: int(x.split('_')[1].split('.')[0]))# 遍历文件并合并
for file_name in wav_files:file_path = os.path.join(folder_path, file_name)segment = AudioSegment.from_wav(file_path)combined += segment# 保存合并后的文件
combined.export('combined_output.wav', format='wav')
在这个示例中,key=lambda x: int(x.split('_')[1].split('.')[0])
提取了文件名中的数字部分,并以此进行排序,确保按数字顺序合并 WAV 文件
还是需要保证之前生成音频输出的wav文件命名格式跟我一样
如果自己编辑的命名,可能需要修改以下合成音频的代码处理顺序的格式