package com.xw.yunwei.utils;
|
|
import android.content.Context;
|
import android.media.AudioManager;
|
import android.media.AudioManager.OnAudioFocusChangeListener;
|
import android.os.Bundle;
|
|
import androidx.annotation.NonNull;
|
|
import com.iflytek.cloud.ErrorCode;
|
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;
|
|
/**
|
* 创建时间:2017-9-20 下午3:35:23
|
* 项目名称:IndexActivity
|
*
|
* @author liqi
|
* @version 1.0
|
* @since JDK 1.6.0_21
|
* 文件名称:MscTTS.java
|
* 类说明: 科大讯飞播报类
|
*/
|
public class IFlyTTS implements TTS, SynthesizerListener, OnAudioFocusChangeListener {
|
private static IFlyTTS iflyTTS = null;
|
private boolean isPlaying = false;
|
private AudioManager mAm = null;
|
private SpeechSynthesizer mTts;
|
|
/**
|
* todo 请替换您自己申请的ID。
|
*/
|
private final String appId = "5fbf299f";
|
|
public static IFlyTTS getInstance() {
|
if (iflyTTS == null) {
|
iflyTTS = new IFlyTTS();
|
}
|
return iflyTTS;
|
}
|
|
private IFlyTTS() {
|
}
|
|
public void init(@NonNull Context context) {
|
SpeechUtility.createUtility(context, SpeechConstant.APPID + "=" + appId);
|
mAm = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
mTts = SpeechSynthesizer.createSynthesizer(context, errorcode -> {
|
if (ErrorCode.SUCCESS == errorcode) {
|
//初始化成功
|
//Toast.makeText(mContext, "初始化音频成功", Toast.LENGTH_SHORT).show();
|
}
|
});
|
// mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
|
// //设置语速,值范围:[0, 100],默认值:50
|
// mTts.setParameter(SpeechConstant.SPEED, "55");
|
// //设置音量
|
// mTts.setParameter(SpeechConstant.VOLUME, "tts_volume");
|
// //设置语调
|
// mTts.setParameter(SpeechConstant.PITCH, "tts_pitch");
|
// //设置与其他音频软件冲突的时候是否暂停其他音频
|
// mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "false");
|
// //女生仅vixy支持多音字播报
|
// mTts.setParameter(SpeechConstant.VOICE_NAME, "vixy");
|
}
|
|
public void playText(String playText) {
|
//多音字处理举例
|
if (playText != null && playText.contains("京藏")) {
|
playText = playText.replace("京藏", "京藏[=zang4]");
|
}
|
if (playText != null && playText.length() > 0) {
|
int result = mAm.requestAudioFocus(this,
|
AudioManager.STREAM_MUSIC,
|
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
|
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
mTts.startSpeaking(playText, this);
|
isPlaying = true;
|
}
|
}
|
}
|
|
public void stopSpeak() {
|
if (mTts != null) {
|
mTts.stopSpeaking();
|
}
|
isPlaying = false;
|
}
|
|
public void destroy() {
|
stopSpeak();
|
if (mTts != null) {
|
mTts.destroy();
|
}
|
iflyTTS = null;
|
}
|
|
@Override
|
public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {
|
}
|
|
//播报是否成功以及错误码
|
//在音频播放完成,或会话出现错误时,将回调此函数。若为null,则没有出现错误。
|
@Override
|
public void onCompleted(SpeechError arg0) {
|
isPlaying = false;
|
if (mAm != null) {
|
mAm.abandonAudioFocus(this);
|
}
|
if (callBack != null) {
|
if (arg0 == null) {
|
callBack.onCompleted(0);
|
}
|
}
|
}
|
|
@Override
|
public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
|
}
|
|
@Override
|
public void onSpeakBegin() {
|
isPlaying = true;
|
}
|
|
@Override
|
public void onSpeakPaused() {
|
isPlaying = false;
|
}
|
|
@Override
|
public void onSpeakProgress(int arg0, int arg1, int arg2) {
|
}
|
|
@Override
|
public void onSpeakResumed() {
|
}
|
|
|
@Override
|
public boolean isPlaying() {
|
return isPlaying;
|
}
|
|
|
ICallBack callBack = null;
|
|
@Override
|
public void setCallback(ICallBack callback) {
|
callBack = callback;
|
}
|
|
@Override
|
public void onAudioFocusChange(int focusChange) {
|
// TODO Auto-generated method stub
|
|
}
|
}
|