Android_Yanbin
Android_Yanbin
  • 发布:2016-12-21 19:20
  • 更新:2023-09-23 18:16
  • 阅读:27857

文字合成语音的实现

分类:HTML5+

HBuilder版本号为7.6.3.201612161809及之后的用户请用如下Native.Js代码实现:

var receiver;  

                receiver = plus.android.implements('com.iflytek.cloud.SynthesizerListener', {  
                    onEvent: function(int eventType, int arg1, int arg2, Bundle obj) {  
                        console.log("onEvent");  
                    },  
                    onSpeakBegin: function() {  
                        console.log("开始阅读");  
                    },  
                    onSpeakPaused: function() {  
                        console.log(" 暂停播放 ");  
                    },  
                    onSpeakResumed: function() {  
                        console.log("继续播放");  
                    },  
                    onBufferProgress: function(percent, beginPos, endPos, info) {  
                        console.log("合成进度" + percent);  
                    },  
                    onSpeakProgress: function(percent, beginPos, endPos) {  
                        console.log("播放进度" + percent);  
                    },  
                    onCompleted: function(error) {  
                        console.log("播放完毕");  
                    }  
                });  

                var main = plus.android.runtimeMainActivity();  

                var SpeechUtility = plus.android.importClass('com.iflytek.cloud.SpeechUtility');  

                SpeechUtility.createUtility(main, "appid=53feacdd");  

                var SynthesizerPlayer = plus.android.importClass('com.iflytek.cloud.SpeechSynthesizer');  

                var play = SynthesizerPlayer.createSynthesizer(main, null);  
                 // 开始合成  
                play.startSpeaking('新年快乐', receiver);  
        // 取消合成  
        play.stopSpeaking();  
        // 暂停播放  
        play.pauseSpeaking();  
        // 继续播放  
        play.resumeSpeaking();

该版本之前的用户请参考下面的写法:
由于Android系统tts不支持中文,使用科大讯飞文字转语音功能,使用如此功能时,需要保证manifest.json中permissions节点含有speech节点(如"Speech": {"description": "管理语音识别插件" })。

var main = plus.android.runtimeMainActivity();  
var SynthesizerPlayer = plus.android.importClass('com.iflytek.speech.SynthesizerPlayer');  
var play = SynthesizerPlayer.createSynthesizerPlayer(main,'appid=53feacdd');  
play.playText('水果',null,null);

iOS平台参考[http://ask.dcloud.net.cn/question/4175)(http://ask.dcloud.net.cn/question/4175)

11 关注 分享
赵梦欢 1***@qq.com JBoss 4***@qq.com Trust z***@qq.com 6***@qq.com z***@gmail.com 2***@qq.com 2***@qq.com 映月辉煌

要回复文章请先登录注册

guosp

guosp

如果android版本大于8 ,用下面的方法转编码即可 比如 changeEnCode('你好,hello')
```javascript

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)
}
```
2020-06-28 19:38
guosp

guosp

android 8.1 以上因unicode 大小端问题导致乱码,需要转一下编码,原理:负负得正

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)
}
2020-06-28 19:36
2***@qq.com

2***@qq.com

真tnnd垃圾
2020-06-15 16:19
2***@qq.com

2***@qq.com

你好,你们的文字合成出来的语言与文字不同解决了吗?怎么解决的
2020-06-13 18:36
1***@qq.com

1***@qq.com

为什么我打印那个play变量为undefined ,是使用云打包之后在安卓机子上测试的
2020-05-12 14:34
9***@qq.com

9***@qq.com

运行上述代码,读音只出一个字符,类似于声音文字乱码,是需要配置些什么么
2020-04-13 15:25
小权

小权

mark
2020-03-07 23:03
1***@qq.com

1***@qq.com

请问我运行出来结果怎么是外星语?简单的‘你好’,‘hello’都不能正确读出来,一堆听不懂的话
2019-12-12 18:36
3***@qq.com

3***@qq.com

mark
2019-08-22 11:03
菠萝蜜333

菠萝蜜333

回复 5***@qq.com :
现在支持了么
2019-07-30 09:12