记一次讲故事机器人的开发-我有故事,让机器人来读

记一次讲故事机器人的开发-我有故事,让机器人来读

最近工作较忙,回家闲下来只想闭目休息,一分钟屏幕都不想再看,然而我又想追更之前看的小说,于是,需求来了——我需要一个给我讲故事的机器人!

浏览器或者阅读器App里其实也有朗读功能,但是比较僵硬,总是将引人入胜的情节念成流水账,分分钟让人弃坑,所以我考虑自己使用爬虫定时下载更新的章节,而后将文字合成存储到音频文件,这样不仅可以选择一个靠谱的语音合成工具来处理文字,而且保存下来的音频还能反复收听,一举两得。

文本整合容易,但是如何将其快速转换成音频呢?难道要自己训练模型“炼丹”解决?no no ,费力不讨好,毕竟自己手头这点算法知识非常浅显,而且硬件条件也不允许,本着“能用就行”的原则,我决定先使用市面上开放平台的产品来解决。经过对比,发现有道智云的语音合成还不错(此处可体验),决定使用有道智云的语音合成API进行开发

效果先睹为快:

我拿来朱自清先生的《荷塘月色》的其中两段作为实验素材,开发了简单的demo,走通了从加载文本到生成音频文件的逻辑,下面我来详细介绍开发过程。

记一次讲故事机器人的开发-我有故事,让机器人来读

需要语音合成的文本:

待翻译的文本

合成结果(第一段):


对应音频链接为:

合成结果(第二段):


对应音频链接为:

调用API接口的准备工作

首先,是需要在有道智云的个人页面上创建实例、创建应用、绑定应用和实例,获取到应用的id和密钥。具体个人注册的过程和应用创建过程详见文章分享一次批量文件翻译的开发过程

创建实例

开发过程详细介绍

下面介绍具体的代码开发过程。

首先根据文档分析有道智云的API输入输出规范。语音合成API调用十分简单,该API采用https方式通信,所需参数如下表:

字段名 类型 含义 必填 备注
q   text   待合成音频文件的文本字符串   True   比如:您好  
langType   text   合成文本的语言类型   True    
appKey   text   应用 ID   True   可在 应用管理 查看  
salt   text   UUID   True   UUID  
sign   text     True   MD5(应用ID+q+salt+应用密钥)  
voice   text   翻译结果发音选择,0为女声,1为男声,默认为女声   false   0  
format   text   目标音频格式,支持mp3   false   mp3  
speed   text   合成音频的语速   false   比如:"1"为正常速度  
volume   text   合成音频的音量   false   正常为"1.00",最大为"5.00",最小为"0.50"  

简单概括,组织好自己的语言(utf-8编码文本),辅以签名等必要参数,并告诉API所需要的音频特征,即可得到一份令人满意的合成音频。

接口输出中,如果合成成功,正常返回为二进制语音文件,具体header信息 Content-type: audio/mp3,如果合成出现错误,则会返回json结果,具体header信息为:Content-type: application/json,可据此判断运行情况。

Demo开发:

这个demo使用python3开发,包括maindow.py,synthesis.py,synthesistool.py三个文件,分别为demo的界面、界面逻辑处理和语音合成接口调用工具封装。

界面部分:

界面部分代码如下,比较简单。

root=tk.Tk() root.title("youdao speech synthesis test") frm = tk.Frame(root) frm.grid(padx='50', pady='50') # 文件选取按钮 btn_get_file = tk.Button(frm, text='选择待合成文件', command=get_files) btn_get_file.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20') # 所选文件列表展示框 text1 = tk.Text(frm,,) text1.grid(row=0, column=1) # 启动按钮 btn_sure=tk.Button(frm,text="合成",command=synthesis_files) btn_sure.grid(row=1,column=1)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfyjy.html