手把手Python调用websocket接口实现实时语音合成,文字转语音
0. 太长不看系列,直接使用
在1.2官网注册后拿到APISecret和APIKey,直接复制文章2.5demo代码,保存为online_tts.py,在命令行执行
python online_tts.py -client_secret=您的client_secret -client_id=您的client_id -file_save_path=test.wav --text=欢迎使用标贝开放平台
使用中有任何问题,欢迎留言提问。
1. Python调用标贝科技语音合成接口,实现文字转语音
1.1 环境准备:
Python 3
1.2 获取权限
标贝科技 https://ai.data-baker.com/#/?source=qwer12
填写邀请码fwwqgs,每日免费调用量还可以翻倍
1.2.1 登录
1.2.2 创建新应用
登录后进入【首页概览】,各位开发者可以进行创建多个应用。包括一句话识别、长语音识别、录音文件识别;在线合成、离线合成、长文本合成。
1.2.3 选择服务
进入【已创建的应用】,左侧选择您需调用的AI技术服务,右侧展示对应服务页面概览(您可查询用量、管理套餐、购买服务量、自主获取授权、预警管理)。
1.2.4 获取Key&Secret
通过服务 / 授权管理,获取对应参数,进行开发配置(获取访问令牌token)
拿到Key和Secret就可以正式使用啦!
2. 代码实现
2.1 获取access_token
在拿到Key和Secret后,我们还需要调用授权接口获取access_token,这个access_token有效时长是24小时。
# 获取access_token用于鉴权
def get_access_token(client_secret, client_id):
grant_type = "client_credentials"
url = "https://openapi.data-baker.com/oauth/2.0/token?grant_type={}&client_secret={}&client_id={}" \
.format(grant_type, client_secret, client_id)
try:
response = requests.post(url)
response.raise_for_status()
except Exception as e:
print(response.text)
raise Exception
else:
access_token = json.loads(response.text).get('access_token')
return access_token
2.2 准备数据
需要根据接口要求设置参数,并且对音频数据进行分割
# 准备数据
def prepare_data(args, access_token):
# 填写Header信息
audiotype= args.audiotype
voice_name = args.voice_name
text = args.text
splited_text = [str(base64.b64encode(bytes(text[i:i + 1024], encoding='utf-8')), encoding='utf-8')
for i in range(0, len(text), 1024)]
tts_params = {"language": "ZH", "voice_name": voice_name, "audiotype": audiotype, "domain": "1"}
json_list = []
for i in range(len(splited_text)):
tts_params["text"] = splited_text[i]
data = {"access_token": access_token, "version": "1.0", "tts_params": tts_params}
json_list.append(json.dumps(data))
return json_list
2.3 配置接口参数
client_secret和client_id:在文章1.2的官网获取,必填
file_save_path:文件保存路径,必填
text:需要转换的文本内容
audiotype:音频类型,默认16K采样率wav格式
voice_name:发音人选择,默认“Lingling",其他发音人详见https://www.data-baker.com/#/specs/file/tts_voice_list
# 获取命令行输入参数
def get_args():
text = "今天天气不错哦!"
parser = argparse.ArgumentParser(description='