python之调用科大讯飞的语音合成

没注册的话可以在官网注册一下,新人注册的话语音识别这块有赠送的使用次数

科大讯飞

环境

cffi==1.12.3
gevent==1.4.0
greenlet==0.4.15
pycparser==2.19
six==1.12.0
websocket==0.2.1
websocket-client==0.56.0
wave
pyaudio  //linux 下 播放pcm用的,转格式之类的,
//也有其他的;如果下载MP3格式的不用下载

windows 直接 pip install xxxpip3 isntall xxx

linux 的话 自行下载pip 或 有python 3.6以及之后的配置一下即可.

我的环境

ubuntu linux 21.04
python 3.7

代码(看注解即可)

#!/bin/python3
# 语音合成
import websocket
import datetime
import hashlib
import base64
import hmac
import json
from urllib.parse import urlencode
import ssl
from wsgiref.handlers import format_date_time
from datetime import datetime
from time import mktime
import _thread as thread
import os
from integrationxuF import pcm2wav
import wave
STATUS_FIRST_FRAME = 0  # 第一帧的标识
STATUS_CONTINUE_FRAME = 1  # 中间帧标识
STATUS_LAST_FRAME = 2  # 最后一帧的标识class TTS():"""语音合成 TTS :Text To Speech"""# 初始化def __init__(self, APPID, APIKey, APISecret, Text,OutFile,wavFile=None):self.APPID = APPIDself.APIKey = APIKeyself.APISecret = APISecretself.Text = Text# 公共参数(common)self.CommonArgs = {"app_id": self.APPID}self.OutFile = OutFileself.wavFile = wavFile# 业务参数(business),更多个性化参数可在官网查看"""aue    string => raw:未压缩的pcm    lame:mp3 (当aue=lame时需传参sfl=1)auf string => audio/L16;rate=8000:合成8K 的音频     audio/L16;rate=16000:合成16K 的音频vcn string =>    发音人,可选值:请到控制台添加试用或购买发音人,添加后即显示发音人参数值   "xiaoyan"这里只是部分,详细的可去官网 https://www.xfyun.cn/doc/tts/online_tts/API.html#%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8%E6%B5%81%E7%A8%8B"""self.BusinessArgs = {"aue": "lame", "sfl":1,"auf": "audio/L16;rate=16000", "vcn": "aisxping","tte": "utf8","auf":"audio/L16;rate=16000"}self.Data = {"status": 2, "text": str(base64.b64encode(self.Text.encode('utf-8')), "UTF8")}# 运行def run(self):websocket.enableTrace(False)wsUrl = self.create_url()ws = websocket.WebSocketApp(wsUrl,on_message=self.on_message, on_error=self.on_error, on_close=self.on_close)ws.on_open = self.on_openws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})# self.towav()  # 这个是 请求的文件格式 是 pcm;目的是把pcm转为wav格式的;这里我用的mp3 就没必要使用这个了print("-"*10,"运行结束","-"*10)# pcm2wavdef towav(self):"""这里是分割pcm的路径,把转换为WAV格式的放到同目录下;可自行指定路径"""if self.wavFile is  None:splits = str(self.OutFile).split('/')splits.pop(-1)splits.append("demo.wav")self.wavFile = '/'.join(splits)# print("wavFile:",self.wavFile)self.pcm2wav(self.OutFile,self.wavFile)def pcm2wav(self,pcmfile,wavfile,channels=1,rate=16000):with open(pcmfile,'rb') as fp:pcmdata = fp.read()with wave.open(wavfile, 'wb') as wav:wav.setnchannels(channels)wav.setsampwidth(16 // 8)wav.setframerate(rate)# 写入wav.writeframes(pcmdata)# 生成urldef create_url(self):url = 'wss://tts-api.xfyun.cn/v2/tts'# 生成RFC1123格式的时间戳now = datetime.now()date = format_date_time(mktime(now.timetuple()))# 拼接字符串signature_origin = "host: " + "ws-api.xfyun.cn" + "\n"signature_origin += "date: " + date + "\n"signature_origin += "GET " + "/v2/tts " + "HTTP/1.1"# 进行hmac-sha256进行加密signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),digestmod=hashlib.sha256).digest()signature_sha = base64.b64encode(signature_sha).decode(encoding='utf-8')authorization_origin = "api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"" % (self.APIKey, "hmac-sha256", "host date request-line", signature_sha)authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')# 将请求的鉴权参数组合为字典v = {"authorization": authorization,"date": date,"host": "ws-api.xfyun.cn"}# 拼接鉴权参数,生成urlurl = url + '?' + urlencode(v)# print("date: ",date)# print("v: ",v)# 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致# print('websocket url :', url)return urldef on_message(self,ws, message):try:message =json.loads(message)code = message["code"]sid = message["sid"]audio = message["data"]["audio"]audio = base64.b64decode(audio)status = message["data"]["status"]# print(message)if status == 2:print("ws is closed")ws.close()if code != 0:errMsg = message["message"]print("sid:%s call error:%s code is:%s" % (sid, errMsg, code))else:with open(self.OutFile, 'ab') as f:f.write(audio)except Exception as e:print("receive msg,but parse exception:", e)# 收到websocket错误的处理def on_error(self,ws, error):print("### error:", error)# 收到websocket关闭的处理def on_close(self,ws):print("### closed ###")# 收到websocket连接建立的处理def on_open(self,ws):def run(*args):d = {"common": self.CommonArgs,"business": self.BusinessArgs,"data": self.Data,}d = json.dumps(d)print("------>开始发送文本数据")ws.send(d)if os.path.exists(self.OutFile):os.remove(self.OutFile)thread.start_new_thread(run, ())if __name__ == "__main__":# 测试时候在此处正确填写相关信息即可运行# 那个文本中的两个句号是为了延长一下时间,不加的话最后一个字听不清out =  os.getcwd() + '/python/demo.mp3'# 下面这些参数 自己到官网获取即可tts = TTS(APPID='',APISecret='',APIKey='',Text="下午的一个语音合成示例。。",OutFile=out)tts.run()

