package com.ztspeech.simutalk2.data;
import java.io.InputStream;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.widget.Toast;
import com.ztspeech.recognizer.speak.LocaleTTS;
import com.ztspeech.recognizer.speak.OnTTSPlayerListener;
import com.ztspeech.recognizer.speak.TTSDefine;
import com.ztspeech.recognizer.speak.TTSPlayer;
import com.ztspeech.simutalk2.dictionary.util.PopWindowTTs;
import com.ztspeech.simutalk2.dictionary.util.Util;
import com.ztspeech.simutalk2.qa.WaitingActivity.OnWaitingListener;
public class TextPlayer implements OnTTSPlayerListener, OnWaitingListener {
private LocaleTTS mLocaleTts;
private TTSPlayer mPlayer = null;
private UserInfo mUser = UserInfo.getInstanse();
private OnTTSPlayerListener mListener;
@SuppressWarnings("unused")
private Context mActivity;
public String error = "error";
public String cancel = "cancel";
public ProgressDialog loadingDialog;
private static TextPlayer instance;
private Context context;
private PopWindowTTs mPopWindowTTs;
public boolean isLoadingData = false;
public static TextPlayer getInstance() {
if (instance == null) {
instance = new TextPlayer();
}
return instance;
}
public void setPopContext(Context context) {
this.context = context;
mPopWindowTTs = new PopWindowTTs(context);
mPopWindowTTs.setCancel(this);
}
private void setOnTTSPlayerListener(OnTTSPlayerListener listener) {
mListener = listener;
}
/**
* ֹͣ����
*/
public void stop() {
mLocaleTts.stop();
mPlayer.stop();
}
/**
* ȡ����������
*/
public void cancel() {
mLocaleTts.stop();
mPlayer.stop();
onTtsPlayLoadDataEnd();
}
public boolean isPlaying() {
if (mLocaleTts.isPlaying()) {
return true;
}
if (mPlayer.isPlayying()) {
return true;
}
return false;
}
public void init(Context activity) {
mActivity = activity;
mLocaleTts = new LocaleTTS();
mPlayer = new TTSPlayer(activity, this);
mLocaleTts.initData(activity);
}
/**
* ����������
*
* @param stream
*/
public void play(InputStream stream) {
if (isPlaying()) {
stop();
return;
}
mPlayer.play(stream);
}
private void playText(String text) {
if (isPlaying()) {
stop();
return;
}
if (mUser.getTtsGender()) {
mPlayer.setGender(TTSDefine.GENDER_MALE);
} else {
mPlayer.setGender(TTSDefine.GENDER_FEMALE);
}
mPlayer.setTTSVoiceSpeedLevel(mUser.getTtsSpeed());
mPlayer.play(text);
}
public void playChinese(String text) {
playChinese(text, null);
}
public void playEnglish(String text) {
playEnglish(text, null);
}
private void playChinese(String text, OnTTSPlayerListener listener) {
setOnTTSPlayerListener(listener);
boolean playOk = false;
if (mUser.isLocaleTTS()) {
mLocaleTts.setSpeechRate(mUser.getTtsSpeed());
playOk = mLocaleTts.playChinese(text);
}
if (false == playOk) {
mPlayer.setLanguageToChinese();
playText(text);
}
}
private void playEnglish(String text, OnTTSPlayerListener listener) {
setOnTTSPlayerListener(listener);
boolean playOk = false;
if (mUser.isLocaleTTS()) {
mLocaleTts.setSpeechRate(mUser.getTtsSpeed());
playOk = mLocaleTts.playEnglish(text);
}
if (false == playOk) {
mPlayer.setLanguageToEnglish();
playText(text);
}
}
@Override
public void onTtsPlayEnd() {
if (mListener != null)
mListener.onTtsPlayEnd();
}
@Override
public void onTtsPlayError(int arg0) {
// toastMsg("", Toast.LENGTH_SHORT);
if (mListener != null) {
mListener.onTtsPlayError(arg0);
} else {
toastMsg(error, Toast.LENGTH_SHORT);
}
}
@Override
public void onTtsPlayLoadDataEnd() {
if (mListener != null) {
mListener.onTtsPlayLoadDataEnd();
} else {
// WaitingActivity.stop();
if (mPopWindowTTs != null) {
isLoadingData = false;
mPopWindowTTs.stopProgressDialog();
}
}
}
@Override
public void onTtsPlayLoadDataStart() {
if (mListener != null) {
mListener.onTtsPlayLoadDataStart();
} else {
// WaitingActivity.waiting(mActivity, 0, this);
if (mPopWindowTTs != null) {
isLoadingData = true;
mPopWindowTTs.showLoading();
}
}
}
public void toastMsg(String msg, int duration) {
Util.showToast(context, msg);
// Toast.makeText(context, msg, duration).show();
}
@Override
public void onTtsPlayStart() {
if (mListener != null)
mListener.onTtsPlayStart();
}
@Override
public void onCancel() {
cancel();
toastMsg(cancel, Toast.LENGTH_SHORT);
}
}