一、前言
人工智能播报在目前已经不是什么新奇事了,地图导航、手机语音助手、词典翻译、语音聊天等,都有着人工语音的身影。我在收听广播的时候,也听到了关于使用人工智能语音播报新闻的节目,某日突发奇想,如果把人工智能语音应用到广电电视节目的制作中,应该可以产生不错的效益。
我台目前智能语音播报主要应用在广播节目的播报上,使用的是科大讯飞的离线SDK语音包,个人感觉在收听时还是有很明显的“机器人声”,偶然机会了解到微软也有相关的语音服务,并提供免费试用,于是抱着尝试的心态,自己进行了二次开发,做了个天气自动播报的语音app,借此机会探讨下智能语音播报在广电电视节目的应用方法。
二、微软语音服务
微软语音服务是微软提供的一套在线API服务,主要服务内容包括语音转文本、文本转语音、语音翻译,我们此次探讨的主要是文本转语音服务,详细内容可参考官方的API文档微软文本转语音API文档。
2.1、注册获得语音服务
微软语音服务提供一个月的免费试用期,需要先注册Auzre账号,主要步骤如下:
1、适用Azure账号登陆Azure门户网站。
2、在Azure服务中选择“创建资源”。
图2.1=Azure首页创建资源3、在资源市场中输入中文“语音”,找到第一个“语音”服务,选中后创建。
图2.2-语音服务创建4、,注意选择“位置”,我这边选择的位置是“中国东部2”,"订阅"默认注册完Azure时微软会送你一个月的“1元试用版套餐”,“资源组”还没有的化新建一个。
图2.3-创建资源方法5、创建完成后,打开对应资源,在左侧栏找到“资源管理-密钥和终结点”,获得密钥,每个终结点的密钥有2个,以后代码里会用到,密钥的作用就是在你自己的程序里,调用微软语音API的时候,给你的一把钥匙。
2.2、使用文本转语音服务
2.2.1、安装语音SDK
此次我使用的是C#进行开发,因此在Visual Studio的项目中,需要安装微软语音SDK,之后只要要引用"Microsoft.CognitiveServices.Speech"这个包就行。安装语音SDK的方法为,在Visual Studio项目中,选择“项目-管理NuGet程序包”,搜索“Microsoft.CognitiveServices.Speech”,选中第一个进行安装。
图2.4- 语音SDK安装2.2.2、引用SDK并对语音输出进行配置
在C#中引用语音SDK,“Microsoft.CognitiveServices.Speech”和“Microsoft.CognitiveServices.Speech.Audio”。
图2.5-引用语音SDK语音服务进行配置,匹配密钥以及音频文件输出路径,之后实例化“SpeechSynthesizer”对象,将之前“config”和“audioConfig”两项配置参数传递过去。
图2.6-相关音频设置2.2.3、通过语音合成标记语言 (SSML) 改善合成的语音输出
SSML主要是一个XML文本,它其中定义了很多文本转语音过程中的属性,包括语言支持、语音语调、讲话风格、人声、断点等;使用SSML来合成语音更具灵活性,可对一段文字进行多种播报方式的选择,也可以多人进行文字的播报。
2.2.4、神经网络语音
微软的语音服务中,支持标准语音和神经网络语音的选择,也可以自己创建自定义语音,神经网络语音相比标准语音,更加自然,并且能够提供多种播报风格,适合在SSML文本中配置使用,在配置SSML文本时,只要相应的语音名称,语音服务就能自动转换成对应的语音播报,具体支持语音可参照语音服务的语言和语音支持。
三、天气播报服务
3.1、气象数据API
天气数据的获取,我参考中国气象数据网,该网站数据权威准确,并能够提供各类气象数据的API,注册并通过该网站的验证后,可免费订阅并试用一段时间的气象数据服务,此次测试我使用的是中国地面气象站逐小时观测资料。
图3.1-地面气象数据地面气象数据的API支持定制功能,可选择定制气象站点,也可选择定制气象要素,此次测试我选择了苏州一个站点,气象要素包括温度/气温、最高温度、最低温度、气压、最高气压、最低气压、相对湿度、风力、最大风速、降水量、现在天气。
图3.2-气象要素选择气象数据API通过HTTP GET的方式进行发送,主要GET格式如下图,当API订单下单成功后,在我的API订单中,可以查找到接口信息的账号和密码;dataFormat为返回数格式;interfaceId是调用数据的接口ID;dataCode是返回数据的编码方式,dataCode是时间范围,支持最近7天的数据访问;stalID是气象站点的ID,支持1-30个站点,多个站点之间以“,”分隔,具体站点参照中国地面气象站点清单;elements是返回数据的字段,可参照中国地面气象要素清单。
图3.3-气象数据API调用3.2、将接收到的气象数据转换成SSML文本
接收到的气象数据只是一些空洞的数据,我们最终要考虑的是如何把这些数据通过可与化的方式播报出来。我的思路是建立一个“Weather.xml”的本地文本,文本中输入好固定的播报语句,当接收到天气数据后,将天气数据替换到对应的播报文本中,测试播报文本如下图3.5。
3.2.1、数据替换方式
SSML文本中的天气数据均按照“{a},{b},{c},{d}...”的方式进行标签化并放入对应文本后面,当接收天气数据以后,再按照文本的标签进行相应的替换,最后将整个文本数据流发送给微软语音API,并转换成合成语音,参考代码如下图3.4。
图3.4-替换文本参考代码3.2.2、SSML文本修改方式参考
播报文本采用SSML的格式编写,此次测试段我加入了两种神经语音的播报,具体语音类型设置通过“voide name”标签;播报的方式我选择成了“新闻模式”,具体设置通过“mstts:express-as style”标签;如果需要在播报之间加入断点,可通过设置“break time”标签实现;如果要设置当前播报文字的速度,可通过设置“prosody rate”标签实现。
采用SSML的格式,可以通过设置断点、语速等控制播报时间,例如电视上一段天气语音的播报,需要配合在线包装或者图片的方式显示天气信息,加入断点和语速能够更方便控制天气显示方式之间的衔接,尤其是相对固定的播报,只要设置好一次SSML格式后,基本就不需要做大的改动。
图3.5-播报文本四、 未来扩展设想
4.1、自定义神经语音
微软提供了自定义语音的一组在线工具,能够创建自己独一无二的语音服务,自定义语音训练模型如下图4.1所示,在Azure上订阅了微软语音服务后,只需要准备需要自定义的相关音频文件,通过不断的上传数据、训练,最终生成自定义语音的API,最终将自定义的语音模型部署到Azure,供自己API接口调用。
未来电视节目制作中,可以通过自定义神经语音的方式,将电视台主持人的声音通过不断的训练和仿真,可以大大降低主持人繁杂的配音工作,提高工作效率。
图4.1-自定义语音模型4.2、结合UE4实现虚拟AR/VR播报
UE4支持自定义插件,可以将微软语音服务和虚拟数据相结合,通过自定义插件的方式部署到UE4项目中,这样只要跟UE4场景制定好插件接口调用方式,就能快速实现AR/VR播报的实时渲染输出。
网友评论