最近在寫一個仿網易雲的音樂播放器小程序,第一個難關就是音樂播放;
<!-- 底部進度條 -->
<view class="footer">
<view class="progress-bar">
<view>00:00</view>
<view class="progress-line">
<view class="progress-bg"></view>
<view class="progress-red"></view>
<view class="progress-dot">
<icon class="iconfont iconyuandian1"></icon>
</view>
</view>
<view>00:00</view>
<audio src="{{songurl}}" id="myAudio"></audio>
</view>
</view>
控制音樂的播放暫停play事件
play:function(){
this.setData({
playstatus: !this.data.playstatus
})
if(this.data.playstatus == true){
wx.pauseBackgroundAudio();
}else{
wx.playBackgroundAudio({
dataUrl: this.data.songData.songurl,
title: this.data.songData.name
})
}
},
(目前頁面是這樣子的,不過進度條和歌詞 還沒開始做,有點不太美觀 )
此時看着是沒有問題的,播放暫停完全正常,但我接着後續的時候發現提示<audio/>組件已不再維護,爲防止後續再出現未知錯誤,換了getBackgroundAudioManager;
因爲每次暫停再播放,音樂就會從頭開始播放,所以我在暫停時獲取當前音樂播放進度(暫停時間),然後再播放的時候從暫停時間處開始播放,但是!!!測試的時候bug不斷,首先是暫停有延遲,點擊暫停按鈕幾秒後音樂才暫停,其次是再播放的位置跟暫停的位置有時能保持一致,有時會重複播放幾秒。
現在我打算再換wx.createInnerAudioContext 接口 ,還沒開始改,不過我相信我可以的,再不行......
我就再換!
改好了繼續更
-----------------分界線
我又回來了。
InnerAudioContext跟BackgroundAudioManager有點類似 但是比它簡單點,
InnerAudioContext.pause()
暫停方法。暫停後的音頻再播放會從暫停處開始播放,這點就不像BackgroundAudioManager那麼雞肋了。
最終播放頁面(播放、暫停、上一曲、下一曲、拖動進度條已實現,可能之後還有細節需要調整)