python发音机器人_python qq机器之 使用阿里云语音合成让机器人发送好听到炸裂的语音...

上一篇文章我们写了用python实现qq机器人的基本操作:xiaowei:使用python打造一个自己的QQ机器人 【基础篇】​zhuanlan.zhihu.comv2-487270680944f038f61968d70ab97aca_180x120.jpg

本篇文章,我们来尝试使用语音合成技术,让机器人发送语音消息。博主尝试了市面上大多数知名的语音合成服务商,最后选择了阿里云。先来听一下阿里云语音合成的效果:

【知乎不能插语音 我也不知道怎么操作 这里假装有语音 可以去我博客文章里听】

一 、 开通阿里云语音合成

开通免费版本后,进入控制台,创建一个新的项目:创建项目

然后进入你的项目,切换到“语音合成”,选择一个你喜欢的声音,点“发布上线”(上方有一个appkey,请记下来):合成配置

二、 阿里云接口调用之计算鉴权秘钥阿里云的鉴权秘钥(Access Token)是对所有阿里云服务都适用的一种秘钥,就是说任意项目要请求阿里云的接口,都需要计算这个秘钥(区别于TTS接口鉴权)。我们在适用语音合成接口的时候,需要先用阿里云的开发者id和秘钥计算出鉴权秘钥,然后在通过这个鉴权秘钥组合语音合成(TTS)的appkey,来请求语音合成接口。因为鉴权秘钥存在过期时间,最好的解决方法就是,每次请求语音合成接口,都先计算一遍这个秘钥。

Access Key: 阿里云开发者ID,又称为访问公钥。

Access Secret: 阿里云开发者秘钥,又称访问秘钥。

Access Token:通过Access Key 和 Access Secret 计算出来的鉴权秘钥,有时效性。

app key:项目的公钥,搭配Access Token来请求接口。

首先安装阿里云SDK核心库: 命令行执行 pip install aliyun-python-sdk-core

用python计算鉴权秘钥:

from aliyunsdkcore.client import AcsClient

from aliyunsdkcore.request import CommonRequest

import json

def get_aliyun_secret():

client = AcsClient('你的开发者ID',

'你的开发者秘钥',

'cn-shanghai'

)

request = CommonRequest()

request.set_method('POST')

request.set_domain('nls-meta.cn-shanghai.aliyuncs.com')

request.set_version('2019-02-28')

request.set_action_name('CreateToken')

r = client.do_action_with_exception(request)

r = json.loads(r.decode())

return r['Token'].get('Id')

三、 阿里云接口调用之语音合成

语音合成文档: https://help.aliyun.com/document_detail/94737.html

语音合成带有python的SDK,但是无法pip安装,比较麻烦,所以我们采用Restful API形式(http调用)。

http调用的方式,我们只需要用requests的post即可,将相关参数post到阿里云接口,即可返回音频。

import requests

import base64

def tts(text):

data = {

'appkey':'你的appkey', #语音合成项目里的appkey

"text": text, #要语音合成的文字

'token':get_aliyun_secret(), #上一步的鉴权秘钥

'format':'mp3', #合成语音的格式

"sample_rate": "16000", #比特率

"volume":'90', #音量

"pitch_rate":'0', #语调

"speech_rate":'-250', #语速

"voice":'Siyue' #发音人 参数详见 https://help.aliyun.com/document_detail/84435.html

}

header = {

"Content-Type": "application/json;charset=UTF-8"

}

r = requests.post('https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts',data=json.dumps(data),headers=header)

return base64.b64encode(r.content).decode()

运行后会返回base64编码的语音。

四、使用酷Q pro

免费版的酷Q Air不支持发送语音,我们需要去下载一个酷Q pro,然后开个会员…

下载地址: https://cqp.cc/t/14901

然后按照上一篇文章的方法,配置酷Q http API。

五、发送语音

以发送群聊语音为例:

def send_record(group_id,text):

api_url = 'http://127.0.0.1:5700/send_msg'

data = {

'msg_type': 'group',

'group_id':group_id,

'message':'[CQ:record,file=base64://{}]'.format(tts(text))

}

requests.post(api_url,data=data)

调用这个方法,传入qq群号,和要发送的文本,即可直接把文字转成语音发送到群聊啦。

六、 完整代码

from aliyunsdkcore.client import AcsClient

from aliyunsdkcore.request import CommonRequest

import json

import requests

accessKey = ''

accessSecret = ''

appKey = ''

botServerApi = 'http://127.0.0.1:5700/send_msg'

def get_aliyun_secret():

client = AcsClient(accessKey,accessSecret,'cn-shanghai')

request = CommonRequest()

request.set_method('POST')

request.set_domain('nls-meta.cn-shanghai.aliyuncs.com')

request.set_version('2019-02-28')

request.set_action_name('CreateToken')

r = client.do_action_with_exception(request)

r = json.loads(r.decode())

return r['Token'].get('Id')

def tts(text):

data = {

'appkey':'你的appkey', #语音合成项目里的appkey

"text": text, #要语音合成的文字

'token':get_aliyun_secret(), #上一步的鉴权秘钥

'format':'mp3', #合成语音的格式

"sample_rate": "16000", #比特率

"volume":'90', #音量

"pitch_rate":'0', #语调

"speech_rate":'-250', #语速

"voice":'Siyue' #发音人 参数详见 https://help.aliyun.com/document_detail/84435.html

}

header = {

"Content-Type": "application/json;charset=UTF-8"

}

r = requests.post('https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts',data=json.dumps(data),headers=header)

return base64.b64encode(r.content).decode()

def send_record(group_id,text):

api_url = 'http://127.0.0.1:5700/send_msg'

data = {

'msg_type': 'group',

'group_id':group_id,

'message':'[CQ:record,file=base64://{}]'.format(tts(text))

}

requests.post(api_url,data=data)

if __name__ == '__main__':

send_record(12345678,'今天天气真不错')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值