公司最近有个排队等位系统会用到语音播报叫号,去研究百度语音合成之后导致项目本身很大,需要离线语音,最近发现个很好的方式android原生的TTS
如今在Android中开发中文语音播报有各式各样的云服务、SDK、API等云云,但是大部分服务是需要联网支持来进行语音合成的,在中文语音合成方面,科大讯飞无疑是佼佼者,而且它也提供了离线语音合成包(需要按分发数量和使用时间付费)的下载。
Android原生API本身也就提供了TTS功能,我们可以使用TextToSpeech类通过简单几行代码就能把想发音的文字播报出来,方法如下:
1、首先需要实例化TextToSpeech类,在TextToSpeech的构造函数中,需要提供一个OnInitListener对象用于完成对TextToSpeech对象的初始化设置,在OnInitListener对象中需要实现onInit方法,我们可以在该方法内来调用setLanguage方法
来设置语言类型,Local.CHINA为中文,设置完后判断当前系统是否支持要发音的语言,代码如下:
@Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { int result = textToSpeech.setLanguage(Locale.CHINA); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Toast.makeText(this, "LANG_MISSING_DATA or LANG_NOT_SUPPORTED !", Toast.LENGTH_SHORT).show(); } } }
2、然后需要发音的地方调用TextToSpeech实例对象的speak方法即可完成语音播报,在播报前可以通过调用setPitch方法来设置音调,默认值为1,数值越大音调越高,代码如下:
textToSpeech.setPitch(1.5f); // 在系统设置里也可以修改音调 textToSpeech.speak("你好, 我们来测试一下语音功能!”, TextToSpeech.QUEUE_FLUSH, null);3、使用TextToSpeech进行语音播报使用的语言数据时设备上Android系统设置的TTS语音包,默认是不支持中文的,以我的测试平板为例,默认TTS包是Pico TTS,仅支持英文、法文、德文、意大利文及西班牙文等几种语言:没关系去下载一个讯飞语音即可。
4、Android系统支持自定义第三方TTS语音库,我们可以下载安装一个“讯飞语音+”, 并在系统语音设置中将TTS切换选择成“讯飞语音+”