| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- package com.xunfei;
- import android.content.Context;
- import android.content.pm.ApplicationInfo;
- import android.content.pm.PackageManager;
- import android.media.AudioManager;
- import android.os.Bundle;
- import android.os.Environment;
- import android.widget.Toast;
- import com.facebook.react.bridge.ReactApplicationContext;
- import com.facebook.react.bridge.ReactContext;
- import com.facebook.react.bridge.ReactContextBaseJavaModule;
- import com.facebook.react.bridge.ReactMethod;
- import com.iflytek.cloud.ErrorCode;
- import com.iflytek.cloud.InitListener;
- import com.iflytek.cloud.SpeechConstant;
- import com.iflytek.cloud.SpeechError;
- import com.iflytek.cloud.SpeechRecognizer;
- import com.iflytek.cloud.SpeechSynthesizer;
- import com.iflytek.cloud.SpeechUtility;
- import com.iflytek.cloud.SynthesizerListener;
- import com.iflytek.cloud.util.ResourceUtil;
- /**
- * Created by haoxinlei on 2018/3/20.
- */
- public class XunFeiMoudle extends ReactContextBaseJavaModule {
- private static SpeechSynthesizer mTts;
- private static Context mContext;
- private ReactContext rctContext;
- public XunFeiMoudle(final ReactApplicationContext reactContext) {
- super(reactContext);
- rctContext = reactContext;
- }
- @Override
- public String getName() {
- return "XunFeiAndroid";
- }
- public static void init(final Context context) {
- mContext = context;
- SpeechUtility.createUtility(context, SpeechConstant.APPID + "=" + getMetaData("XUNFEI_ID"));
- mTts = getSpeechSynthesizer(context);
- }
- public static SpeechSynthesizer getSpeechSynthesizer(final Context context){
- return SpeechSynthesizer.createSynthesizer(context, new InitListener() {
- @Override
- public void onInit(int i) {
- if (i != ErrorCode.SUCCESS) {
- Toast.makeText(context, "语音播报初始化失败", Toast.LENGTH_SHORT).show();
- } else {
- setParam();
- }
- }
- });
- }
- 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
- mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");
- // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
- // 注:AUDIO_FORMAT参数语记需要更新版本才能生效
- mTts.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
- 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(";");
- //发音人资源
- 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);
- return applicationInfo.metaData.getString(key);
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- }
- return "";
- }
- @ReactMethod
- public void textToSpeech(final String text) {
- if (mTts!=null){
- mTts.startSpeaking(text, null);
- }else {
- mTts = getSpeechSynthesizer(mContext);
- mTts.startSpeaking(text,null);
- }
- }
- }
|