失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于Python完成云知声平台的语音合成接口

基于Python完成云知声平台的语音合成接口

时间:2020-01-24 01:57:37

相关推荐

基于Python完成云知声平台的语音合成接口

最近在调试语音合成的AI功能,寻找平台过程中意外发现云知声AI开放平台,感觉还不错,所以就选择该平台先进行调试。云知声智能科技股份有限公司是专注于语音识别及语言处理技术的移动互联网公司,成立之后异军突起,发展迅猛,目前已成为语音行业内最重量级的技术和产品供应商。

本篇文章是基于Python完成的云知声语音平台接口,具体实现情况如下:

1. 注册登录后,每月免费提供1000次调用,认证后提供5000次免费调用,有效期半年。

2. 控制台中有创建应用,会有AppKey和AppSecret,后期在代码中需要。

3. 控制台中有添加发音人,需自行添加,当调用时,需与代码匹配,否则调用失败。

代码如下:

import websocketimport hashlibimport jsonimport timeimport sslimport base64from functools import partialtry:import threadexcept ImportError:import _thread as threadfrom log_util import log_formatimport loggingimport osimport relogger = logging.getLogger("output")class Ws_parms(object):'''参数类,websocket测试需要的参数相关'''def __init__(self, url, appkey, secret, pid, vcn, text, user_id, tts_format, tts_sample):# 参数可以参考云知声的技术文档self.url = urlself.appkey = appkeyself.secret = secretself.user_id = user_idself.tts_format =tts_format self.tts_sample =tts_sample self.tts_text = textself.tts_vcn = vcnself.tts_speed = 50self.tts_volume = 50self.tts_pitch = 50self.tts_bright = 50self.tts_stream =b''self.punc = ''self.status = Falseself.message = ''self.code = 0self._pid = pidself.logger = logging.getLogger("RunLog")# 指定logger输出格式formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')# 文件日志file_handler = logging.FileHandler("logs/log_%s" % self._pid)file_handler.setFormatter(formatter) # 可以通过setFormatter指定输出格式# 为logger添加的日志处理器self.logger.addHandler(file_handler)#self.logger.addHandler(console_handler)# 指定日志的最低输出级别,默认为WARN级别self.logger.setLevel(logging.INFO)passdef get_sha256(self, timestamp):hs = hashlib.sha256()hs.update((self.appkey + timestamp + self.secret).encode('utf-8'))signature = hs.hexdigest().upper()return signaturedef get_url(self):timestamp = str(int(time.time() * 1000))self.url = self.url+'?' + 'time=' + timestamp + '&appkey=' + \self.appkey + '&sign=' + self.get_sha256(timestamp)return self.urldef on_message(ws, data, wsParms):if type(data) is str:print('rec text msg:',data)if type(data) is bytes:wsParms.tts_stream+=dataprint('rec byte msg:',len(data))def on_error(ws, error):print("error: ", error)def on_close(ws):print("### closed ###")def on_open(ws, wsParms):print('open!')def run(*args):d={"format":wsParms.tts_format,"sample":wsParms.tts_sample,"text":wsParms.tts_text,"vcn":wsParms.tts_vcn,"user_id":wsParms.user_id,"speed":wsParms.tts_speed,"volume":wsParms.tts_volume,"pitch":wsParms.tts_pitch,"bright":wsParms.tts_bright,}print("data:",d)ws.send(json.dumps(d))print("my send:",wsParms.tts_vcn,wsParms.tts_format,wsParms.tts_text)thread.start_new_thread(run, ())def ensure_dir(dir_path):if not os.path.exists(dir_path):os.makedirs(dir_path)def rm_logs(dir_path):log_file = os.listdir(dir_path)for logf in log_file:if os.path.exists(dir_path+logf) and logf != "log.output":os.remove(dir_path+logf)def do_ws(wsP):ws_url = wsP.get_url()websocket.enableTrace(False)print(ws_url)ws = websocket.WebSocketApp(url=ws_url,on_error = on_error,on_close = on_close)ws.on_open = partial(on_open, wsParms=wsP)ws.on_message = partial(on_message, wsParms=wsP)ws.run_forever()if wsP.code == 0:passelse:passreturn wsPdef write_results(wsParms):ensure_dir('results')t1 = str(int(time.time()))tts_stream = os.path.join('results/', t1+'.'+wsParms.tts_format)with open(tts_stream, 'wb') as f:f.write(wsParms.tts_stream)appkey='' # 添加控制台中的AppKeysecret='' # 添加控制台中的AppSecretws_url='wss://ws-/v1/tts'user_id = 'unisound-python-demo'vcn = 'xiaofeng-base' # 添加控制台中的发音人,text = '今天天气怎么样?'tts_format = 'mp3'tts_sample = '16k'if __name__ == "__main__":ensure_dir('logs')rm_logs('logs/')pid=1wsP = Ws_parms(url=ws_url,appkey=appkey,secret=secret,pid=pid,vcn=vcn,text=text,tts_format=tts_format,tts_sample=tts_sample,user_id=user_id,)do_ws(wsP)print('test done')write_results(wsP)

发音人列表:

执行结果如下:

如果觉得《基于Python完成云知声平台的语音合成接口》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。