package com.jiuqi.njt.navicontroller;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.NaviInfo;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.SynthesizerListener;
import com.jiuqi.njt.R;
import com.jiuqi.njt.data.MyApp;
import com.jiuqi.util.UIUtil;
/**
* 语音播报组件
*
*/
public class TTSController implements SynthesizerListener, AMapNaviListener {
public static TTSController ttsManager;
private Context mContext;
// 合成对象.
private SpeechSynthesizer mSpeechSynthesizer;
TTSController(Context context) {
mContext = context;
}
public static TTSController getInstance(Context context) {
if (ttsManager == null) {
ttsManager = new TTSController(context);
}
return ttsManager;
}
public void init() {
SpeechUtility.createUtility(mContext, "appid="+"54586c01");
// SpeechUser.getUser().login(mContext, null, null,
// "appid=" + mContext.getString(R.string.app_id), listener);
// 初始化合成对象.
mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext, mTtsInitListener);
initSpeechSynthesizer();
}
/**
* 初期化监听。
*/
private InitListener mTtsInitListener = new InitListener() {
@Override
public void onInit(int code) {
// Log.d(TAG, "InitListener init() code = " + code);
if (code != ErrorCode.SUCCESS) {
UIUtil.showMsg(mContext, "初始化失败,错误码:" + code);
}
}
};
/**
* 使用SpeechSynthesizer合成语音,不弹出合成Dialog.
*
* @param
*/
public void playText(String playText) {
if (!isfinish) {
return;
}
if (null == mSpeechSynthesizer) {
// 创建合成对象.
mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext, mTtsInitListener);
initSpeechSynthesizer();
}
// 进行语音合成.
mSpeechSynthesizer.startSpeaking(playText, this);
}
public void stopSpeaking() {
if (mSpeechSynthesizer != null)
mSpeechSynthesizer.stopSpeaking();
}
public void startSpeaking() {
isfinish=true;
}
private void initSpeechSynthesizer() {
// 设置发音人
mSpeechSynthesizer.setParameter(SpeechConstant.VOICE_NAME,
mContext.getString(R.string.preference_default_tts_role));
// 设置语速
mSpeechSynthesizer.setParameter(SpeechConstant.SPEED,
"" + mContext.getString(R.string.preference_key_tts_speed));
// 设置音量
mSpeechSynthesizer.setParameter(SpeechConstant.VOLUME,
"" + mContext.getString(R.string.preference_key_tts_volume));
// 设置语调
mSpeechSynthesizer.setParameter(SpeechConstant.PITCH,
"" + mContext.getString(R.string.preference_key_tts_pitch));
}
// /**
// * 用户登录回调监听器.
// */
// private SpeechListener listener = new SpeechListener() {
//
// @Override
// public void onData(byte[] arg0) {
// }
//
// @Override
// public void onCompleted(SpeechError error) {
// if (error != null) {
//
// }
// }
//
// @Override
// public void onEvent(int arg0, Bundle arg1) {
// }
// };
@Override
public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {
// TODO Auto-generated method stub
}
boolean isfinish = true;
@Override
public void onCompleted(SpeechError arg0) {
// TODO Auto-generated method stub
isfinish = true;
}
@Override
public void onSpeakBegin() {
// TODO Auto-generated method stub
isfinish = false;
}
@Override
public void onSpeakPaused() {
// TODO Auto-generated method stub
}
@Override
public void onSpeakProgress(int arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onSpeakResumed() {
// TODO Auto-generated method stub
}
public void destroy() {
if (mSpeechSynthesizer != null) {
mSpeechSynthesizer.stopSpeaking();
}
}
@Override
public void onArriveDestination() {
// TODO Auto-generated method stub
this.playText("到达目的地");
}
@Override
public void onArrivedWayPoint(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onCalculateRouteFailure(int arg0) {
this.playText("路径计算失败,请检查网络或输入参数");
}
@Override
public void onCalculateRouteSuccess() {
String calculateResult = "路径计算就绪";
this.playText(calculateResult);
}
@Override
public void onEndEmulatorNavi() {
this.playText("导航结束");
}
@Override
public void onGetNavigationText(int arg0, String arg1) {
// TODO Auto-generated method stub
this.playText(arg1);
}
@Override
public void onInitNaviFailure() {
// TODO Auto-generated method stub
}
@Override
public void onInitNaviSuccess() {
// TODO Auto-generated method stub
}
@Override
public void onLocationChange(AMapNaviLocation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onReCalculateRouteForTrafficJam() {
// TODO Auto-generated method stub
this.playText("前方路线拥堵,路线重新规划");
}
@Override
public void onReCalculateRouteForYaw() {
this.playText("您已偏航");
}
@Override
public void onStartNavi(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onTrafficStatusUpdate() {
// TODO Auto-generated method stub
}
@Override
public void onGpsOpenStatus(boolean arg0) {
// TODO Auto-generated method stub
}
@Override
public void onNaviInfoUpdated(AMapNaviInfo arg0) {
// TODO Auto-generated method stub
}
@Override
public void onNaviInfoUpdate(NaviInfo arg0) {
// TODO Auto-generated method stub
}
@Override
public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
// TODO Auto-generated method stub
}
}