我用百度语音合成的目的是在项目中起到一个语音提示的作用,原先集成着都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中的封装