106 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const fillIn = val => `${val < 10 ? '0' : ''}${val}`,
 | 
						|
    formatTime = _time => {
 | 
						|
        let time = Math.round(_time);
 | 
						|
        let second = Math.round(time % 60),
 | 
						|
            minute = Math.floor(time / 60 % 60),
 | 
						|
            hour = Math.floor(time / 60 / 60);
 | 
						|
        return `${fillIn(hour)}:${fillIn(minute)}:${fillIn(second)}`;
 | 
						|
    };
 | 
						|
 | 
						|
class Audio{
 | 
						|
    constructor(obj){
 | 
						|
        const _ts = this,
 | 
						|
            option = _ts.option = obj.attrs;
 | 
						|
 | 
						|
        _ts.loop = option.loop === 'true',
 | 
						|
        _ts.autoplay = option.autoplay === 'true';
 | 
						|
        _ts.create();
 | 
						|
        _ts.index = 0;
 | 
						|
 | 
						|
        
 | 
						|
    }
 | 
						|
    create(){
 | 
						|
        const _ts = this,
 | 
						|
            option = _ts.option;
 | 
						|
        let audio = _ts.audio = wx.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;
 |