英文发音的技术方案很多种,经过调查决定采用网易有道的发音API,真人发音质量比微软TTS标准好听很多。
有道api的url http://dict.youdao.com/dictvoice?type=0&audio=
这里type(0:美音,1:英音)
在小程序中不能直接访问有道url,所以只能在自己服务器上Nginx架设反向代理指向这个地址。
增加一个读单词方法:
readWord:function (word) {
var voiceType = 1
if(this.data.isUsa){
voiceType = 0
}
console.log( 'https://www.***.cn/youdao/dictvoice?type=' + voiceType +'&audio=' + word)
wx.downloadFile({
url: 'https://www.***.cn/youdao/dictvoice?type=' + voiceType +'&audio=' + word,
success: function (res) {
console.log(res)
let wordAudio = wx.createInnerAudioContext();
wordAudio.autoplay = true;
wordAudio.src = res.tempFilePath;
}
})
},
这样当用户点击“下一个”按钮的时候,就会自动朗读这个单词的发音。
另外,说一下小程序的全局变量配置的问题。在微信小程序开发中,会遇到一个很实际的应用场景,就是一个变量会在多个页面进行使用。这样的的场景中,我们就需要使用全局变量,当然也有开发者说不能每个page页面都定义一个?如果需求改变需要修改这个变量,这个时候只需要修改全局,就能进行整个小程序的修改,如果每个page一个变量,将会在修改中花费大量的时间做低效的工作。
可以在app.js中定义全局变量,
globalData:{
userInfo:null,
authorization:null,
userId:null
}
在本文件可以使用this直接访问,其它页面如果需要访问全局变量需要引入:
var app = getApp()
使用的时候,像下面这样访问:
header: {
'content-type': 'application/json' ,// 默认值
'authorization': app.globalData.authorization
},
当然还有另外一个方法,用引入js的方法定义全局变量,在公用js文件夹中创建一个保存全局变量的js文件,这种方法这里就不介绍了。