wzl16
wzl16
  • 发布:2018-04-29 11:41
  • 更新:2020-06-28 19:03
  • 阅读:5340

Android 8.1 讯飞文字转语音播报混乱

分类:HBuilder

var main = plus.android.runtimeMainActivity();
var SpeechUtility = plus.android.importClass('com.iflytek.cloud.SpeechUtility');
SpeechUtility.createUtility(main,"appid=5177d8fe");
var SynthesizerPlayer = plus.android.importClass('com.iflytek.cloud.SpeechSynthesizer');
var play = SynthesizerPlayer.createSynthesizer(main, null);
play.startSpeaking('没有花香,没有树高',null);

安卓版本8.1播报混乱,安卓6、7则没问题,使用的是Hbuilder是在线打包。

确认了是Android 8.1的调整所致,望官方及时更新讯飞最新SDK,详情见:http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=37009&highlight=r15

2018-04-29 11:41 负责人:无 分享
已邀请:
wzl16

wzl16 (作者)

官方现在都不打理论坛了吗,认真反馈bug,居然没有任何回应,失望。

距离您98米

距离您98米 - 哈哈

解决了吗?我也是这个bug

全村人的老司机

全村人的老司机 - 头像有缓存!不更新!你说气不气!

if(parseInt(ver) >= 8){ //判断安卓版本,大于8以上的走百度语音合成  
                            var timestamp = Date.parse(new Date());  
                            if(!plus.storage.getItem("oneTime")){  
                                getBaiDuToken(msg.content); //获取百度token  
                                plus.storage.setItem("oneTime",JSON.stringify(timestamp));  
                            }else{  
                                var oneTime = plus.storage.getItem("oneTime");  
                                if((parseInt(timestamp)-parseInt(oneTime)) > 24*60*60){ //因为token24小时后过期,重新获取一次  
                                    console.log("大于24小时");  
                                    plus.storage.setItem("oneTime",JSON.stringify(timestamp)); //大于24小时就更新,再次获取token  
                                    getBaiDuToken(msg.content); //获取百度token  
                                }else{  
                                    //小于24小时无需重新获取百度token  
                                    console.log("小于24小时");  
                                    baiduAubio(msg.content);  
                                }  
                            }  
                        }else{//讯飞语音合成  
                            var main = plus.android.runtimeMainActivity();  
                            var SpeechUtility = plus.android.importClass('com.iflytek.cloud.SpeechUtility');  
                            SpeechUtility.createUtility(main, "appid=你的ID");  
                            var SynthesizerPlayer = plus.android.importClass('com.iflytek.cloud.SpeechSynthesizer');  
                            var play = SynthesizerPlayer.createSynthesizer(main, null);  
                            play.startSpeaking(msg.content, null);  
                        }

大神给出的解决方案 因为平台的原因 改用百度及讯飞混用的方案

3***@qq.com

3***@qq.com

这个问题从以前到现在都没处理过么

2***@qq.com

2***@qq.com - 啊哈

解决了吗?我也是这个问题

guosp

guosp

提供一个过渡方法,如果android版本大于8 ,用下面的方法转编码即可 比如 changeEnCode('你好,hello')


function changeEnCode(str) {  
        let res = []  
        for (let i = 0; i < str.length; i++) {  
            // 这个不是正常的encodeUnicode 颠倒了大小端的位置  
            res[i] = ("00" + str.charCodeAt(i).toString(16)).slice(-2) + ("00" + str.charCodeAt(i).toString(16)).slice(-4, -2)  
        }  
        let strCode = "\\u" + res.join("\\u")  
        strCode = strCode.replace(/\\/g, "%")  
        return unescape(strCode)  
    }

该问题目前已经被锁定, 无法添加新回复