最近研究TTS,找了好多个,最后还是觉得腾讯云这个,从音质到人声素材数量,到价位,综合考虑是最优的,所以就尝试写了个接入。下面为测试代码,用python写的,把接口返回的数据,直接存成MP3文件了。
参照了两个比较重要的API文档:
语音合成API:
语音合成 基础语音合成 - API 文档 - 文档中心 - 腾讯云
签名方法:
语音合成 签名方法 - 调用方式 - API 中心 - 腾讯云
直接上代码:
# ################################# # Copyright(C) 2012-2017 # Environment: python 3.9.7 # Package: - # D&P Author By: 常成功 # Create Date: 2021-12-09 # Modify Date: 2021-12-09 # ################################# # 描述: # 测试腾讯云的语音合成技术(TTS), 把返回的音频存储成MP3文件 import base64 import hashlib import hmac import requests import time import random secret_id = "xxxxxx" # 您腾讯云账号的id, 请自行输入 secret_key = "xxxxx" # 您腾讯云账号的key,请自行输入 def get_string_to_sign(method, endpoint, params): s = method + endpoint + "/?" query_str = "&".join("%s=%s" % (k, params[k]) for k in sorted(params)) return s + query_str def sign_str(key, s, method): hmac_str = hmac.new(key.encode("utf8"), s.encode("utf8"), method).digest() return base64.b64encode(hmac_str) # 保存成文件 def save_audio_file(rsp_dic): # 传回的音频, 是base64, 也就是一种用64个字符来表示任意二进制数据的方法(8bit) audio_txt = rsp_dic["Response"]["Audio"] file_path = "d:/test_tts.mp3" base64_to_file(audio_txt, file_path) def base64_to_file(base64_txt, file_path): audio_b_data = base64.b64decode(base64_txt) audio_file = open(file_path, 'wb') audio_file.write(audio_b_data) audio_file.close() print("saved:"+file_path) # 官方的权限验证、以及调用接口的参数 def test_2_offical(): endpoint = "tts.tencentcloudapi.com" data = { 'Action': 'TextToVoice', 'Text': '这是试音文本哦', 'SessionId': 'session_chang', # 'session'+str(random.randint(1,10000)), # 随机 'ModelType': '1', 'Volume': '1', 'Speed': '0', 'ProjectId': '0', 'VoiceType': '1002', 'PrimaryLanguage': '1', 'SampleRate': '16000', 'Codec': 'mp3', # 下面是其他必选公共参数 'Region': 'ap-beijing', 'Nonce': random.randint(1, 100000), 'SecretId': secret_id, 'Timestamp': int(time.time()), 'Version': '2019-08-23', } s = get_string_to_sign("GET", endpoint, data) data["Signature"] = sign_str(secret_key, s, hashlib.sha1) print(data["Signature"]) # 此处会实际调用,成功后可能产生计费 resp = requests.get("https://" + endpoint, params=data) # 输出一下拼出来的参数 print(resp.url) # 输出一下返回 print(resp.json()) # 保存返回的音频数据 save_audio_file(resp.json()) if __name__ == "__main__": print("Start TTS ....") test_2_offical()
以上代码测试通过。运行后生成:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)