腾讯云高级工程师
腾讯云游戏多媒体引擎GME系列课程。随着AR技术的不断发展,语音转文字在音频场景的应用不断成熟。本课程将介绍以微信的语音转文字技术为基础的GME语音消息功能,并通过一个demo实践让大家快速了解GME的语音消息的功能。
消费升级的时代,搭配才能创造奇迹。文字是苍白的,语音是生动的,语音转文字是具备科技色彩的。文字一旦有了科技感,生活才能有质感。本课程以GME做“活化酶”,将详细介绍以微信语音转文字技术为基础的GME功能,带你告别文字的苍白,激发AR活性,让你的生活瞬间充满“胶原蛋白”。随着AR技术的不断发展,语音转文字在音频场景的应用不断成熟。
本期腾讯产业互联网学堂大咖分享邀请腾讯云高级工程师程君,将介绍以微信的语音转文字技术为基础的GME语音消息功能,并通过一个demo实践让大家快速了解GME的语音消息的功能。
下图是QQ飞车里的语音消息,录制完语音消息并翻译成文本之后,语音内容和转成文字后的内容发送给好友。
下图是王者荣耀里,一边说话一边转文字,说完了也翻译完了,有点类似于语音输入法。
下图是手机QQ里,语音变声的趣味玩法,将录制的声音以萝莉或大叔的声音播放。
下图是整个GME的语音SDK的使用流程,先是初始化SDK,设置鉴权信息。
对于发送方来说,先是录制,录制完了上传,上传成功会得到服务器返回的一个fileID。如果有语音转文字的需求的话,再调用SpeechtoText接口,把fileID传给服务器,就会得到翻译结果。然后走你们的app 或者游戏内的IM通道,把这个fileID发送给接受方。
对于接受方来说,收到了fileID后,调用我们的download 接口,先把语音文件下载到本地,再播放就可以了。
对于发送方也可以选择我们的流式的录制的接口,该接口会一边录制,一边上传,一边翻译,录制结束之后,录制结果,上传结果和翻译结果会在一个回调函数内返回给你,后面会详细对接口做介绍。下面就是对每个过程做详细的介绍。
关于编码和采集,先用下面两幅频谱图,来展示人声和音乐的不同。左边是正常说话的人声,右边是一首从QQ音乐下载的正常歌曲。可以看到人声的频谱较低,大部分在8k以下,而且信号是离散不连续的;而音乐的频谱覆盖到全频带,信号连续且强度较大,按照奈奎斯特采样定律,需要完整还原信号的话,编码的采样率应该是频谱的两倍。所以,业界称8k频谱对应的16khz采样率为宽带,用于纯人声场景。24k频谱对应的采样率48khz为全频带,用于音乐场景。语音消息主要是针对人声场景,所以编码定的采样率是16K。
SILK编码最早在Skype中使用,它在编码效率和质量之间取得了很好的平衡,因此被广泛应用在互联网的音频相关产品中,目前广泛使用的是SILK V3。微信QQ里的语音消息也都是用silk,silk编码是Opus编码的基础,压缩后2K每秒。
前处理的流程,先是设备采集,其次是降噪,这个降噪是我们自研的,降噪可以帮你去除掉一些环境里的杂音,增益处理就是可以将声音的音量放大,这里没有修改设备的硬件音量,而是代码里做了处理,也就是所谓的软件音量。上采样和下采样的流程不是必须的,因为有些设备不支持我们音频文件的采样率 16K,比如PC的设备只支持48K的数据。所以就要做一次重采样,支持的设备,如IOS 就不用处理
声音是一种波,具有三个要素:幅度,频率,相位。其中幅度决定了声音的大小,刚刚前处理说的增益就是在改变了振幅,频率决定了声音音调的高低,实际的声音往往都不是单一频率的波,而是有各种频率的波叠加而成,从而形成了各具特色的声音,通过分离不同频率的信号,并采取不同程度的放大或缩小,从而改变声音的效果。
变声支持12类型:萝莉,大叔,熊孩子,感冒,困兽,空灵肥仔,重金属,外国人,重机械,强电流,土话。
下图是原声和萝莉的语谱图,横坐标为时间,纵坐标为频率。颜色代表特定时间点下,某频率的声音强度。原声的声音频率较窄,为16000Hz以下,萝莉音频率被拉长,一些低频音被放大为高频,频率为14000Hz左右。可以用QQ语音消息进行体验。
录制完成之后就是上传了。我们在全球部有语音消息的服务器。上传的流程是这样的,上传请求首先会到TGW服务器 TGW全称Tencent Gateway,是一套实现多网统一接入,支持自动负载均衡和就近计入的系统。请求到了TGW之后,就会根据负载均衡和就近接入的原则将请求分配给业务服务器,业务服务器也会根据就近分配的原则返回最近的cos服务器的地址和token。客户端然后再根据这个业务服务器返回的cos地址把语音文件到这个存储服务器上,并把文件的下载地址返回给客户端。
下载的流程和上传的类似。下载的时候也会遵循就近接入的原则,比如上传的时候用户是在德国,那我们就会把语音文件就近存储到德国。而下载的时候,用户是在美国,GME的业务服务器会把下载的内容从德国拷贝到美国去加速下载。
语音转文字主要是用深度学习的技术来实现的。对于采集到的原始音频数据,先要做特征提取,特征提取的方法主要有预加重、分帧加窗、FFT、滤波器等,特征提取的目的就是把乱无章的音频信号的特征变得更加显著,这样有助于后面声学模型训练的收敛。其次就是声学模型的训练,就是将发音映射成汉字。但由于存在多音字这种情况,所以还需要语音模型,利用当前词前面的几个词来计算其概率,是这些词最大概率上可以组合成一句话。
GME的语音转文字支持100多种语音,识别率高达99%,前馈计算的模型是在服务器运行的,不占用客户端资源。语音转文字的速度大概是1秒的语音文件转换成文字需要0.4s, 基本上是呈线性增长的。
之前的语音转文字,需要先录制,在上传,拿到上传之后的文件ID之后,再向服务器请求翻译,这样的体验肯定是不够好的,所以我们推出一个流式的接口。流式的语音转文字,可以边录制,边上传,边转文字,语音转文字的等待时间固定,不会随说话时间增加而增加。由于它同时兼顾上传的功能,所以即使流式的翻译失败了,也可以用拿到的上传的文件地址再走一次普通的翻译。当然流式翻译的成功率还是很高的。
在服务器监控这一块,我们有24小时的监控体系,一旦发生异常会及时报警,并进行处理,保证服务质量。
目标:实现一个简单的本地录制功能
GME SDK 下载:
https://cloud.tencent.com/document/product/607/18521
GME v2.5.1
Demo框架下载:
http://dldir1.qq.com/hudongzhibo/QCloud_TGP/GME/test/test/PTTDemo.zip
GME文档: