我用百度语音合成的目的是在项目中起到一个语音提示的作用,原先集成着都ok的,用着也丝毫没有问题,因为是免费使用而且调用次数是无限,QPS也是100次。经检查,代码无丝毫改动,总体流程还是 1 拿到创建平台应用得到的那些信息 2 初始化 3 参数配置 4 调用合成方法并进行播放 ,前几天ok的,今天播放不出来,经debug断点后得知确确实实有执行到 4。以下我本人自行封装的util工具类,望指点
package com.qkbnx.driver.custombus.common.utils.voice;
import android.content.Context;
import com.baidu.tts.client.SpeechSynthesizer;
import com.baidu.tts.client.SpeechSynthesizerListener;
import com.baidu.tts.client.TtsMode;
import com.qkbnx.driver.custombus.common.utils.OfflineResource;
import com.qkbnx.driver.custombus.common.utils.utils.SDCardUtils;
import java.io.File;
import java.io.IOException;
/**
* 语音合成工具
*/
public class SpeakUtil {
public static final String DEFAULT_SPEED = "6";
private static SpeakUtil speakUtil;
private static SpeechSynthesizer mSpeechSynthesizer;
/**
* 获取单一实例
* @return
*/
public synchronized static SpeakUtil getInstance(){
if(speakUtil == null){
speakUtil = new SpeakUtil();
}
return speakUtil;
}
/**
* 初始化工具
* @param context
* @param appId
* @param appKey
* @param appSecret
*/
public static void initSpeak(Context context , String appId , String appKey , String appSecret){
if(mSpeechSynthesizer == null){
mSpeechSynthesizer = SpeechSynthesizer.getInstance();
}
mSpeechSynthesizer.setContext(context);
mSpeechSynthesizer.setAppId(appId);
mSpeechSynthesizer.setApiKey(appKey , appSecret);
mSpeechSynthesizer.auth(TtsMode.MIX);
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER , "0");
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME , "15");
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED , "6");
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_PITCH , "4");
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE , SpeechSynthesizer.MIX_MODE_HIGH_SPEED_NETWORK);
// OfflineResource offlineResource = createOfflineResource(OfflineResource.VOICE_MALE , context);
// mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE , offlineResource.getTextFilename());
// mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE , offlineResource.getModelFilename());
mSpeechSynthesizer.initTts(TtsMode.MIX);
}
protected static OfflineResource createOfflineResource(String voiceType, Context context) {
OfflineResource offlineResource = null;
try {
offlineResource = new OfflineResource(context, voiceType);
} catch (IOException e) {
// IO 错误自行处理
e.printStackTrace();
// toPrint("【error】:copy files from assets failed." + e.getMessage());
}
return offlineResource;
}
/**
* 设置监听回调
* @param speechSynthesizer
*/
public void setSpeechSynthesizer(SpeechSynthesizerListener speechSynthesizer){
mSpeechSynthesizer.setSpeechSynthesizerListener(speechSynthesizer);
}
// /**
// * 如需改变语速,则先调用此方法再调用speak方法;
// * @param speedValue
// */
// public void setSpeed(String speedValue){
// mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED , speedValue);
// }
/**
* 合成完毕后立即发出语音
* @param content
*/
public void speak(String content){
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED , DEFAULT_SPEED);
mSpeechSynthesizer.speak(content);
}
/**
* 可设置语速的发音
* @param content
* @param speed
*/
public void speak(String content , String speed){
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED , speed);
mSpeechSynthesizer.speak(content);
}
/**
* 页面退出时销毁mSpeechSynthesizer对象
*/
public void releaseSpeak(){
if(mSpeechSynthesizer != null){
mSpeechSynthesizer.release();
mSpeechSynthesizer = null;
}
}
}
请登录后评论
TOP
切换版块
具体报什么错?可以测试官方demo,看下demo中的封装