调用流程示例
1、换取token
首先在您创建的应用中查找Api Key 和 SecretKey。访问https://openapi.baidu.com/oauth/2.0/token 换取 token
访问如下网址, 可用浏览器测试
// appKey = Va5yQRHl********LT0vuXV4
// appSecret = 0rDSjzQ20XUj5i********PQSzr5pVw2
https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHl********LT0vuXV4&client_secret=0rDSjzQ20XUj5i********PQSzr5pVw2
可以获取如下结果
{
"access_token": "1.a6b7dbd428f731035f771b8d********.86400.1292922000-2346678-124328",
"expires_in": 2592000,
"refresh_token": "2.385d55f8615fdfd9edb7c4b********.604800.1293440400-2346678-124328",
"scope": "public audio_tts_post ...",
"session_key": "ANXxSNjwQDugf8615Onqeik********CdlLxn",
"session_secret": "248APxvxjCZ0VEC********aK4oZExMB",
}
scope中含有audio_tts_post 表示有语音合成能力,没有该audio_tts_post 的token调用接口会返回502错误。 在结果中可以看见 token = 1.a6b7dbd428f731035f771b8d****.86400.1292922000-2346678-124328,在2592000秒(30天)后过期。
2、访问合成接口
访问接口,可以下载MP3文件
请按照“请求方式及参数基本说明” 拼接参数
可用浏览器测试, 从上文中我们获取的token是 1.a6b7dbd428f731035f771b8d****.86400.1292922000-2346678-124328
http://tsn.baidu.com/text2audio?lan=zh&ctp=1&cuid=abcdxxx&tok=1.a6b7dbd428f731035f771b8d****.86400.1292922000-2346678-124328&tex=%e7%99%be%e5%ba%a6%e4%bd%a0%e5%a5%bd&vol=9&per=0&spd=5&pit=5&aue=3
// 这是一个正常MP3的下载url
// tex在实际开发过程中请urlencode2次
3、python代码
# -*- coding: utf-8 -*-
from aip import AipSpeech
#接口文档:https://cloud.baidu.com/product/speech/tts_online
""" 你的 APPID AK SK """
APP_ID = '16705990'
API_KEY = '2MZPyoFvd0tK6RGya8IVRTev'
SECRET_KEY = 'WEPZlDgTN462rLe9s1kTpBqsPprhtk1b'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
with open('text.txt', encoding='utf-8') as f1:
list1 = f1.readlines()
index = 1
for i in range(0, len(list1)):
list1[i] = list1[i].rstrip('\n')
if(len(list1[i]) == 0):
continue
#调用API
#度逍遥(精品)=5003,度小鹿=5118,度博文=106,度小童=110,度小萌=111,度米朵=103,度小娇=5
result = client.synthesis(list1[i], 'zh', 1, {
'vol': 5, 'per': 5003
})
voice_name = str(index) + '.mp3'
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
with open(voice_name, 'wb') as f:
f.write(result)
print(voice_name)
index = index + 1
else:
print ("err_no")