标是将每一段声音通过GPT-SoVITS的API的API进行克隆,因为拼在一起的整个片段处理会造成内存或者缓存溢出
将目录下的音频文件生成到指定目录下,然后再进行拼接。
通过AI工具箱生成的数据文件是这样的结构,temp目录下是没个片段生成的部分,==connect_==是正常拼接的音频文件,==silent_==是剪切无声片段的音频文件,
这里克隆后会拼接生成一个 clone的音频文件。
然后移动到指定的目录下。
完整代码:
# env 日常使用目录/py
# -*- coding: UTF-8 -*-
from pydub import AudioSegment
import shutil
import os
from gradio_client import Client, handle_file
# API的URL
client = Client("http://localhost:9888/")
base_dir = "H:/MyScriptPublic/AIGC/GPT-SoVITS-Gradio【bak】/"
change_sovits_weights = os.path.join(base_dir, "SoVITS_weights", "MrDataYang_e8_s1400.pth")
result_sovits = client.predict(
change_sovits_weights,
api_name="/change_sovits_weights"
)
change_sovits_weights = os.path.join(base_dir, "GPT_weights", "MrDataYang-e20.ckpt")
result_gpt = client.predict(
"GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt",
api_name="/change_gpt_weights"
)
# 合并音频文件
def merge_wav_files(directory, result_path):
# 获取所有.wav文件并按文件名排序
files = sorted([f for f in os.listdir(directory) if f.endswith('.wav')], key=lambda x:int(x.split('.')[0]))
print(directory, result_path)
print(files)
# 初始化一个空的音频段
combined = AudioSegment.empty()
# 依次加载每个文件并追加到combined变量中
for file in files:
path = os.path.join(directory, file)
audio = AudioSegment.from_wav(path)
combined += audio
# 导出合并后的文件
combined.export(result_path, format="wav")
def move_files_and_directories(src_dir, matching_directory):
# 确保目标目录存在,不存在则创建
os.makedirs(matching_directory, exist_ok=True)
wav_matching_directory