粤语语音引擎apk及粤语资源包
android 6.0 平台老人机需求设备默认支持粤语离线播报,在网上找了许多资料都没有价值。
发现讯飞的TTS3.0联网下载粤语包后可以完美支持。然后尝试反编译和预置apk及资源包,最终解决了这个问题。
- 预置apk
首先预置apk。参考:预置apk - 预置粤语资源
资源包预置在 /storage/sdcard0/Speechcloud/ 目录下,注意编译时无法将文件预置进设备 sdcard,需要先将文件预置到如apk预置目录或/system/sdcard/或其他rom中已存在的目录下,然后写Service监听开机广播,判断首次开机时将/system/sdcard/目录下预置的资源文件copy到到/storage/sdcard0/Speechcloud/ 。参考:Android MTK预置音乐/图片/文件
- 编写demo测试
关键方法:
+import android.speech.tts.TextToSpeech;
+import java.util.Locale;
+ private TextToSpeech mTextToSpeech;
+ private void speak(Context mContext, String paramString){
+ if(mTextToSpeech == null) {
+ mTextToSpeech=new TextToSpeech(mContext, new TextToSpeech.OnInitListener() {
+ @Override
+ public void onInit(int status) {
+ if (status==TextToSpeech.SUCCESS) {
+ int supported=mTextToSpeech.setLanguage(Locale.US);
+ if ((supported!=TextToSpeech.LANG_AVAILABLE)&&(supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
+ Log.i("mh","TextToSpeech error");
+ }
+ }
+ }
+ });
+ }
+ mTextToSpeech.speak(paramString, TextToSpeech.QUEUE_FLUSH, null);
+ }
- 将默认语音引擎设置为讯飞
Android 6.0 修改方法:frameworks/base/core/java/android/speech/tts/TtsEngines.java
public String getDefaultEngine() {
String engine = getString(mContext.getContentResolver(),
Settings.Secure.TTS_DEFAULT_SYNTH);
+ if(engine==null) {
+ engine ="com.iflytek.speechcloud";
+ }
return isEngineInstalled(engine) ? engine : getHighestRankedEngineName();
}