# 安装/验证 SDK 版本(3.0.1460) pip install tencentcloud-sdk-python-tts==3.0.1460 pip install websocket-client==0.48 requests
tts_sdk
# -*- coding: utf-8 -*- import os import json import time import requests from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException # 导入SDK内置的旧版接口(v20190823) from tencentcloud.tts.v20190823 import tts_client, models# ===================== 配置区 ===================== # 你的腾讯云密钥(直接替换,本地运行安全) SECRET_ID = "AKIDHQgomY6ScdZIo9HQZYLvIRM7g2EC1d2E" SECRET_KEY = "1zjGZgbJn493jKjvufCWeYEh070gAapt" REGION = "ap-beijing" # 地域 OUTPUT_DIR = "temp" # 音频输出目录 OUTPUT_FILENAME = "tts_sdk_output.mp3"# 旧版接口支持的音色列表(8位ID,SDK 3.0.1460 兼容) VOICE_LIST = {"智逍遥男声": 10510000, # 旁对白阅读风格"智瑜女声": 10510001, # 温柔知性"智聆新闻男声": 10510002,# 标准新闻播报"智美可爱女声": 10510003,# 甜美可爱"智云商务男声": 10510004,# 沉稳专业"智睿男声": 10510005, # 成熟稳重"智甜女声": 10510006 # 清甜灵动 } # ==================================================def init_client():"""初始化TTS客户端"""try:# 实例化认证对象cred = credential.Credential(SECRET_ID, SECRET_KEY)# 配置HTTP选项httpProfile = HttpProfile()httpProfile.endpoint = "tts.tencentcloudapi.com" # TTS接口域名# 配置客户端选项clientProfile = ClientProfile()clientProfile.httpProfile = httpProfile# 实例化TTS客户端client = tts_client.TtsClient(cred, REGION, clientProfile)print("✅ 客户端初始化成功")return clientexcept TencentCloudSDKException as err:print(f"❌ 客户端初始化失败:{err}")return Nonedef create_tts_task(client, text, voice_name="智逍遥男声", speed=1.0, volume=1.0):"""创建TTS转换任务,返回TaskId"""# 验证音色if voice_name not in VOICE_LIST:print(f"❌ 无效音色!可选音色:{list(VOICE_LIST.keys())}")return Nonevoice_type = VOICE_LIST[voice_name]print(f"\n=== 任务参数 ===")print(f"文本:{text[:20]}...")print(f"音色:{voice_name}(ID:{voice_type})")print(f"语速:{speed} | 音量:{volume} | 格式:mp3")print("===============")try:# 构造请求参数(旧版接口用 Codec 指定格式)params = {"Text": text,"ModelType": 1, # 默认模型"VoiceType": voice_type, # 音色ID"Speed": speed, # 语速(0.6-1.4)"Volume": volume, # 音量(0.0-10.0)"Codec": "mp3", # 输出格式(旧版参数名)"SampleRate": 16000 # 采样率(适配播放) }# 实例化请求对象req = models.CreateTtsTaskRequest()req.from_json_string(json.dumps(params))# 发送请求创建任务resp = client.CreateTtsTask(req)task_id = resp.Data.TaskIdprint(f"✅ 任务创建成功,TaskId:{task_id}")return task_idexcept TencentCloudSDKException as err:print(f"❌ 创建任务失败:{err}")return Nonedef query_task_status(client, task_id):"""查询任务状态,返回音频URL"""try:req = models.DescribeTtsTaskStatusRequest()req.from_json_string(json.dumps({"TaskId": task_id}))while True:resp = client.DescribeTtsTaskStatus(req)task_data = resp.Dataif task_data.Status == 2: # 任务成功print(f"✅ 任务执行完成")return task_data.ResultUrlelif task_data.Status == 3: # 任务失败print(f"❌ 任务执行失败:{task_data.ErrorMsg}")return Noneelse: # 等待/执行中print(f"⌛ 任务处理中({task_data.StatusStr})...")time.sleep(1)except TencentCloudSDKException as err:print(f"❌ 查询任务失败:{err}")return Nonedef download_audio(audio_url, output_path):"""下载音频文件"""try:# 确保输出目录存在os.makedirs(os.path.dirname(output_path), exist_ok=True)# 下载音频response = requests.get(audio_url, timeout=30)if response.status_code == 200:with open(output_path, "wb") as f:f.write(response.content)print(f"💾 音频已保存至:{os.path.abspath(output_path)}")return Trueelse:print(f"❌ 下载失败,状态码:{response.status_code}")return Falseexcept Exception as e:print(f"❌ 下载异常:{str(e)}")return Falsedef main():"""主流程:初始化 → 创建任务 → 查询状态 → 下载音频"""# 待转换文本(可自定义修改)text = "大家好,这是使用腾讯云TTS SDK版本生成的语音,适配旧版接口,音色自然流畅。"# 选择音色(从 VOICE_LIST 中选择)selected_voice = "智瑜女声"# 1. 初始化客户端client = init_client()if not client:return# 2. 创建TTS任务task_id = create_tts_task(client, text, selected_voice)if not task_id:return# 3. 查询任务状态audio_url = query_task_status(client, task_id)if not audio_url:returnprint(f"🎵 音频地址:{audio_url}")# 4. 下载音频output_path = os.path.join(OUTPUT_DIR, OUTPUT_FILENAME)success = download_audio(audio_url, output_path)# 5. 自动播放(可选)if success:print("\n✅ 文本转语音全流程完成!")try:import subprocesssubprocess.run(["python", "play_mp3.py", output_path])except Exception:print(f"ℹ️ 自动播放失败,可手动运行:python play_mp3.py {output_path}")if __name__ == "__main__":print("🚀 开始腾讯云TTS SDK版本文本转语音...")main()
tts
# -*- coding: utf-8 -*- import os import requests import time from tencentcloud.common import credential from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.tts.v20190823 import tts_client, modelsclass TencentTTS:def __init__(self, appid, secret_id, secret_key, region):# 初始化认证信息self.cred = credential.Credential(secret_id, secret_key)self.client = tts_client.TtsClient(self.cred, region)self.appid = appiddef text_to_speech(self, text, output_path="output.mp3", voice_type=10510000, speed=1.0, volume=1.0):"""文本转语音核心方法(适配v20190823旧版本SDK):param text: 待转换文本:param output_path: 输出音频文件路径:param voice_type: 音色类型(默认10510000-智逍遥男声):param speed: 语速(0.6-1.4,默认1.0):param volume: 音量(0.0-10.0,默认1.0):return: 成功返回True,失败返回False"""try:# 构建请求参数(使用旧版本SDK支持的参数名)req = models.CreateTtsTaskRequest()# 关键修改:用 Codec 代替 OutputFormat(旧版本参数名)req.Text = textreq.ModelType = 1req.VoiceType = voice_typereq.Speed = speedreq.Volume = volumereq.Codec = "mp3" # 旧版本SDK正确参数名(输出格式)req.SampleRate = 16000# 打印参数确认print("=== 发送的请求参数(适配旧版本SDK)===")print(f"Text: {req.Text}")print(f"ModelType: {req.ModelType}")print(f"VoiceType: {req.VoiceType}")print(f"Speed: {req.Speed}")print(f"Volume: {req.Volume}")print(f"Codec: {req.Codec}") # 确认使用Codec参数print(f"SampleRate: {req.SampleRate}")print("================================")# 发送请求获取任务IDprint("\n正在调用腾讯云TTS API...")resp = self.client.CreateTtsTask(req)task_id = resp.Data.TaskIdprint(f"任务创建成功,TaskId:{task_id}")# 查询任务状态while True:query_req = models.DescribeTtsTaskStatusRequest()query_req.TaskId = task_idquery_resp = self.client.DescribeTtsTaskStatus(query_req)task_data = query_resp.Dataif task_data.Status == 2: # 任务成功audio_url = task_data.ResultUrlprint(f"语音生成成功,音频地址:{audio_url}")# 下载音频文件(添加超时处理)try:audio_data = requests.get(audio_url, timeout=30).contentwith open(output_path, "wb") as f:f.write(audio_data)print(f"音频已保存至:{os.path.abspath(output_path)}")except Exception as download_err:print(f"音频下载失败:{str(download_err)}")return Falsereturn Trueelif task_data.Status == 3: # 任务失败print(f"任务失败:{task_data.ErrorMsg}")return Falseelse: # 任务等待/执行中print(f"任务处理中,当前状态:{task_data.StatusStr}")time.sleep(1)except TencentCloudSDKException as err:print(f"\n【API调用失败详情】")print(f"错误代码:{err.code}")print(f"错误信息:{err.message}")print(f"RequestId:{err.requestId}")return Falseexcept Exception as e:print(f"\n【其他错误】:{str(e)}")import tracebacktraceback.print_exc()return False# 加载配置并使用 if __name__ == "__main__":class Config:APPID = "1317808177"SECRET_ID = "AKIDHQgomY6ScdZIo9HQZYLvIRM7g2EC1d2E"SECRET_KEY = "1zjGZgbJn493jKjvufCWeYEh070gAapt"TTS_REGION = "ap-beijing"TEMP_DIR = "temp"# 创建临时目录if not os.path.exists(Config.TEMP_DIR):os.makedirs(Config.TEMP_DIR)# 初始化并执行tts = TencentTTS(appid=Config.APPID,secret_id=Config.SECRET_ID,secret_key=Config.SECRET_KEY,region=Config.TTS_REGION)test_text = "大家好,这是使用腾讯云TTS API实现的文本转语音功能,支持自定义音色、语速和音量。"output_file = os.path.join(Config.TEMP_DIR, "tts_output.mp3")# 备份音色参数:10510000print(f"开始文本转语音,输出文件:{output_file}")success = tts.text_to_speech(text=test_text,output_path=output_file,voice_type=10510000,speed=1.0,volume=1.0)if success:print("\n✅ 文本转语音完成!")else:print("\n❌ 文本转语音失败!")