cue = function (position) { off() var waitingId = emitNewState('waiting', 50) audioEmitter .one('error.audio', error) .one('loadedmetadata.audio', play) .one('loadeddata.audio', function () { clearTimeout(waitingId) if (position) { // android player só recupera a duração depois do primeiro timeupdate if (audio.duration === 100 && audio.currentTime === 0) { audioEmitter.one('timeupdate.audio', function () { seek(position) }) } else { seek(position) } } on() }) audio.src = disc.currentTrack().url audio.load() // necessário para o IOS emitter.emit('cued', disc.currentTrack()) }
var timeupdate = function () { var progress = audio.currentTime / audio.duration emitter.emit('progress', { progress: disc.currentProgress(progress), currentTime: helpers.secondsToTime(disc.currentTime(progress)), totalTime: helpers.secondsToTime(disc.totalTime()) }) }
var ended = function () { var next = disc.next() if (next) { cue() } else { rewind() emitter.emit('ended') } }
var rewind = function () { stopWatch() disc.release() emitter.emit('progress', { progress: 0, currentTime: 0 }) emitNewState('stop') }
var stop = function () { off() if (audio.readyState > 0) { pause() audio.currentTime = 0 } audio.src = '' emitter.emit('stop') }
var error = function () { eject() emitter.emit('error', disc) }
emitter.on(event, function () { state = event emitter.emit('state', event) })
.on('waiting.audio loadstart.audio', function () { emitter.emit('waiting') })