python之调用科大讯飞的语音合成相关推荐

  1. 使用python语言调用科大讯飞离线语音合成

    科大讯飞属于第三方服务,但是支持的语言里面没有python,所以我们在这种情况下还想使用它的功能的话,可以通过调用C语言的包,来间接的使用. 代码贴上来: def text_to_voice(text ...

  2. JAVA JNI调用科大讯飞离线语音合成(Linux篇)

    JNI调用科大讯飞离线语音合成(Linux篇) 背景:之前已经介绍过JNI调用科大讯飞离线语音合成(Windows篇),今天我们接着聊一聊在Linux系统中如何使用科大讯飞离线语音合成,我们这里以(u ...

  3. C#调用科大讯飞离线语音合成TTS

    原作者勿怪,未经允许就转载了,感谢万分. http://www.cnblogs.com/xuguanghui/p/4505555.html ------------------------------ ...

  4. php调用科大讯飞离线语音合成linux sdk

    背景 要使用tts功能,文字转语言文件.目前已采用百度在线web api接口实现了联网版,现需要现实离线版.故采用科大讯飞的离线语音合成sdk,但是对于linux的sdk官方只有c语言的api接口,现 ...

  5. python实现调用科大讯飞语音听写(将音频识别成文字输出)

    一.大致流程 1)申请科大讯飞账号(https://passport.xfyun.cn/register) 2)创建应用(应用平台选择WebAPI) 3)查看开发文档 4)根据开发文档和示例代码进行调 ...

  6. C#调用科大讯飞在线语音合成(Windows)

    1.下载在线语音合成SDK,SDK中如下图是官方提供的在线语音合成C语言的例子 (在开始用C#做时,可以先研究下他们的例子) 这是整个工程的流程: 2.创建自己的C#工程,将SDK中msc.dll文件 ...

  7. 调用科大讯飞语音合成离线SDK的基础上调用pyqt5模块编写gui界面

    程序说明 该程序是继我上一次调用科大讯飞语音合成离线SDK,用Python写了一个文本转语音的程序的进一步开发,这次开发是用pyqt5模块和其自带的designer做了一个gui界面. 程序展示 该程 ...

  8. Python人工智能第一篇:语音合成和语音识别

    Python人工智能第一篇:语音合成和语音识别 ​此篇是人工智能应用的重点,只用现成的技术不做底层算法,也是让初级程序员快速进入人工智能行业的捷径.目前市面上主流的AI技术提供公司有很多,比如百度,阿 ...

  9. ROS-语音控制-会说话的机器人(3)-科大讯飞离线语音合成+图灵机器人

    ROS-语音控制-会说话的机器人(3)-科大讯飞离线语音合成+图灵机器人 参考网址: https://blog.csdn.net/CHENKAIFAN__/article/details/806193 ...

  10. 【方法】科大讯飞在线语音合成API使用-文字转语音音频

    文章目录 开始使用服务 下载并修改代码 批量化处理 2020.3.16更新 一年过去,讯飞居然改了python的使用代码,变复杂了一点,而且不能直出wav格式的音频,只有pcm的源文件:另外不需要设置 ...

最新文章

  1. 如何在.NET中创建服务型组件
  2. Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config
  3. 多级反馈队列调度算法原理
  4. android 索引怎么使用情况,android 數據庫查詢中使用索引-大幅提高數據庫操作速度...
  5. 数据结构树二叉树计算节点_查找二叉树中叶节点的数量 数据结构
  6. java多线程nullpointerexception_温故而知新!越是基础越容易被忽略,java最全基础知识,附赠资料...
  7. Visual Paradigm 教程[UML]:如何在UML中绘制活动图?
  8. 解决ionic 2载入速度慢的问题
  9. Ubuntu无法进入操作系统的恢复和备份操作
  10. 07-0.部署 worker 节点
  11. 所有IT人的大恩人永远的离开了
  12. Linux第二章:5.Xshell安装教程、使用Xshell6进行Linux远程登录
  13. Android实战简易教程-第五十六枪(模拟美团客户端进度提示框)
  14. uvaLive 4490 Help Bubu 帮助布布 等价转化+DP
  15. 2020-05-19
  16. java学习笔记 - 集合类综合案例 斗地主
  17. 飞桨框架v2.3 API最新升级 | 对科学计算、概率分布和稀疏Tensor等提供更全面支持
  18. 腾讯云~安装MongoDB
  19. 高亮显示用户键盘输入(kbd)
  20. EOJ Monthly 2019.3 (based on March Selection) -D .宇恒棋

热门文章

  1. 南大计算机系统基础CMU‘s CSAPP——第一章
  2. 公众号网课搜题API系统对接教程
  3. CC2430串口设置问题解决后的感想
  4. Word添加脚注自定义标记
  5. Chrome主页为360首页
  6. 常见的统计图表及其应用
  7. 利用Matlab实现线性动态电路的可视化研究
  8. 基于NLP的中医医案文本快速结构化方法
  9. 面试必杀技:异步FIFO
  10. 做生意的“四大方向”让你看清财富的本质