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

该博客展示了如何利用Python实现对接腾讯云的语音合成功能,将返回的音频数据保存为MP3文件。代码中详细解释了请求签名的生成过程,并提供了完整的测试用例,包括必要的API参数设置和响应处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 

好的,您可以使用腾讯云语音合成 API 和 Node.js 的 `request` 模块来实现。以下是一个示例代码: ```javascript const fs = require('fs'); const request = require('request'); // 调用腾讯云语音合成 API function callTTSAPI(text, callback) { // 以下参数需要替换为您自己的腾讯云 API 密钥和相关参数 const appId = 'your_app_id'; const secretId = 'your_secret_id'; const secretKey = 'your_secret_key'; const engineType = 'intp65'; const textType = 0; const voiceType = 101017; const url = 'https://tts.api.qcloud.com/v2/index.php'; const params = { Action: 'TextToVoice', Text: text, SessionId: 'your_session_id', ModelType: 1, Volume: 0, Speed: 0, VoiceType: voiceType, TextType: textType, PrimaryLanguage: 1, SampleRate: 16000, Codec: 'mp3', AppId: appId, EngineModelType: engineType, RequestTime: parseInt(Date.now() / 1000), ExpireTime: parseInt(Date.now() / 1000) + 300, Nonce: Math.round(Math.random() * 65535) }; // 生签名 const sortedParams = Object.keys(params).sort().map(key => `${key}=${encodeURIComponent(params[key])}`).join('&'); const original = `POST${url}?${sortedParams}`; const hmac = require('crypto').createHmac('sha1', secretKey); hmac.update(original); const signature = hmac.digest('base64'); params.Signature = signature; // 发送 HTTP 请求 request.post({ url: url, form: params, encoding: null }, (err, res, body) => { if (err) { callback(err); } else if (res.statusCode !== 200) { callback(new Error('HTTP status code: ' + res.statusCode)); } else { callback(null, body); } }); } // 将语音合成结果保存为 MP3 文件 function saveTTSResultToMP3(result, fileName) { return new Promise((resolve, reject) => { fs.writeFile(fileName, result, 'binary', (err) => { if (err) { reject(err); } else { resolve(); } }); }); } // 示例:将一段文字转换为 MP3 文件 const text = '您好,我是腾讯云语音合成 API。'; const fileName = 'tts_result.mp3'; callTTSAPI(text, (err, result) => { if (err) { console.error('语音合成失败:', err); } else { saveTTSResultToMP3(result, fileName) .then(() => { console.log(`语音合成结果已保存为 MP3 文件:${fileName}`); }) .catch((err) => { console.error('保存语音合成结果为 MP3 文件时出错:', err); }); } }); ``` 在上面的代码中,我们定义了一个 `callTTSAPI()` 函数,该函数接受一段文字和回调函数作为参数。函数使用腾讯云语音合成 API 将文字转换为语音,并将语音合成结果通过回调函数返回。在 `saveTTSResultToMP3()` 函数中,我们将语音合成结果保存为 MP3 文件。 请注意,您需要将代码中 `appId`、`secretId`、`secretKey` 等参数替换为您自己的腾讯云 API 密钥和相关参数。另外,需要安装 `request` 和 `crypto` 模块,可以使用 `npm install request crypto` 命令进行安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值