android 合成按照官网demo,各种成功,就是无法发声
Ta的回复 :小杨服装店: 我使用的服务是:百度语音合成Android版 调用的接口是:语音合成相关的接口 参数设置情况:参数全部设置正常 开发平台和机型:预装Android6.0版本的安装手机及pos机 SDK版本号:最新版本 代码或日志截图(上传截图能帮助您更快解决问题): 代码中的"XXXX"是我的正确参数。 06-23 11:18:34.942 24282-24493/ywh.pos E/art: No implementation found for int com.baidu.tts.jni.EmbeddedSynthesizerEngine.bdTTSGetLicense(android.content.Context, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) (tried Java_com_baidu_tts_jni_EmbeddedSynthesizerEngine_bdTTSGetLicense and Java_com_baidu_tts_jni_EmbeddedSynthesizerEngine_bdTTSGetLicense__Landroid_content_Context_2Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2) private static String TAG = "BaiduVoice"; private String mSampleDirPath; private static final String SAMPLE_DIR_NAME = "baiduTTS"; private static final String SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female.dat"; private static final String SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male.dat"; private static final String TEXT_MODEL_NAME = "bd_etts_text.dat"; private static final String LICENSE_FILE_NAME = "temp_license_2017-06-22"; private static BaiduVoice instance; private static Context context; // 语音合成客户端 private SpeechSynthesizer mSpeechSynthesizer; public void speek(String text, String utteranceId){ mSpeechSynthesizer.speak(getSpeechSynthesizeBag(text,utteranceId)); } private SpeechSynthesizeBag getSpeechSynthesizeBag(String text, String utteranceId) { SpeechSynthesizeBag speechSynthesizeBag = new SpeechSynthesizeBag(); //需要合成的文本text的长度不能超过1024个GBK字节。 speechSynthesizeBag.setText(text); speechSynthesizeBag.setUtteranceId(utteranceId); return speechSynthesizeBag; } // 初始化语音合成客户端并启动 public void startTTS() { initialEnv(); // 获取语音合成对象实例 mSpeechSynthesizer = SpeechSynthesizer.getInstance(); // 设置context mSpeechSynthesizer.setContext(context); // 设置语音合成状态监听器 mSpeechSynthesizer.setSpeechSynthesizerListener(this); // 设置在线语音合成授权,需要填入从百度语音官网申请的api_key和secret_key mSpeechSynthesizer.setApiKey("XXXX", "XXXX"); // 设置离线语音合成授权,需要填入从百度语音官网申请的app_id mSpeechSynthesizer.setAppId("XXXX"); // 设置语音合成文本模型文件 // 文本模型文件路径 (离线引擎使用) this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE, mSampleDirPath + "/" + TEXT_MODEL_NAME); // 声学模型文件路径 (离线引擎使用) this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE, mSampleDirPath + "/" + SPEECH_FEMALE_MODEL_NAME); // 本地授权文件路径,如未设置将使用默认路径.设置临时授权文件路径,LICENCE_FILE_NAME请替换成临时授权文件的实际路径,仅在使用临时license文件时需要进行设置,如果在[应用管理]中开通了正式离线授权,不需要设置该参数,建议将该行代码删除(离线引擎) // 如果合成结果出现临时授权文件将要到期的提示,说明使用了临时授权文件,请删除临时授权即可。 // this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_LICENCE_FILE, mSampleDirPath + "/" // + LICENSE_FILE_NAME); // 设置语音合成声音授权文件 // mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_LICENCE_FILE, path + "temp_license_2017-06-22"); // 获取语音合成授权信息 AuthInfo authInfo = mSpeechSynthesizer.auth(TtsMode.MIX); // 判断授权信息是否正确,如果正确则初始化语音合成器并开始语音合成,如果失败则做错误处理 if (authInfo.isSuccess()) { mSpeechSynthesizer.initTts(TtsMode.MIX); int i = mSpeechSynthesizer.speak("百度语音合成示例程序正在运行"); Log.e(TAG,"" + i); } else { // 授权失败 } } private void initialEnv() { if (mSampleDirPath == null) { String sdcardPath = Environment.getExternalStorageDirectory().toString(); mSampleDirPath = sdcardPath + "/" + SAMPLE_DIR_NAME; } makeDir(mSampleDirPath); copyFromAssetsToSdcard(false, SPEECH_FEMALE_MODEL_NAME, mSampleDirPath + "/" + SPEECH_FEMALE_MODEL_NAME); copyFromAssetsToSdcard(false, SPEECH_MALE_MODEL_NAME, mSampleDirPath + "/" + SPEECH_MALE_MODEL_NAME); copyFromAssetsToSdcard(false, TEXT_MODEL_NAME, mSampleDirPath + "/" + TEXT_MODEL_NAME); copyFromAssetsToSdcard(false, LICENSE_FILE_NAME, mSampleDirPath + "/" + LICENSE_FILE_NAME); } private void makeDir(String dirPath) { File file = new File(dirPath); if (!file.exists()) { file.mkdirs(); } } /** * 将sample工程需要的资源文件拷贝到SD卡中使用(授权文件为临时授权文件,请注册正式授权) * * @param isCover 是否覆盖已存在的目标文件 * @param source * @param dest */ private void copyFromAssetsToSdcard(boolean isCover, String source, String dest) { File file = new File(dest); if (isCover || (!isCover && !file.exists())) { InputStream is = null; FileOutputStream fos = null; try { is = context.getResources().getAssets().open("data/" + source); String path = dest; fos = new FileOutputStream(path); byte[] buffer = new byte[1024]; int size = 0; while ((size = is.read(buffer, 0, 1024)) >= 0) { fos.write(buffer, 0, size); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } try { if (is != null) { is.close(); } } catch (IOException e) { e.printStackTrace(); } } } } @Override public void onSynthesizeStart(String s) { Log.i(TAG,"onSynthesizeStart " + s); } @Override public void onSynthesizeDataArrived(String s, byte[] bytes, int i) { Log.i(TAG,"onSynthesizeDataArrived " + s); } @Override public void onSynthesizeFinish(String s) { Log.i(TAG,"onSynthesizeFinish " + s); } @Override public void onSpeechStart(String s) { Log.i(TAG,"onSpeechStart " + s); } @Override public void onSpeechProgressChanged(String s, int i) { Log.i(TAG,"onSpeechProgressChanged " + s); } @Override public void onSpeechFinish(String s) { Log.i(TAG,"onSpeechFinish " + s); } @Override public void onError(String s, SpeechError speechError) { Log.i(TAG,"onError " + s + " speechError " + speechError); } 复现步骤、现象及其他描述:授权成功,调用没有报错,就是无法发声。查找问题发现的日志中的错误。 回复小杨服装店:请您测试下我们的demo是否有此问题,先测联网功能,谢谢