部分机型不能正常合成语音,并播报。
上海云照 发布于2017-07 浏览:1751 回复:7
0
收藏

我使用的服务是:语音合成服务

调用的接口是:语音合成接口

参数设置情况:安卓编译sdk22

开发平台和机型:红米note4,华为畅想5, vivoxplay6 ,华为TIT-AL00,华为荣耀CAM-AL00,魅蓝2(不能进行语音播报)

SDK版本号:2.3.0jar包

代码或日志截图(上传截图能帮助您更快解决问题):

private SpeechSynthesizer mSpeechSynthesizer;

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";
private static final String ENGLISH_SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female_en.dat";
//    private static final String ENGLISH_SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male_en.dat";
   private static final String ENGLISH_TEXT_MODEL_NAME = "bd_etts_text_en.dat";

private void initialTts() {
if (mSampleDirPath == null) {
String sdcardPath = Environment.getExternalStorageDirectory().toString();
mSampleDirPath = sdcardPath + "/" + SAMPLE_DIR_NAME;
}
this.mSpeechSynthesizer = SpeechSynthesizer.getInstance();
this.mSpeechSynthesizer.setContext(this);
this.mSpeechSynthesizer.setSpeechSynthesizerListener(this);
// 文本模型文件路径 (离线引擎使用)
       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);
Properties pro = new Properties();
String appid = null, apiKey = null, apiKeyT = null;
try {
AssetManager assets = getResources().getAssets();
InputStream open = assets.open("voice.properties");

pro.load(open);
appid = pro.getProperty("APPID");
apiKey = pro.getProperty("APIKEY");
apiKeyT = pro.getProperty("APIKEYT");

open.close();
pro.clear();
} catch (IOException e) {

System.out.println(e);
System.out.println(getFilesDir());
}
// 请替换为语音开发者平台上注册应用得到的App ID (离线授权)
       this.mSpeechSynthesizer.setAppId(appid/*这里只是为了让Demo运行使用的APPID,请替换成自己的id。*/);
// 请替换为语音开发者平台注册应用得到的apikey和secretkey (在线授权)
       this.mSpeechSynthesizer.setApiKey(apiKey,
apiKeyT/*这里只是为了让Demo正常运行使用APIKey,请替换成自己的APIKey*/);
// 发音人(在线引擎),可用参数为0,1,2,3。。。(服务器端会动态增加,各值含义参考文档,以文档说明为准。0--普通女声,1--普通男声,2--特别男声,3--情感男声。。。)
       this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0");
// 设置Mix模式的合成策略
       this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE, SpeechSynthesizer.MIX_MODE_DEFAULT);
// 授权检测接口(只是通过AuthInfo进行检验授权是否成功。)
       // AuthInfo接口用于测试开发者是否成功申请了在线或者离线授权,如果测试授权成功了,可以删除AuthInfo部分的代码(该接口首次验证时比较耗时),不会影响正常使用(合成使用时SDK内部会自动验证授权)
      /* AuthInfo authInfo = this.mSpeechSynthesizer.auth(TtsMode.MIX);

       if (authInfo.isSuccess()) {
           shwoMes("success");
       } else {
           String errorMsg = authInfo.getTtsError().getDetailMessage();
           shwoMes(errorMsg);
       }*/

       // 初始化tts
       mSpeechSynthesizer.initTts(TtsMode.MIX);
// 加载离线英文资源(提供离线英文合成功能)
       int result =
mSpeechSynthesizer.loadEnglishModel(mSampleDirPath + "/" + ENGLISH_TEXT_MODEL_NAME, mSampleDirPath
                       + "/" + ENGLISH_SPEECH_FEMALE_MODEL_NAME);

}

private SpeechSynthesizeBag getSpeechSynthesizeBag(String text, String utteranceId) {
SpeechSynthesizeBag speechSynthesizeBag = new SpeechSynthesizeBag();
//需要合成的文本text的长度不能超过1024个GBK字节。
       speechSynthesizeBag.setText(text);
speechSynthesizeBag.setUtteranceId(utteranceId);
return speechSynthesizeBag;
}


