微信小游戲開發(fā)文檔-小游戲音頻播放能力教程

2018-05-11 10:52 更新

音頻播放


小游戲內(nèi)只有一種音頻播放的方式,即使用 InnerAudioContext 來播放。

使用 InnerAudioContext 播放

通過 wx.createInnerAudioContext() 接口可以創(chuàng)建一個音頻實(shí)例 innerAudioContext ,通過這個實(shí)例可以播放音頻。

var audio = wx.createInnerAudioContext()
audio.src = url // src 可以設(shè)置 http(s) 的路徑,本地文件路徑或者代碼包文件路徑
audio.play()

在 iOS 系統(tǒng)上,默認(rèn)遵循靜音鍵設(shè)置。如果希望在靜音時也能播放聲音,可以設(shè)置 obeyMuteSwitchfalse。

audio.obeyMuteSwitch = false

自動播放和循環(huán)播放

設(shè)置 autoplayloop 屬性可以自動播放和循環(huán)播放音頻,一般適用于背景音樂。

var bgm = wx.createInnerAudioContext()
bgm.autoplay = true
bgm.loop = true
bgm.src = url

回到前臺時恢復(fù)背景音樂

當(dāng)小游戲被隱藏到后臺時,所有音頻會被暫停,并在回到前臺之前都不能再播放成功。

回到前臺之后,被暫停的音頻不會自動繼續(xù)播放,如果小游戲有背景音樂的話,需要監(jiān)聽回到前臺事件,并在收到回到前臺事件之后調(diào)用背景音樂繼續(xù)播放。

wx.onShow(function () {
  bgm.play()
})

處理音頻中斷事件

音頻中斷事件指的是在游戲期間,音頻被系統(tǒng)打斷時觸發(fā)的事件。音頻中斷事件分為中斷開始和中斷結(jié)束事件,分別使用 wx.onAudioInterruptionBegin() 和 wx.onAudioInterruptionEnd() 來監(jiān)聽。

以下事件會觸發(fā)音頻中斷開始事件:接到電話、鬧鐘響起、系統(tǒng)提醒、收到微信好友的語音/視頻通話請求。被中斷之后,小游戲內(nèi)所有音頻會被暫停,并在中斷結(jié)束之前都不能再播放成功。

中斷結(jié)束之后,被暫停的音頻不會自動繼續(xù)播放,如果小游戲有背景音樂的話,需要監(jiān)聽音頻中斷結(jié)束事件,并在收到中斷結(jié)束事件之后調(diào)用背景音樂繼續(xù)播放。

wx.onAudioInterruptionEnd(function () {
  bgm.play()
})

如果小游戲的邏輯強(qiáng)依賴音樂的播放,則需要在音頻開始中斷的時候暫停游戲

wx.onAudioInterruptionBegin(function () {
  // 暫停游戲
})

兼容性說明

目前兩個平臺完全支持的音頻格式有 mp3、aac、wav。其他格式存在系統(tǒng)差異,不保證支持。

最佳實(shí)踐

復(fù)用已有的音頻實(shí)例

對于相同的音效,應(yīng)該復(fù)用已有的音頻實(shí)例,而不是重新創(chuàng)建一個音頻實(shí)例。

及時銷毀不需要的音頻實(shí)例

如果一個音頻不再需要使用了,可以調(diào)用 InnerAudioContext.destroy() 接口提前銷毀這個實(shí)例。

Android 同時播放的音頻數(shù)量限制

由于系統(tǒng)限制,在 Android 上最多同時播放 10 個音頻,超過的部分會做有損處理,對開發(fā)者來說不感知,但開發(fā)者應(yīng)盡量避免同時播放過多音頻。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號