白嫖党必看!Google Colab 零成本运行 Index TTS 2.0,B站大神同款语音克隆!

colab项目地址

https://colab.research.google.com/drive/1DB3L8WDg4PSRRa7-FFdf0IiJbzVMRDlT?usp=sharing

批量下载python代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import os
import time
from gradio_client import Client, handle_file
voice_ref_filename = "音频.AAC"
text_filename = "音频.txt"
base_dir = os.path.dirname(os.path.abspath(__file__))
api_url = "https://322408008f2b9462b2.gradio.live"
output_dirname = "audio"
voice_reference_path = os.path.join(base_dir, voice_ref_filename)
text_file_path = os.path.join(base_dir, text_filename)
output_directory = os.path.join(base_dir, output_dirname)
max_retries = 50
retry_delay = 5
if not os.path.exists(voice_reference_path):
print(f"错误:找不到声音参考文件。")
print(f"程序期望路径为: {voice_reference_path}")
print("请确保文件在脚本的同一目录下,或文件名配置正确。")
exit()
if not os.path.exists(text_file_path):
print(f"错误:找不到文本文件。")
print(f"程序期望路径为: {text_file_path}")
print("请确保文件在脚本的同一目录下,或文件名配置正确。")
exit()
if not os.path.exists(output_directory):
print(f"信息:输出目录 '{output_dirname}' 不存在,正在创建...")
try:
os.makedirs(output_directory)
print(f"目录 '{output_directory}' 创建成功。")
except Exception as e:
print(f"错误:创建目录 '{output_directory}' 失败,错误信息: {e}")
exit()
client = None
print(f"正在连接 API: {api_url} ...")
while client is None:
try:
client = Client(api_url)
print("API 连接成功!")
except Exception as e:
print(f"连接失败,错误信息: {e}")
print(f"将在 {retry_delay} 秒后重试...")
time.sleep(retry_delay)
try:
with open(text_file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
text_lines_to_generate = [line.strip() for line in lines if line.strip()]
if not text_lines_to_generate:
print("警告:文本文件为空或只包含空行,程序退出。")
exit()
total_lines = len(text_lines_to_generate)
print(f"共发现 {total_lines} 行文本需要处理。")
for index, text_to_generate in enumerate(text_lines_to_generate):
file_number = index + 1
output_filename = f"{file_number}.wav"
output_filepath = os.path.join(output_directory, output_filename)
if os.path.exists(output_filepath):
print(f"[{file_number}/{total_lines}] 文件 '{output_filename}' 已存在,跳过生成。")
continue
print(f"\n--- [{file_number}/{total_lines}] 正在处理: '{text_to_generate}' ---")
retries = 0
success = False
while not success and retries < max_retries:
try:
result_dict = client.predict(
text=text_to_generate,
prompt=handle_file(voice_reference_path),
emo_ref_path=handle_file(voice_reference_path),
api_name="/gen_single"
)
generated_audio_path = None
if isinstance(result_dict, dict):
generated_audio_path = result_dict.get('value') or result_dict.get('audio')
elif isinstance(result_dict, str) and os.path.exists(result_dict):
generated_audio_path = result_dict
elif isinstance(result_dict, tuple):
generated_audio_path = result_dict[0]
if not generated_audio_path:
print(f"调试信息 - API返回结果: {result_dict}")
raise ValueError("无法从API结果中获取音频路径")
if os.path.exists(generated_audio_path):
if os.path.exists(output_filepath):
os.remove(output_filepath)
os.rename(generated_audio_path, output_filepath)
print(f"成功!保存为: '{output_filename}'")
success = True
else:
print(f"错误:生成的临时文件 '{generated_audio_path}' 不存在。")
raise FileNotFoundError("生成的音频文件不存在")
except Exception as e:
retries += 1
print(f"发生错误: {e}")
if retries < max_retries:
print(f"将在 {retry_delay} 秒后进行第 {retries} 次重试...")
time.sleep(retry_delay)
else:
print(f"已达到最大重试次数 ({max_retries}次),放弃本行。")
time.sleep(1)
print("\n所有文本行处理完毕。")
except Exception as e:
print(f"程序运行过程中发生未知错误: {e}")
import traceback
traceback.print_exc()