private void batchSpeak(String payType, String moneyNumber) {
List bags = new ArrayList();
bags.add(getSpeechSynthesizeBag(payType, "5"));
bags.add(getSpeechSynthesizeBag("到账", "5"));
bags.add(getSpeechSynthesizeBag(moneyNumber + getString(R.string.yuan), "5"));
//        bags.add(getSpeechSynthesizeBag("1元", "1"));
       int result = this.mSpeechSynthesizer.batchSpeak(bags);
if (result < 0) {
shwoMes("error,please look up error code in doc or URL:http://yuyin.baidu.com/docs/tts/122 ");
}
}

复现步骤、现象及其他描述:红米note4机型没有正常播报过语音,但是正常执行代码的。

收藏
点赞
0
个赞
共7条回复 最后由用户已被禁言回复于2022-04
#8fujiayi1984回复于2017-07

上海云照:

回复fujiayi1984:请问有没有技术人员啊,帮忙看看这个什么问题,QQ1372792957

回复上海云照:请您列下您测试过的机型,能播放和不能播放的。给出下报错信息。

0
#7上海云照回复于2017-07

fujiayi1984:

回复上海云照:请您不要修改代码,测试下我们的官方demo是否在红米note4上有问题,是不是您忘记开音量或者其它系统问题,请您多试几款机型,找出差异

回复fujiayi1984:请问有没有技术人员啊,帮忙看看这个什么问题,QQ1372792957

0
#6上海云照回复于2017-07

fujiayi1984:

回复上海云照:请您不要修改代码,测试下我们的官方demo是否在红米note4上有问题,是不是您忘记开音量或者其它系统问题,请您多试几款机型,找出差异

回复fujiayi1984:百度官方的demo也是不能在这些平台上进行语音播报的。

0
#5上海云照回复于2017-07

fujiayi1984:

回复上海云照:请您不要修改代码,测试下我们的官方demo是否在红米note4上有问题,是不是您忘记开音量或者其它系统问题,请您多试几款机型,找出差异

回复fujiayi1984:百度官方的demo也是不能在这些平台上进行语音播报的。

0
#4上海云照回复于2017-07

fujiayi1984:

回复上海云照:请您不要修改代码,测试下我们的官方demo是否在红米note4上有问题,是不是您忘记开音量或者其它系统问题,请您多试几款机型,找出差异

回复fujiayi1984:或者是否有开发交流群之类的交流平台

0
#3上海云照回复于2017-07

fujiayi1984:

回复上海云照:请您不要修改代码,测试下我们的官方demo是否在红米note4上有问题,是不是您忘记开音量或者其它系统问题,请您多试几款机型,找出差异

回复fujiayi1984:比较低级的肯定都是专门测试过的,而且掉用你们的接口是没有错误的,在某一部分上手机是没有问题的,请问其他系统问题是指什么问题?

0
#2fujiayi1984回复于2017-07

上海云照:

我使用的服务是:语音合成服务

调用的接口是:语音合成接口

参数设置情况:安卓编译sdk22

开发平台和机型:红米note4,华为畅想5, vivoxplay6 ,华为TIT-AL00,华为荣耀CAM-AL00,魅蓝2(不能进行语音播报)

SDK版本号:2.3.0jar包

代码或日志截图(上传截图能帮助您更快解决问题):

private SpeechSynthesizer mSpeechSynthesizer;

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";
private static final String ENGLISH_SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female_en.dat";
//    private static final String ENGLISH_SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male_en.dat";
   private static final String ENGLISH_TEXT_MODEL_NAME = "bd_etts_text_en.dat";

private void initialTts() {
if (mSampleDirPath == null) {
String sdcardPath = Environment.getExternalStorageDirectory().toString();
mSampleDirPath = sdcardPath + "/" + SAMPLE_DIR_NAME;
}
this.mSpeechSynthesizer = SpeechSynthesizer.getInstance();
this.mSpeechSynthesizer.setContext(this);
this.mSpeechSynthesizer.setSpeechSynthesizerListener(this);
// 文本模型文件路径 (离线引擎使用)
       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);
