在Python中使用科大讯飞WebAPI进行语音合成

在Python中使⽤科⼤讯飞WebAPI进⾏语⾳合成
前⼏⽇讯飞开放平台推出了WebAPI接⼝,恰好最近需要实现⼀个⽂字转语⾳的功能,于是就尝试着⽤了起来。但不知什么原因,官⽅⽂档的⼀直报错,最后⾃⼰照着⽰例的思路⽤python3重写了⼀遍。所以这次总结⼀下在Python中使⽤讯飞Web API进⾏语⾳合成的过程。
注册讯飞开放平台
注册完成后进⼊控制台,在控制台 ,填写⼀些基本信息,注意 应⽤平台 选择 WebAPI 。
创建完成后,记录下 APPID 和 APIKey ,将在程序中⽤到。
在Python3中使⽤讯飞Web API
先上代码,后⾯进⾏必要的说明:
可能提⽰缺库:pip3 install requests
* 使⽤python3执⾏
import base64
import json
import time
import hashlib
import requests
停车场收费管理系统# API请求地址、API KEY、APP ID等参数,提前填好备⽤
api_url = "api.xfyun/v1/service/v1/tts"
API_KEY = "替换成你的APIKEY"
APP_ID = "替换成你的APPID"
OUTPUT_FILE = "C://output.mp3"    # 输出⾳频的保存路径,请根据⾃⼰的情况替换
TEXT = "苟利国家⽣死以,岂因祸福避趋之"
# 构造输出⾳频配置参数
Param = {
"auf": "audio/L16;rate=16000",    #⾳频采样率
"aue": "lame",    #⾳频编码,raw(⽣成wav)或lame(⽣成mp3)
"voice_name": "xiaoyan",
"speed": "50",    #语速[0,100]
"volume": "77",    #⾳量[0,100]
"pitch": "50",    #⾳⾼[0,100]
"engine_type": "aisound"    #引擎类型。aisound(普通效果),intp65(中⽂),intp65_en(英⽂)}
# 配置参数编码为base64字符串,过程:字典→明⽂字符串→utf8编码→base64(bytes)→base64字符串Param_str = json.dumps(Param)    #得到明⽂字符串
Param_utf8 = de('utf8')    #得到utf8编码(bytes类型)
Param_b64 = base64.b64encode(Param_utf8)    #得到base64编码(bytes类型)
Param_b64str = Param_b64.decode('utf8')    #得到base64字符串
# 构造HTTP请求的头部
time_now = str(int(time.time()))
checksum = (API_KEY + time_now + Param_b64str).encode('utf8')制造业采购
checksum_md5 = hashlib.md5(checksum).hexdigest()
header = {
"X-Appid": APP_ID,
"X-CurTime": time_now,
"X-Param": Param_b64str,
"X-CheckSum": checksum_md5
}
# 发送HTTP POST请求
def getBody(text):
data = {'text':text}
return data
response = requests.post(api_url, data=getBody(TEXT), headers=header)
# 读取结果
response_head = response.headers['Content-Type']
if(response_head == "audio/mpeg"):
out_file = open(OUTPUT_FILE, 'wb')
data = t # a 'bytes' object
out_file.write(data)
out_file.close()
print('输出⽂件: ' + OUTPUT_FILE)
else:
ad().decode('utf8'))
下⾯按照代码顺序进⾏各部分的说明。
APIKey等参数
在代码开头填好各项参数,⽅⾯代码中使⽤。
API_KEY和APP_ID请替换为上⼀步创建应⽤后得到的内容。请不要删除双引号。
OUTPUT_FILE是最终输出⾳频的保存路径,根据⾃⼰的情况替换。
TEXT是将要输出为语⾳的⽂本。
⾳频配置参数
墨水生产
Param 是字典格式的⾳频配置参数,其中 "aue" 可选 raw (⽣成wav)或 lame (⽣成mp3),如果修改成raw请记得同时修改输出⽂件的扩展名。
最后需要将配置参数编码为Base64字符串:字典类型→明⽂字符串→utf8编码→Base64(bytes)→Base64字符串,具体实现可以参考代码。
⾳频配置参数的详细说明可以参考 。
HTTP请求头部
根据 ,在调⽤所有业务接⼝时,都需要在HTTP请求头部中配置以下参数⽤于授权认证:
参数格式说明
医用拉链
X-Appid string讯飞开放平台注册申请应⽤的应⽤ID(appid)
X-CurTime string当前UTC时间戳,从1970年1⽉1⽇0点0 分0 秒开始到现在的秒数
X-Param string⾳频配置参数JSON串经Base64编码后的字符串
X-CheckSum string令牌,计算⽅法:MD5(apiKey + curTime + param)。三个值拼接的字符串,进⾏
草甘膦母液
MD5哈希计算(32位⼩写)。
具体实现参考代码中字典 header 。
发送请求&读取结果
最后使⽤requests库发送HTTP POST请求,得到结果。根据响应的 header 可以判断是否合成成功。
若响应头部包含Content-type: audio/mpeg,则响应Body为⾳频数据,可写⼊⽂件保存。
若合成出现错误,响应头部包含Content-type: text/plain,响应Body为记载了错误类型的json字符串。
寻路网返回值的具体说明请参考 。
运⾏结果
使⽤⼏次后,感觉合成语⾳的断句做得不是很优秀,但响应速度很快,还是⽐较满意的。
⼩结
最近使⽤了⼏种Web API,对这类API的使⽤⽅法也算是有些经验了。最后,现在语⾳识别、图灵机器⼈、语⾳合成都试着做了⼀遍,下⼀篇博客将把他们组合起来,实现⼀个简单的语⾳助⼿。
感谢你阅读⽂章!

本文发布于:2024-09-22 13:30:30,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/201548.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:参数   字符串   配置   请求   编码   头部   合成   响应
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议