什么是SAPI?
软件中的语音技术主要包括两方面的内容,一个是语音识别(speech recognition) ,另外一个是语音合成(speech synthesis),也即是文本语音转换系统(TTS)。TTS系统使用合成语音合成文本字符串和文件到声音音频流。而语音识别系统则是转换人类的声音语音流到可读的文本字符串或者文件。这两个工作,都是通过各种语音引擎来完成的。微软所提供的SAPI (全称The Microsoft Speech API),正是在应用程序和语音引擎之间提供一个高级别的接口,它实现了所有必需的对各种语音引擎的实时的控制和管理等低级别的细节。语音引擎通过DDI层(设备驱动接口)和SAPI进行交互,应用程序通过API层和SAPI通信。通过使用这些API,我们可以快速开发在语音识别或语音合成方面应用程序。SAPI 应用程序编程接口(API)明显的减少了构建一个使用语音识别和文本语音转换的应用程序所需要的高层代码,使语音技术更加容易使用并且更加扩大了应用的范围。虽然现在SAPI不是业界标准,但he是应用非常广泛。
SAPI包括以下组件对象(接口):
Voice Commands API
对应用程序进行控制,一般用于语音识别系统中。识别某个命令后,会调用相关接口是应用程序完成对应的功能。如果程序想实现语音控制,必须使用此组对象。Voice Dictation API
听写输入,即语音识别接口。Voice Text API
完成从文字到语音的转换,即语音合成。Voice Telephone API
语音识别和语音合成综合运用到电话系统之上,利用此接口可以建立一个电话应答系统,甚至可以通过电话控制计算机。Audio Objects API
封装了计算机发音系统。
其中Voice Text API
,就是微软TTS引擎的接口,通过它我们可以很容易地建立功能强大的文本语音程序,金山词霸的单词朗读功能就用到了这些API,而目前几乎所有的文本朗读工具都是用SAPI开发的。在这里,我们使用的主要就是Voice Text API
。
SAPI SDK 下载 目前已经无法访问
unity 使用代码
- 需要引用库 Interop.SpeechLib
- unity代码
1 | using SpeechLib; |
Unity打包后程序崩溃问题
- unity打包后运行到需要播报语音的代码时会发生崩溃,并且没有崩溃提示
解决办法
- 测试环境 win10 unity 2020.3.34f1c2
- 发布程序为 .Net 4.X
打包后需要把对应unity安装路径下的2020.3.34f1c2\Editor\Data\MonoBleedingEdge\lib\mono\4.5\CustomMarshalers.dll
CustomMarshalers.dll
拷贝到打包程序的根目录下 注意:必须是根目录下
经测试只能使用版本号后边不带API的 CustomMarshalers.dll
库(未完全测试)
例如 4.5.1-api
下的CustomMarshalers.dll
就会发生崩溃