Properties pro = new Properties();
String appid = null, apiKey = null, apiKeyT = null;
try {
AssetManager assets = getResources().getAssets();
InputStream open = assets.open("voice.properties");

pro.load(open);
appid = pro.getProperty("APPID");
apiKey = pro.getProperty("APIKEY");
apiKeyT = pro.getProperty("APIKEYT");

open.close();
pro.clear();
} catch (IOException e) {

System.out.println(e);
System.out.println(getFilesDir());
}
// 请替换为语音开发者平台上注册应用得到的App ID (离线授权)
       this.mSpeechSynthesizer.setAppId(appid/*这里只是为了让Demo运行使用的APPID,请替换成自己的id。*/);
// 请替换为语音开发者平台注册应用得到的apikey和secretkey (在线授权)
       this.mSpeechSynthesizer.setApiKey(apiKey,
apiKeyT/*这里只是为了让Demo正常运行使用APIKey,请替换成自己的APIKey*/);
// 发音人(在线引擎),可用参数为0,1,2,3。。。(服务器端会动态增加,各值含义参考文档,以文档说明为准。0--普通女声,1--普通男声,2--特别男声,3--情感男声。。。)
       this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0");
// 设置Mix模式的合成策略
       this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE, SpeechSynthesizer.MIX_MODE_DEFAULT);
// 授权检测接口(只是通过AuthInfo进行检验授权是否成功。)
       // AuthInfo接口用于测试开发者是否成功申请了在线或者离线授权,如果测试授权成功了,可以删除AuthInfo部分的代码(该接口首次验证时比较耗时),不会影响正常使用(合成使用时SDK内部会自动验证授权)
      /* AuthInfo authInfo = this.mSpeechSynthesizer.auth(TtsMode.MIX);

       if (authInfo.isSuccess()) {
           shwoMes("success");
       } else {
           String errorMsg = authInfo.getTtsError().getDetailMessage();
           shwoMes(errorMsg);
       }*/

       // 初始化tts
       mSpeechSynthesizer.initTts(TtsMode.MIX);
// 加载离线英文资源(提供离线英文合成功能)
       int result =
mSpeechSynthesizer.loadEnglishModel(mSampleDirPath + "/" + ENGLISH_TEXT_MODEL_NAME, mSampleDirPath
                       + "/" + ENGLISH_SPEECH_FEMALE_MODEL_NAME);

}

private SpeechSynthesizeBag getSpeechSynthesizeBag(String text, String utteranceId) {
SpeechSynthesizeBag speechSynthesizeBag = new SpeechSynthesizeBag();
//需要合成的文本text的长度不能超过1024个GBK字节。
       speechSynthesizeBag.setText(text);
speechSynthesizeBag.setUtteranceId(utteranceId);
return speechSynthesizeBag;
}


private void batchSpeak(String payType, String moneyNumber) {
List bags = new ArrayList();
bags.add(getSpeechSynthesizeBag(payType, "5"));
bags.add(getSpeechSynthesizeBag("到账", "5"));
bags.add(getSpeechSynthesizeBag(moneyNumber + getString(R.string.yuan), "5"));
//        bags.add(getSpeechSynthesizeBag("1元", "1"));
       int result = this.mSpeechSynthesizer.batchSpeak(bags);
if (result < 0) {
shwoMes("error,please look up error code in doc or URL:http://yuyin.baidu.com/docs/tts/122 ");
}
}

复现步骤、现象及其他描述:红米note4机型没有正常播报过语音,但是正常执行代码的。

回复上海云照:请您不要修改代码,测试下我们的官方demo是否在红米note4上有问题,是不是您忘记开音量或者其它系统问题,请您多试几款机型,找出差异

0
TOP
切换版块