美文网首页
Android 关于讯飞语音离线语音切换播报人的疑惑

Android 关于讯飞语音离线语音切换播报人的疑惑

作者: pursuit_hu | 来源:发表于2018-12-19 17:33 被阅读0次

收到一个产品提的需求,在讯飞语音上需要有语音播报人声切换的功能,当时没多想,感觉不就是设置一个参数的问题么,就这么一句不就搞定了???

先试讯飞语音提供的免费的男声或声的切换:

mSpeechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");

把上面的xiaoyan改成xiaofeng不就可以了么,结果。。。完全不行啊,仔细看文档,

好像是要加载发音人的本地资源文件,那就加载呗,代码如下

private StringgetResourcePath() {

    StringBuffer tempBuffer =new StringBuffer();

    tempBuffer.append(ResourceUtil.generateResourcePath(mContextWeakReference.get(), ResourceUtil.RESOURCE_TYPE.assets, "tts/common.jet"));

    tempBuffer.append(";");

    tempBuffer.append(ResourceUtil.generateResourcePath(mContextWeakReference.get(), ResourceUtil.RESOURCE_TYPE.assets, "tts/xiaofeng.jet"));

tempBuffer.append(";");

    tempBuffer.append(ResourceUtil.generateResourcePath(mContextWeakReference.get(), ResourceUtil.RESOURCE_TYPE.assets, "tts/xiaoyan.jet"));

    return tempBuffer.toString();

}

写完这些,一跑项目,这。。。。咋什么声音都没有了。。。。想打人。。。

为什么同时引入三个资源,会导致这种问题呢?本想深究下去,后来一想,算了,不折腾了,既然同时引入三个有问题,那我照着官方给的demo,一次引入两个总行了吧,大不了代码写的坑了点,每次设置,都设置一次资源文件。

然后改代码,改成

private StringgetTtsResource(String voiceName) {

StringBuffer tempBuffer =new StringBuffer();

    tempBuffer.append(ResourceUtil.generateResourcePath(mContextWeakReference.get(), ResourceUtil.RESOURCE_TYPE.assets, "tts/common.jet"));

    tempBuffer.append(";");

    tempBuffer.append(ResourceUtil.generateResourcePath(mContextWeakReference.get(), ResourceUtil.RESOURCE_TYPE.assets, "tts/" + voiceName +".jet"));

    return tempBuffer.toString();

}

//设置播报人声

public void setPeople(String person) {

    // 设置发音人资源路径

   mSpeechSynthesizer.setParameter(ResourceUtil.TTS_RES_PATH, getTtsResource(person));

    // 发音人

   mSpeechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, person);

}

这么一写,额,还真能切换播报人声,就这样吧,功能实现了就好。。。只能这样安慰自己了

相关文章

网友评论

      本文标题:Android 关于讯飞语音离线语音切换播报人的疑惑

      本文链接:https://www.haomeiwen.com/subject/taojkqtx.html