摘要:?jiǎn)栴}微信小程序,將文字轉(zhuǎn)換為語(yǔ)音后,使用音頻進(jìn)行播放。在安卓手機(jī)下可以正常播放,在下不行。需要對(duì)接口的文本字符串參數(shù)進(jìn)行編碼比如哈哈哈哈哈哈哈哈哈沒(méi)有做編碼,直接上文本的,也會(huì)出現(xiàn)安卓行不行的情況。
【問(wèn)題】
微信小程序,將文字轉(zhuǎn)換為語(yǔ)音后,使用音頻進(jìn)行播放。在安卓手機(jī)下可以正常播放,在IOS下不行。
【環(huán)境】微信小程序庫(kù)版本2.3.0
百度語(yǔ)音合成服務(wù)
正確代碼:
//創(chuàng)建一個(gè)音頻實(shí)例 const myaudio = wx.createInnerAudioContext(); //設(shè)置obeyMuteSwitch: false(不遵循系統(tǒng)靜音開(kāi)關(guān),即使用戶打開(kāi)了靜音開(kāi)關(guān),也能繼續(xù)發(fā)出聲音) //設(shè)置autoplay: true(自動(dòng)開(kāi)始播放) if (wx.setInnerAudioOption) { wx.setInnerAudioOption({ obeyMuteSwitch: false, autoplay: true }) }else { myaudio.obeyMuteSwitch = false; myaudio.autoplay = true; } //監(jiān)聽(tīng)各個(gè)階段 myaudio.onCanplay(() => { console.log("可以播放"); }); myaudio.onPlay(() => { console.log("監(jiān)聽(tīng)到音頻開(kāi)始播放"); }); myaudio.onEnded(() => { console.log("音頻自然播放結(jié)束事件"); }); myaudio.onStop(() => { console.log("音頻停止事件"); }); myaudio.onError((res) => { console.log(res.errMsg); console.log(res.errCode); }); myaudio.onWaiting((res) => { console.log("音頻加載中事件,當(dāng)音頻因?yàn)閿?shù)據(jù)不足,需要停下來(lái)加載時(shí)會(huì)觸發(fā)") }); //設(shè)置播放鏈接 myaudio.src = "https://tsn.baidu.com/text2audio?lan=zh&ctp=1&cuid=abcdxxx&tok=24.b63*************************************.1543030920.282335-11522973&tex=" + encodeURIComponent(encodeURIComponent("哈哈哈哈哈哈哈哈哈")) + "&vol=5&per=0&spd=5&pit=5&aue=324.b6306a3dff68e153a0d5656b3a78bd5e.2592000.1543030920.282335-11522973"; //播放 myaudio.play();
這樣,在安卓和IOS下都可以正常播放了。
【問(wèn)題總結(jié)】為什么總是播放不了?注意下面兩點(diǎn):
1、這個(gè)播放鏈接返回的必須是格式正確的音頻文件
所以如果換一個(gè)鏈接就能播放了,那可能就說(shuō)明你原來(lái)的鏈接返回了錯(cuò)誤的音頻格式。
原本我的播放鏈接是:
myaudio.src = "https://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=5&text=" + encodeURIComponent("哈哈哈哈哈哈哈哈哈");
這個(gè)tts.baidu.com和tsn.baidu.com長(zhǎng)得非常像,為什么一開(kāi)始用的不是tsn?是因?yàn)樵诰W(wǎng)上搜索到的好多案例都是用的tts,而且tsn需要token參數(shù),這個(gè)參數(shù)要么需要從百度AI開(kāi)放平臺(tái)手動(dòng)獲取,要么需要調(diào)用獲取token的接口,而這個(gè)接口又不支持瀏覽器跨域,因此需要從服務(wù)端獲取token或者每隔30天手動(dòng)輸入更新,我嫌麻煩,所以一開(kāi)始先用了tts。
tts在安卓下確實(shí)可以正常播放,可以看到Console中依次打印出了:
監(jiān)聽(tīng)到音頻開(kāi)始播放 音頻加載中事件,當(dāng)音頻因?yàn)閿?shù)據(jù)不足,需要停下來(lái)加載時(shí)會(huì)觸發(fā) 可以播放 音頻自然播放結(jié)束事件
但是在IOS下就無(wú)法播放了,Console中依次打印出了:
音頻加載中事件,當(dāng)音頻因?yàn)閿?shù)據(jù)不足,需要停下來(lái)加載時(shí)會(huì)觸發(fā) INNERERRCODE:-11850, ERRMSG:操作停止 10002
根據(jù)官方的說(shuō)法,應(yīng)該是因?yàn)榉祷氐囊纛l格式IOS不支持。(https://developers.weixin.qq....)如果返回的音頻格式正確,是可以正常播放的。
ps:后來(lái)查了一下發(fā)現(xiàn)tts這個(gè)接口應(yīng)該只是他們內(nèi)部demo地址,所以還是使用正式的tsn吧。
2、需要對(duì)tsn接口的文本字符串參數(shù)進(jìn)行編碼
比如: encodeURIComponent(encodeURIComponent("哈哈哈哈哈哈哈哈哈"));
沒(méi)有做編碼,直接上文本的,也會(huì)出現(xiàn)安卓行IOS不行的情況。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98904.html
摘要:最近在做一個(gè)英語(yǔ)答題項(xiàng)目項(xiàng)目需求是通過(guò)答題取的成績(jī)答題的題型是分為聽(tīng)音選圖看圖選詞和填空題項(xiàng)目總共分為了個(gè)頁(yè)面開(kāi)始頁(yè)答題頁(yè)和結(jié)束頁(yè)面答題頁(yè)關(guān)于每種題型我做了相應(yīng)的組件每次切換題目的時(shí)候顯示對(duì)應(yīng)的的組件要求聽(tīng)音選圖的時(shí)候會(huì)自動(dòng)播放音頻慣例下的 最近在做一個(gè)英語(yǔ)答題項(xiàng)目 , 項(xiàng)目需求是通過(guò)答題取的成績(jī) , 答題的題型是分為 , 聽(tīng)音選圖 , 看圖選詞 , 和填空題 . 項(xiàng)目總共分為了3個(gè)頁(yè)...
摘要:引言是微信小程序中的音頻組件,可以輕松實(shí)現(xiàn)小程序中播放停止音頻等自定義動(dòng)作。 引言: audio是微信小程序中的音頻組件,可以輕松實(shí)現(xiàn)小程序中播放/停止音頻等自定義動(dòng)作。 附上微信小程序audio組件的相關(guān)屬性說(shuō)明:https://mp.weixin.qq.com/debu... 本次將通過(guò)小程序audio的 poster、name、author、src、id、controls 屬性,...
摘要:關(guān)于微信小程序之前只是聽(tīng)說(shuō),并沒(méi)有引起我太大的興趣。剛好團(tuán)隊(duì)內(nèi)部有個(gè)需求需要微信小程序。暫時(shí)沒(méi)有上線經(jīng)歷,沒(méi)辦法給出這個(gè)時(shí)間微信小程序的代碼包大小當(dāng)前限制是。 關(guān)于微信小程序之前只是聽(tīng)說(shuō),并沒(méi)有引起我太大的興趣。周一被小程序刷屏,然后就順手搜索了解了一下。發(fā)現(xiàn)小程序已經(jīng)火遍了整個(gè)程序員圈子。剛好團(tuán)隊(duì)內(nèi)部有個(gè)需求需要微信小程序。就緊急對(duì)微信小程序進(jìn)行了調(diào)研,閱讀過(guò)開(kāi)發(fā)者文檔后總結(jié)了以下的...
閱讀 2091·2023-04-25 19:03
閱讀 1244·2021-10-14 09:42
閱讀 3423·2021-09-22 15:16
閱讀 1008·2021-09-10 10:51
閱讀 1600·2021-09-06 15:00
閱讀 2414·2019-08-30 15:55
閱讀 497·2019-08-29 16:22
閱讀 905·2019-08-26 13:49