最近寫一個個人小程序 想給里面加點音效 遇到了不能同時播放兩個音效的問題 搜到了一些資料整理了一下
原理就是創(chuàng)建5個innerAudioContext實例化對象,輪流調(diào)用。(小程序只能同時存在5個音頻實例)。
附上demo:
const innerAudioContext1 = wx.createInnerAudioContext(),
innerAudioContext2 = wx.createInnerAudioContext(),
innerAudioContext3 = wx.createInnerAudioContext(),
innerAudioContext4 = wx.createInnerAudioContext(),
innerAudioContext5 = wx.createInnerAudioContext();
Page({
tap() { // 此函數(shù)點擊調(diào)用
this.vioce();
},
vioce() {
const inner = [innerAudioContext1, innerAudioContext2, innerAudioContext3, innerAudioContext4, innerAudioContext5];
let filePath = "音頻地址";
let index = app.globalData.index;
index++;
if (index > 4) {
index = 0
}
app.globalData.index = index
inner[index].src = filePath;
inner[index].stop()
inner[index].play()
}
})
這個API已經(jīng)沒人維護 現(xiàn)在用最新的 BackgroundAudioManager
示例DEMO
const bgMusic = wx.getBackgroundAudioManager() //創(chuàng)建背景音樂
Page({
data: {
id: '',//請求數(shù)據(jù)參數(shù)id
picMsg: {},//接收數(shù)據(jù)對象
},
onLoad: function (options) {
var that = this
that.setData({
id: options.id,
})
that.getPicInfo() //請求服務(wù)器
},
// 開始播放
listenerButtonPlay: function (src) {
var that = this
console.log(src)
bgMusic.src = src;
bgMusic.onTimeUpdate(() => { //監(jiān)聽音頻播放進度
console.log(bgMusic.currentTime)
})
bgMusic.onEnded(() => { //監(jiān)聽音樂自然播放結(jié)束
console.log("音樂播放結(jié)束");
that.listenerButtonPlay(that.data.picMsg.mp3)
})
bgMusic.play(); //播放音樂
},
getPicInfo() {
var that = this
wx.request({
url: 'https://xxxxx.xxxxx.com/1.json?id=' + that.data.id,
header: {
'content-type': 'application/json'
},
method: 'GET',
success: function (res) {
that.listenerButtonPlay(res.data.data.mp3) //成功回調(diào)執(zhí)行播放音樂
that.setData({
picMsg: res.data.data, //賦值對象
})
}
})
},
onUnload() {
var that = this
that.listenerButtonStop()//頁面卸載時停止播放
console.log("離開")
},
//暫停
audioPause: function () {
var that = this
bgMusic.pause(); //暫停播放音樂
console.log('暫停')
},
audioPlay: function () {
var that = this
bgMusic.play(); //停止播放
console.log('繼續(xù)播放')
},
//停止播放
listenerButtonStop: function () {
bgMusic.stop()
},
})