接入腾讯云语音合成技术TTS, 把返回的音频数据存储成MP3文件

最近研究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()

以上代码测试通过。运行后生成:

猜你喜欢

转载自blog.csdn.net/chenggong2dm/article/details/121841311