|
|
@@ -44,11 +44,15 @@ public class XunFeiMoudle extends ReactContextBaseJavaModule {
|
|
|
|
|
|
public static void init(final Context context) {
|
|
|
mContext = context;
|
|
|
- SpeechUtility.createUtility(context, SpeechConstant.APPID + "=" + getMetaData("XUNFEI_ID"));
|
|
|
+ createUtility(context);
|
|
|
mTts = getSpeechSynthesizer(context);
|
|
|
}
|
|
|
|
|
|
- public static SpeechSynthesizer getSpeechSynthesizer(final Context context){
|
|
|
+ private static SpeechUtility createUtility(Context context) {
|
|
|
+ return SpeechUtility.createUtility(context, SpeechConstant.APPID + "=" + getMetaData("XUNFEI_ID"));
|
|
|
+ }
|
|
|
+
|
|
|
+ public static SpeechSynthesizer getSpeechSynthesizer(final Context context) {
|
|
|
return SpeechSynthesizer.createSynthesizer(context, new InitListener() {
|
|
|
@Override
|
|
|
public void onInit(int i) {
|
|
|
@@ -64,19 +68,19 @@ public class XunFeiMoudle extends ReactContextBaseJavaModule {
|
|
|
private static void setParam() {
|
|
|
// 清空参数
|
|
|
mTts.setParameter(SpeechConstant.PARAMS, null);
|
|
|
- //设置合成
|
|
|
+ // 设置合成
|
|
|
|
|
|
- //设置使用本地引擎
|
|
|
+ // 设置使用本地引擎
|
|
|
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
|
|
|
- //设置发音人资源路径
|
|
|
+ // 设置发音人资源路径
|
|
|
mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath());
|
|
|
- //设置合成语速
|
|
|
+ // 设置合成语速
|
|
|
mTts.setParameter(SpeechConstant.SPEED, "50");
|
|
|
- //设置合成音调
|
|
|
+ // 设置合成音调
|
|
|
mTts.setParameter(SpeechConstant.PITCH, "50");
|
|
|
- //设置合成音量
|
|
|
+ // 设置合成音量
|
|
|
mTts.setParameter(SpeechConstant.VOLUME, "50");
|
|
|
- //设置播放器音频流类型
|
|
|
+ // 设置播放器音频流类型
|
|
|
mTts.setParameter(SpeechConstant.STREAM_TYPE, String.valueOf(AudioManager.STREAM_MUSIC));
|
|
|
|
|
|
// 设置播放合成音频打断音乐播放,默认为true
|
|
|
@@ -88,20 +92,23 @@ public class XunFeiMoudle extends ReactContextBaseJavaModule {
|
|
|
mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/tts.wav");
|
|
|
}
|
|
|
|
|
|
- //获取发音人资源路径
|
|
|
+ // 获取发音人资源路径
|
|
|
private static String getResourcePath() {
|
|
|
StringBuffer tempBuffer = new StringBuffer();
|
|
|
- //合成通用资源
|
|
|
- tempBuffer.append(ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/common.jet"));
|
|
|
+ // 合成通用资源
|
|
|
+ tempBuffer.append(
|
|
|
+ ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/common.jet"));
|
|
|
tempBuffer.append(";");
|
|
|
- //发音人资源
|
|
|
- tempBuffer.append(ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/" + "xiaoyan.jet"));
|
|
|
+ // 发音人资源
|
|
|
+ tempBuffer.append(
|
|
|
+ ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "tts/" + "xiaoyan.jet"));
|
|
|
return tempBuffer.toString();
|
|
|
}
|
|
|
|
|
|
public static String getMetaData(String key) {
|
|
|
try {
|
|
|
- ApplicationInfo applicationInfo = mContext.getPackageManager().getApplicationInfo(mContext.getPackageName(), PackageManager.GET_META_DATA);
|
|
|
+ ApplicationInfo applicationInfo = mContext.getPackageManager().getApplicationInfo(mContext.getPackageName(),
|
|
|
+ PackageManager.GET_META_DATA);
|
|
|
return applicationInfo.metaData.getString(key);
|
|
|
} catch (PackageManager.NameNotFoundException e) {
|
|
|
e.printStackTrace();
|
|
|
@@ -111,11 +118,19 @@ public class XunFeiMoudle extends ReactContextBaseJavaModule {
|
|
|
|
|
|
@ReactMethod
|
|
|
public void textToSpeech(final String text) {
|
|
|
- if (mTts!=null){
|
|
|
+ if (mTts != null) {
|
|
|
mTts.startSpeaking(text, null);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
+ if (SpeechUtility.getUtility() == null) {
|
|
|
+ createUtility(mContext);
|
|
|
+ }
|
|
|
mTts = getSpeechSynthesizer(mContext);
|
|
|
- mTts.startSpeaking(text,null);
|
|
|
+ if (mTts != null) {
|
|
|
+ mTts.startSpeaking(text, null);
|
|
|
+ } else {
|
|
|
+ Toast.makeText(mContext, "语音播报mTts初始化失败", Toast.LENGTH_SHORT).show();
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|