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

2018-05-11 10:52 更新

音頻播放


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

使用 InnerAudioContext 播放

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

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

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

audio.obeyMuteSwitch = false

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

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

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

回到前臺(tái)時(shí)恢復(fù)背景音樂

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

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

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

處理音頻中斷事件

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

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

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

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

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

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

兼容性說(shuō)明

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

最佳實(shí)踐

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

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

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

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

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)