上篇文章Android TTS系列一——如何让app具备tts能力分享了如何通过第三方tts sdk和Android speech包下的接口来拥有tts能力,这次分享下如何开发一款系统级tts引擎。代码可参考ttsengine包。
先来看下speech包,有一个TextToSpeechService,是一个Service,很自然就想到开发一款引擎和它有关系。
speech包.JPG
那么就打开TextToSpeechService.java,从它的描述就可以看到,我们的推测是正确的。
/**
* Abstract base class for TTS engine implementations. The following methods
* need to be implemented:
*
*
{@link #onIsLanguageAvailable}*
{@link #onLoadLanguage}*
{@link #onGetLanguage}*
{@link #onSynthesizeText}*
{@link #onStop}*
……
**/
这里的描述还是很详细的,就是从一个tts引擎的Service需要继承TextToSpeechService,并且重写那五个方法。五个方法是干嘛的?这里简单阐述下:
int onIsLanguageAvailable(String lang, String country, String variant)
是否支持该语言。语言通过lang、country、variant这三个Locale的字段来表示,意思分别是语言、国家和地区,比如zh-CN表示大陆汉语。这个方法看着简单,但我在这里栽坑了好久,就是因为对语言编码标准(ISO 639-1、ISO 639-2)不熟悉。
String[] onGetLanguage()
获取当前引擎所设置的语言信息,返回值