C#后端实现文字转语音、语音转文字,语音识别技术。
文字转语音意思是前端上传一段文字时,我们可以在后台生成一段wav语音回传给前端,前端可以直接播放出来。
语音转文字是前端录制好一段语音上传上来,我们可以在后台对语音文件进行解析,生成一段文字返回给前端。
1. 文字转语音
使用到的库只有一个,Speech,跟之前一样引用管理里面搜索并安装即可。
代码较为简单,有两种选择,一种是生成文件,一种是生成数据流,两种方法都很好用,我这边使用的是生成数据流,这样不用在服务器上存文件,比较节省存储空间。
如果涉及到html文本转纯文本的,建议使用下面这个正则将字符串处理一下。
Regex.Replace(Regex.Replace(content, "<.*?>", ""), " ", "")
这个文字转语音比较强大,我试过转六千多字的长文本,速度很快只用了几秒,播放器来也没有卡顿,大小也只有几十兆,比较好用。
上线时遇到一个问题,因为我们服务器是部署在windows server上的IIS上的,上线后报了个错。不能设置语音。未安装匹配的语音,或语音被禁用。虽然能用GetInstalledVoices方法获取到已安装的语音信息,但是使用不了。这个错误的原因在于IIS上程序池的权限太低了,不能够访问系统语音所在的文件目录。解决办法为调高IIS程序池的标识,设置程序池标识为LocalSystem即可。
2. 语音转文字(仅支持机器语音或自定义语意识别后转文字,自然语音基本识别不到)
语音转文字与文字转语音用的是同一个库,Speech,不用再下载安装了,直接上代码。
识别前要先定义好语法,接口将会识别第一个匹配到的单词并返回。
语音转文字也有两种模式,Recognize适合短文本,RecognizeAsync适合长文本。使用Recognize可以同步获取到识别结果,但仅限于头一次识别,如果是长文本用这个来做会自动把后面信息忽略掉。