diff --git a/TTS/T1_CloneVoice.py b/TTS/T1_CloneVoice.py new file mode 100644 index 0000000..9552e52 --- /dev/null +++ b/TTS/T1_CloneVoice.py @@ -0,0 +1,45 @@ +# coding=utf-8 +import os +import sys + +# 添加项目根目录到 sys.path 以便导入 Util +root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if root_dir not in sys.path: + sys.path.append(root_dir) + +from Util.AlyTtsKit import QwenTTSManager + +# ======= 配置 ======= +# 用于声音复刻的音频文件 +VOICE_FILE_PATH = os.path.join(os.path.dirname(__file__), "少惠林.wav") + +def main(): + """ + T1: 声音复刻 (克隆) + """ + print('[T1] 启动声音复刻流程...') + + if not os.path.exists(VOICE_FILE_PATH): + print(f'[错误] 找不到录音文件: {VOICE_FILE_PATH}') + print('请确保该目录下存在用于复刻的 wav 文件。') + return + + try: + # 1. 初始化管理器 + tts_manager = QwenTTSManager() + + # 2. 执行复刻 + print(f'[系统] 正在上传并复刻音频: {os.path.basename(VOICE_FILE_PATH)} ...') + voice_id = tts_manager.create_voice_enrollment(VOICE_FILE_PATH) + + print('\n' + '='*50) + print(f' 声音复刻成功!') + print(f' Voice ID: {voice_id}') + print('='*50) + print('\n请复制上面的 Voice ID,用于 T2_PlayVoice.py 进行播音测试。') + + except Exception as e: + print(f'[错误] 复刻过程中发生异常: {e}') + +if __name__ == '__main__': + main() diff --git a/TTS/T2_PlayVoice.py b/TTS/T2_PlayVoice.py new file mode 100644 index 0000000..7efe90e --- /dev/null +++ b/TTS/T2_PlayVoice.py @@ -0,0 +1,48 @@ +# coding=utf-8 +import os +import sys + +# 添加项目根目录到 sys.path 以便导入 Util +root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if root_dir not in sys.path: + sys.path.append(root_dir) + +from Util.AlyTtsKit import QwenTTSManager + +# ======= 配置 ======= +# 请在此处粘贴 T1_CloneVoice.py 生成的 Voice ID +MY_VOICE_ID = "qwen-tts-vc-guanyu-voice-20260131160431051-8e51" + +# 待合成播音的文本列表 +PLAY_TEXTS = [ + '您好,这是利用克隆完成的声音进行的播音测试。', + '如果您能听到这段话,说明声音复刻和实时合成流程已经全部打通。', + '这种模块化的拆分让调试变得更加简单了!' +] + +def main(): + """ + T2: 播音测试 + """ + print('[T2] 启动播音测试流程...') + + if not MY_VOICE_ID or "请替换" in MY_VOICE_ID: + print('[错误] 未检测到有效的 Voice ID。') + print('请先运行 T1_CloneVoice.py 获取 ID,并修改本脚本中的 MY_VOICE_ID 变量。') + return + + try: + # 1. 初始化管理器 + tts_manager = QwenTTSManager() + + # 2. 执行播音 + print(f'[系统] 正在使用 Voice ID: {MY_VOICE_ID} 进行播音...') + tts_manager.start_synthesis(MY_VOICE_ID, PLAY_TEXTS) + + print('[系统] 播音测试完成。') + + except Exception as e: + print(f'[错误] 播音过程中发生异常: {e}') + +if __name__ == '__main__': + main() diff --git a/TTS/testTtsModel.py b/TTS/testTtsModel.py deleted file mode 100644 index aa79d8a..0000000 --- a/TTS/testTtsModel.py +++ /dev/null @@ -1,57 +0,0 @@ -# coding=utf-8 -# Installation instructions for pyaudio: -# CentOS -# sudo yum install -y portaudio portaudio-devel && pip install pyaudio -# Microsoft Windows -# python -m pip install pyaudio - -import os -import sys - -# 添加项目根目录到 sys.path 以便导入 Util -root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -if root_dir not in sys.path: - sys.path.append(root_dir) - -from Util.AlyTtsKit import QwenTTSManager - -# ======= 测试配置 ======= -VOICE_FILE_PATH = os.path.join(os.path.dirname(__file__), "voice.mp3") - -def main(): - """ - 测试函数 - """ - print('[系统] 启动 Qwen TTS 测试 (使用 AlyTtsKit)...') - - # 待合成的文本 - test_texts = [ - '您好,我是您的 AI 助手。', - '现在正在测试抽取到 Util 目录下的 AlyTtsKit 功能。', - '希望这次重构能让代码更加模块化!' - ] - - try: - # 1. 初始化管理器 - tts_manager = QwenTTSManager() - - # 2. 创建/获取音色 - if not os.path.exists(VOICE_FILE_PATH): - print(f'[错误] 测试音频文件不存在: {VOICE_FILE_PATH}') - return - - print('[系统] 正在进行声音复刻...') - voice_id = tts_manager.create_voice_enrollment(VOICE_FILE_PATH) - print(f'[系统] 声音复刻成功,Voice ID: {voice_id}') - - # 3. 执行合成并播放 - print('[系统] 开始语音合成...') - tts_manager.start_synthesis(voice_id, test_texts) - - print('[系统] 测试完成。') - - except Exception as e: - print(f'[系统] 发生错误: {e}') - -if __name__ == '__main__': - main() diff --git a/TTS/少惠林.wav b/TTS/少惠林.wav new file mode 100644 index 0000000..7a8a8a1 Binary files /dev/null and b/TTS/少惠林.wav differ diff --git a/TTS/文档.md b/TTS/文档.md new file mode 100644 index 0000000..7c281eb --- /dev/null +++ b/TTS/文档.md @@ -0,0 +1,3 @@ +录制音频 +https://www.audacityteam.org/download/ +https://c.biancheng.net/view/yb9mmfd.html diff --git a/Util/__pycache__/AlyTtsKit.cpython-310.pyc b/Util/__pycache__/AlyTtsKit.cpython-310.pyc new file mode 100644 index 0000000..3205383 Binary files /dev/null and b/Util/__pycache__/AlyTtsKit.cpython-310.pyc differ