const fillIn = (val) => `${val < 10 ? '0' : ''}${val}`; const formatTime = (_time) => { let time = Math.round(_time); let second = Math.round(time % 60); let minute = Math.floor((time / 60) % 60); let hour = Math.floor(time / 60 / 60); return `${fillIn(hour)}:${fillIn(minute)}:${fillIn(second)}`; }; class Audio { constructor(obj) { const _ts = this; const option = (_ts.option = obj.attrs); _ts.loop = option.loop === 'true'; _ts.autoplay = option.autoplay === 'true'; _ts.create(); _ts.index = 0; } create() { const _ts = this; const option = _ts.option; let audio = (_ts.audio = uni.createInnerAudioContext()); audio.src = option.src; // 说明可以播放了 audio.onCanplay(function () { if (_ts.autoplay && !_ts.index) { _ts.play(); } if (!_ts.autoplay && !_ts.index) { _ts.eventCanplay(); } }); // 更新时间 audio.onTimeUpdate(function () { //_ts.status = 'update'; _ts.duration = audio.duration; _ts.currentTime = audio.currentTime; // 定义播放结束 if (_ts.duration - _ts.currentTime < 0.5) { _ts.index++; if (_ts.loop) { audio.stop(); } else { _ts.stop(); } audio.seek(0); } _ts.eventTimeUpdate(formatTime(_ts.duration), formatTime(_ts.currentTime)); }); // audio.onSeeked(function () { if (_ts.loop) { _ts.play(); } }); } // 播放 play() { const _ts = this; _ts.status = 'play'; _ts.audio.play(); _ts.eventPlay(); } // 暂停 pause() { const _ts = this; _ts.status = 'pause'; _ts.audio.pause(); _ts.eventPause(); } // 停止 stop() { const _ts = this; _ts.status = 'stop'; _ts.audio.stop(); _ts.eventStop(); } // 销毁 destroy() { const _ts = this; _ts.stop(); _ts.audio.destroy(); } eventCanplay() {} eventTimeUpdate() {} eventEnded() {} eventError() {} eventPause() {} eventPlay() {} eventSeeked() {} eventSeeking() {} eventStop() {} eventWaiting() {} } module.exports = Audio;