{"version":3,"file":"index.min.js","sources":["../src/xhr.js","../src/music.js","../src/plugins/musicCover.js","../src/plugins/musicBackward.js","../src/plugins/musicPrev.js","../src/plugins/musicForward.js","../src/plugins/musicNext.js","../src/plugins/musicMeta.js","../src/preset.js","../src/analyze/helper.js","../src/analyze/drawWaves.js","../src/analyze/render.js","../src/analyze/drawBars.js","../src/analyze/drawVertlines.js","../src/analyze/drawLightning.js","../src/analyze/drawDoubleline.js","../src/analyze/drawDoubleBars.js","../src/analyze/index.js","../src/lyric.js","../src/index.umd.js"],"sourcesContent":["class Xhr {\n constructor (url, callback) {\n this.url = url\n const xhr = new window.XMLHttpRequest()\n xhr.target = this\n xhr.responseType = 'arraybuffer'\n xhr.open('get', url)\n xhr.onload = function () {\n if (xhr.status === 200 || xhr.status === 206) {\n if (callback && callback instanceof Function) {\n callback(xhr.response)\n }\n }\n }\n xhr.onerror = function (e) {\n // TODO: 改成回调家或者promise\n // xhr.target.emit('error' + e.message)\n }\n this.xhr = xhr\n this.run()\n }\n\n cancel () {\n this.xhr.abort()\n }\n\n run () {\n if (this.xhr.readyState === 1) {\n this.xhr.send()\n }\n }\n}\n\nexport default Xhr\n","import { BasePlugin, Util, Events } from 'xgplayer'\nimport Xhr from './xhr'\n\nconst PLAY_MODES = {\n ORDER: 'order',\n SLOOP: 'sloop',\n LOOP: 'loop',\n RANDOM: 'random'\n}\n\nconst CLASS_NAME = 'xgplayer-music'\n\n/**\n * @typedef {{\n * src: string,\n * vid: string | number,\n * poster?: string,\n * title?: string,\n * }} IMusicListItem\n */\n\n/**\n * @typedef {{\n* start: number,\n* end: number,\n* loop?: boolean,\n* [propName: string]: any\n* }} IABCycle\n*/\n\n/**\n * @typedef {{\n * offline?: boolean,\n * abCycle?: { IABCycle } | null,\n * timeScale?: number,\n * mode?: 'order' | 'sloop' | 'loop' | 'random',\n * list?: Array,\n * [propName: string]: any\n * }} IMusicConfig\n */\n\nfunction _randomIndex (min, max, index) {\n const i = Math.floor(Math.random() * (max - min) + min)\n // console.log('i', i, index, i === index, min, max)\n if (i === index) {\n if (i > max / 2) {\n max = max / 2\n } else {\n min = max / 2\n }\n return max - min > 2 ? _randomIndex(min, max, index) : i\n } else {\n return i\n }\n}\nexport default class Music extends BasePlugin {\n static get pluginName () {\n return 'music'\n }\n\n /**\n * @type { IMusicConfig }\n */\n static get defaultConfig () {\n return {\n offline: false, // Whether to support offline playback\n preloadNext: true,\n abCycle: null, // ab loop playback configuration\n timeScale: 15, // Each time span when forward or backward\n mode: PLAY_MODES.ORDER, // Play mode, the default value id 'order'\n list: [] // Initial Playlist\n }\n }\n\n /**\n * @desc\n * @type {Array}}\n */\n static get ModeType () {\n return Object.keys(PLAY_MODES).map(key => PLAY_MODES[key])\n }\n\n afterCreate () {\n const { player, playerConfig } = this\n Util.addClass(player.root, CLASS_NAME)\n this.halfPass = false\n this.list = this.config.list || []\n this.nextIndex = -1\n this.prevIndex = -1\n this.history = []\n this.disable = !(this.list.length > 0)\n if (this.list.length === 0) {\n return\n }\n if (!playerConfig.url && this.list.length > 0) {\n playerConfig.url = this.list[0].src\n }\n\n if (!playerConfig.poster) {\n playerConfig.poster = this.list[0].poster\n }\n\n if (!playerConfig.title) {\n playerConfig.title = this.list[0].title || ''\n }\n\n if (!playerConfig.vid) {\n playerConfig.vid = this.list[0].vid || ''\n }\n\n this._curInfo = {\n src: playerConfig.url,\n poster: playerConfig.poster,\n title: playerConfig.title,\n vid: playerConfig.vid\n }\n\n this.index = 0\n\n this.on(Events.TIME_UPDATE, this._onTimeUpdate)\n\n this.on(Events.ENDED, this._onEnded)\n\n this.on(Events.DURATION_CHANGE, this._onDurationChange)\n\n if (this.config.offline) {\n this.checkOffline(this._curInfo.src, this._curInfo.vid).then(data => {\n if (data.code === 0) {\n playerConfig.url = data.url\n if (player.state >= 4) {\n player.src = data.url\n }\n }\n }).catch(e => {})\n }\n }\n\n destroy () {\n Util.removeClass(this.player.root, CLASS_NAME)\n }\n\n _onEnded = () => {\n if (this.mode === 'order' && this.index + 1 >= this.list.length) {\n this.player.pause()\n this.player.currentTime = 0\n return\n }\n switch (this.mode) {\n case PLAY_MODES.SLOOP:\n this.change()\n break\n case PLAY_MODES.ORDER:\n case PLAY_MODES.LOOP:\n default:\n this.next()\n break\n }\n }\n\n _onDurationChange = () => {\n const { abCycle } = this.config\n this._initABCycle(abCycle, this.player)\n }\n\n _onTimeUpdate = () => {\n const { config, player } = this\n if (!this.halfPass && player.currentTime > player.duration / 2) {\n this.confirmOrder()\n }\n if (config.abCycle) {\n const c = config.abCycle\n const _end = c.end > player.duration ? player.duration : c.end\n if (player.currentTime >= _end) {\n if (!c.loop) {\n player.pause()\n this.emit('abCycle_ended')\n }\n player.currentTime = c.start || 0\n } else if (player.currentTime < c.start) {\n player.currentTime = c.start || 0\n }\n }\n }\n\n _nextCompute () {\n if (this.disable) {\n return\n }\n switch (this.mode) {\n case PLAY_MODES.SLOOP:\n case PLAY_MODES.ORDER:\n case PLAY_MODES.LOOP:\n if (this.index + 1 < this.list.length) {\n this.nextIndex = this.index + 1\n } else {\n this.nextIndex = 0\n }\n break\n default:\n this.nextIndex = _randomIndex(0, this.list.length, this.index)\n break\n }\n }\n\n _prevCompute () {\n if (this.disable) {\n return\n }\n switch (this.mode) {\n case PLAY_MODES.SLOOP:\n case PLAY_MODES.ORDER:\n case PLAY_MODES.LOOP:\n if (this.index - 1 >= 0) {\n this.prevIndex = this.index - 1\n } else {\n this.prevIndex = this.list.length - 1\n }\n break\n default:\n this.prevIndex = _randomIndex(0, this.list.length, this.index)\n break\n }\n }\n\n _emitChange () {\n this.emit('change', this._curInfo)\n }\n\n _initABCycle (abCycle, player) {\n const _p = player.plugins.progresspreview\n if (abCycle && player) {\n const _end = abCycle.end > this.player.duration ? this.player.duration : abCycle.end\n const _start = abCycle.start > this.player.duration ? 0 : abCycle.start\n const dot = {\n id: player.playerId, // 标记唯一标识,用于删除的时候索引\n time: abCycle.start, // 进度条在此时间戳打点 单位为s\n duration: _end - _start, // 进度条标识点的时长 默认1s【可选】单位为s\n text: abCycle.text, // 打点处的自定义文案\n color: abCycle.color // 进度条标识点的显示颜色【可选】\n }\n _p.findDot(dot.id) ? _p.updateDot(dot) : _p.createDot(dot)\n } else {\n _p.findDot(player.playerId) ? _p.deleteDot(player.playerId) : ''\n }\n }\n\n /**\n * @desc Get a random one from the playlist\n * @returns { IMusicListItem | null }\n */\n random () {\n if (this.list.length < 0) {\n return null\n }\n const _i = _randomIndex(0, this.list.length, this.index)\n return this.list[_i]\n }\n\n /**\n * @desc play next item in playlist\n * @returns\n */\n next () {\n if (this.disable) {\n return\n }\n if (!this.halfPass) {\n this.halfPass = true\n this._nextCompute()\n }\n this.index = this.nextIndex\n this.change()\n }\n\n /**\n * @desc play previous item in playlist\n * @returns\n */\n prev () {\n if (this.disable) {\n return\n }\n if (!this.halfPass) {\n this.halfPass = true\n this._prevCompute()\n }\n this.index = this.prevIndex\n this.change()\n }\n\n /**\n * @desc fast forward play,\n */\n forward () {\n const { player } = this\n const { timeScale } = this.config\n // console.log(`music go forward ${timeScale}s`)\n player.currentTime = player.currentTime + timeScale < player.duration ? player.currentTime + timeScale : player.duration - 0.1\n }\n\n /**\n * @desc rewind playback\n */\n backward () {\n const { player } = this\n const { timeScale } = this.config\n // console.log(`music go backward ${timeScale}s`)\n player.currentTime = player.currentTime - timeScale > 0 ? player.currentTime - timeScale : 0\n }\n\n /**\n * @desc Add list item to the list\n * @param { IMusicListItem } meta\n */\n add (meta) {\n this.list.push({\n src: meta.src,\n title: meta.title,\n vid: meta.vid,\n poster: meta.poster\n })\n }\n\n /**\n * @desc Remove list item from the list\n * @param { string } vid\n */\n remove (vid) {\n let idx = -1\n this.list.every((item, index) => {\n if (item.vid === vid) {\n idx = index\n return false\n } else {\n return true\n }\n })\n if (idx > -1) {\n this.list.splice(idx, 1)\n }\n }\n\n /**\n * @desc set abCycle config\n * @param { number | IABCycle } start\n * @param { number } [end]\n * @param { boolean } [loop]\n * @param {{ [propName: string]: any }} [ext]\n */\n setAbCycle (start, end, loop, ext = {}) {\n if (start && Util.typeof(start) === 'Object') {\n this.config.abCycle = {\n ...start\n }\n } else {\n this.config.abCycle = {\n start: start || 0,\n end: end || this.player.duration,\n loop,\n ...ext\n }\n }\n this._initABCycle( this.config.abCycle, this.player)\n }\n\n /**\n * @desc remove abCycle config\n */\n removeAbCycle () {\n this.config.abCycle = null\n this._initABCycle(null, this.player)\n }\n\n /**\n * @desc update the playList\n * @param { Array } list\n */\n updateList (list = []) {\n this.removeAbCycle()\n this.player.pause()\n this.player.currentTime = 0\n this.list = list\n this.nextIndex = 0\n this.index = 0\n this.change()\n }\n\n /**\n * @desc set play index\n * @param { number } index\n */\n setIndex (index = 0) {\n if (index < 0 || index >= this.list.length) {\n return\n }\n this.nextIndex = index\n this.index = index\n this.change()\n }\n\n change () {\n if (this.disable) {\n return\n }\n const { player, list, index } = this\n const offlineVid = list[index].vid\n this.halfPass = false\n this.checkOffline(list[index].src, offlineVid).then(data => {\n this._curInfo = {\n title: this.list[this.index].title || '',\n vid: this.list[this.index].vid,\n poster: this.list[this.index].poster || '',\n src: data.url\n }\n\n player.playNext({\n url: data.url,\n vid: this.list[this.index].vid || 0,\n poster: this.list[this.index].poster || '',\n autoplay: true\n })\n player.off('timeupdate', this._emitChange)\n player.once('timeupdate', this._emitChange)\n player.play()\n })\n }\n\n /**\n * 检查当前播放音频是否有本地缓存\n * @param { string } url\n * @param { string | number } offlineVid\n * @returns\n */\n checkOffline (url, offlineVid) {\n return new Promise((resolve, reject) => {\n if (!this.config.offline || this.disable) {\n resolve({\n url,\n code: -1,\n vid: offlineVid\n })\n }\n const { database } = this.player\n database.openDB(() => {\n database.getDataByKey(database.myDB.ojstore.name, offlineVid, result => {\n setTimeout(() => {\n database.closeDB()\n }, 5000)\n if (result) {\n resolve({ url: URL.createObjectURL(result.blob), code: 0, vid: result.vid})\n } else {\n resolve({\n url,\n code: -2,\n vid: offlineVid\n })\n }\n })\n })\n })\n }\n\n confirmOrder () {\n this.halfPass = true\n this._nextCompute()\n this._prevCompute()\n if (this.config.preloadNext) {\n this.preload(this.nextIndex)\n }\n }\n\n preload (index) {\n if (index < 0 || index >= this.list.length) {\n return\n }\n const _item = this.list[index]\n const { player } = this\n this.checkOffline(_item.src, _item.vid).then(data => {\n if (data.code === -2) {\n const offlineVid = _item.vid\n new Xhr(_item.src, res => {\n player.database.openDB(() => {\n player.database.addData(player.database.myDB.ojstore.name, [{ vid: offlineVid, blob: new Blob([res], {type: 'audio/mp4; codecs=\"mp4a.40.5\"'}) }])\n setTimeout(() => {\n player.database.closeDB()\n }, 5000)\n })\n })\n }\n })\n }\n\n /**\n * @type { number }\n * @description forward or backward time scale\n */\n get timeScale () {\n return this.config.timeScale || 15\n }\n\n set timeScale (scale) {\n this.config.timeScale = scale\n }\n\n /**\n * @type { 'order' | 'sloop' | 'loop' | 'random' }\n * @description set current play mode\n */\n get mode () {\n return this.config.mode || PLAY_MODES.RANDOM\n }\n\n set mode (val) {\n this.config.mode = val\n }\n}\n","import { Plugin } from 'xgplayer'\n\nexport class MusicCover extends Plugin {\n static get pluginName () {\n return 'musiccover'\n }\n\n static get defaultConfig () {\n return {\n index: 6,\n position: Plugin.POSITIONS.CONTROLS_LEFT\n }\n }\n\n afterCreate () {\n this.on('change', item => {\n if (item && item.poster) {\n if (this.find('img')) {\n this.find('img').src = item.poster\n } else {\n const _img = new Image()\n _img.src = item.poster\n this.appendChild(_img)\n }\n this.find('img').src = item.poster\n this.show()\n } else {\n this.hide()\n }\n })\n\n if (this.playerConfig.poster) {\n const _img = new Image()\n _img.src = this.playerConfig.poster\n this.appendChild(_img)\n }\n }\n\n render () {\n return ''\n }\n}\n","import { Plugin } from 'xgplayer'\n\nexport class MusicBackward extends Plugin {\n static get pluginName () {\n return 'musicbackword'\n }\n\n static get defaultConfig () {\n return {\n index: 1,\n position: Plugin.POSITIONS.CONTROLS_LEFT\n }\n }\n\n onClick = (e) => {\n const { player } = this\n e.preventDefault()\n e.stopPropagation()\n player.plugins.music.backward()\n }\n\n afterCreate () {\n this.initIcons()\n const ev = ['click', 'touchstart']\n ev.forEach(item => {\n this.bind(item, this.onClick)\n })\n }\n\n registerIcons () {\n return {\n musicBackward: {\n icon: `\n \n `,\n class: 'xg-icon-mbackward'\n }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.musicBackward)\n }\n\n destroy () {\n const ev = ['click', 'touchstart']\n ev.forEach(item => {\n this.unbind(item, this.onClick)\n })\n }\n\n render () {\n return `\n
\n
\n
`\n }\n}\n","import { Plugin } from 'xgplayer'\n\nexport class MusicPrev extends Plugin {\n static get pluginName () {\n return 'musicprev'\n }\n\n static get defaultConfig () {\n return {\n index: 2,\n position: Plugin.POSITIONS.CONTROLS_LEFT\n }\n }\n\n onClick = (e) => {\n const { player } = this\n e.preventDefault()\n e.stopPropagation()\n player.plugins.music.prev()\n }\n\n afterCreate () {\n this.initIcons()\n const ev = ['click', 'touchstart']\n ev.forEach(item => {\n this.bind(item, this.onClick)\n })\n }\n\n registerIcons () {\n return {\n musicPrev: {\n icon: ` \n \n `,\n class: 'xg-icon-mprev'\n }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.musicPrev)\n }\n\n destroy () {\n const ev = ['click', 'touchstart']\n ev.forEach(item => {\n this.unbind(item, this.onClick)\n })\n }\n\n render () {\n return `\n
\n
\n
`\n }\n}\n","import { Plugin } from 'xgplayer'\n\nexport class MusicForward extends Plugin {\n static get pluginName () {\n return 'musicforward'\n }\n\n static get defaultConfig () {\n return {\n index: 5,\n position: Plugin.POSITIONS.CONTROLS_LEFT\n }\n }\n\n onClick = (e) => {\n const { player } = this\n e.preventDefault()\n e.stopPropagation()\n player.plugins.music.forward()\n }\n\n afterCreate () {\n this.initIcons()\n const ev = ['click', 'touchstart']\n ev.forEach(item => {\n this.bind(item, this.onClick)\n })\n }\n\n registerIcons () {\n return {\n musicForward: {\n icon: `\n \n `,\n class: 'xg-icon-mforward'\n }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.musicForward)\n }\n\n destroy () {\n const ev = ['click', 'touchstart']\n ev.forEach(item => {\n this.unbind(item, this.onClick)\n })\n }\n\n render () {\n return `\n
\n
\n
`\n }\n}\n","import { Plugin } from 'xgplayer'\n\nexport class MusicNext extends Plugin {\n static get pluginName () {\n return 'musicnext'\n }\n\n static get defaultConfig () {\n return {\n index: 4,\n position: Plugin.POSITIONS.CONTROLS_LEFT\n }\n }\n\n onClick = (e) => {\n const { player } = this\n e.preventDefault()\n e.stopPropagation()\n player.plugins.music.next()\n }\n\n afterCreate () {\n this.initIcons()\n const ev = ['click', 'touchstart']\n ev.forEach(item => {\n this.bind(item, this.onClick)\n })\n }\n\n registerIcons () {\n return {\n musicNext: {\n icon: ` \n \n `,\n class: 'xg-icon-mnext'\n }\n }\n }\n\n initIcons () {\n const { icons } = this\n this.appendChild('.xgplayer-icon', icons.musicNext)\n }\n\n destroy () {\n const ev = ['click', 'touchstart']\n ev.forEach(item => {\n this.unbind(item, this.onClick)\n })\n }\n\n render () {\n return `\n
\n
\n
`\n }\n}\n","import { Plugin } from 'xgplayer'\n\nexport class MusicMeta extends Plugin {\n static get pluginName () {\n return 'musicmeta'\n }\n\n static get defaultConfig () {\n return {\n index: 0\n }\n }\n\n beforeCreate (args) {\n const progress = args.player.plugins.progress\n if (progress) {\n args.root = progress.root\n }\n }\n\n afterCreate () {\n this.on('change', item => {\n if (item && item.title) {\n this.root.innerHTML = `${item.title}`\n } else {\n this.root.innerHTML = ''\n }\n })\n }\n\n render () {\n const { playerConfig } = this\n return `\n ${playerConfig.title || ''}\n `\n }\n}\n","import { Util } from 'xgplayer'\nimport Music from './music'\nimport { MusicCover } from './plugins/musicCover'\nimport { MusicBackward } from './plugins/musicBackward'\nimport { MusicPrev } from './plugins/musicPrev'\nimport { MusicForward } from './plugins/musicForward'\nimport { MusicNext } from './plugins/musicNext'\nimport { MusicMeta } from './plugins/musicMeta'\nimport './plugins/index.scss'\n\nfunction initMusicConfig (playerConfig) {\n if (Util.typeOf(playerConfig.controls) !== 'Object') {\n playerConfig.controls = {\n mode: 'flex',\n initShow: true\n }\n } else {\n const _c = playerConfig.controls\n playerConfig.controls = {\n mode: 'flex',\n initShow: true,\n ..._c\n }\n }\n const _p = playerConfig.play || {}\n playerConfig.play = {\n index: 3,\n ..._p\n }\n playerConfig.marginControls = true\n playerConfig.mediaType = 'audio'\n}\nexport default class MusicPreset {\n constructor (options, playerConfig) {\n console.log('config', options, playerConfig)\n console.log('playerConfig', Util.typeOf(playerConfig.controls) !== 'Object')\n initMusicConfig(playerConfig)\n this.plugins = [\n Music,\n // Progress,\n // {\n // plugin: PlayIcon,\n // options: {\n // config: {\n // index: 3\n // }\n // }\n // },\n MusicBackward,\n MusicPrev,\n MusicForward,\n MusicNext,\n // {\n // plugin: TimeIcon,\n // options: {\n // index: 0,\n // config: {\n // position: TimeIcon.POSITIONS.CONTROLS_RIGTH\n // }\n // }\n // },\n // Volume,\n MusicCover,\n MusicMeta]\n this.ignores = ['start', 'cssFullScreen', 'fullscreen', 'pip', 'enter', 'replay', 'pc', 'loading', 'poster']\n }\n}\n","function __toRadians__ (degree) {\n return (degree * Math.PI) / 180\n}\n\nfunction __rotatePoint__ ([pointX, pointY], [originX, originY], degree) {\n // clockwise\n const angle = __toRadians__(degree)\n const rotatedX = Math.cos(angle) * (pointX - originX) - Math.sin(angle) * (pointY - originY) + originX\n const rotatedY = Math.sin(angle) * (pointX - originX) + Math.cos(angle) * (pointY - originY) + originY\n\n return [rotatedX, rotatedY]\n}\n\nexport function genLinear (ctx, size, colors, top) {\n const rtv = ctx.createLinearGradient(0, 0, top ? 0 : size, top ? size : 0)\n for (let i = 0; i < colors.length;) {\n rtv.addColorStop(colors[i++], colors[i++])\n }\n return rtv\n}\n\n/**\n * 根据颜色构建渐变色\n * @param {*} ctx\n * @param {*} w\n * @param {*} colors\n * @returns\n */\nexport function getGradient (ctx, w, colors) {\n const gradient = ctx.createLinearGradient(0, 0, w, 0)\n const len = colors.length\n const per = 100 / len\n for (let i = 0; i < colors.length; i++) {\n gradient.addColorStop(per * i / 100, colors[i])\n }\n return gradient\n}\n\nexport function shrink (data, count) {\n if (!count || count < 1) {\n count = data.length * count\n }\n\n const rtn = []\n const splitAt = Math.floor(data.length / count)\n\n for (let i = 1; i <= count; i++) {\n const arraySection = data.slice(i * splitAt, (i * splitAt) + splitAt)\n const middle = arraySection[Math.floor(arraySection.length / 2)]\n rtn.push(middle)\n }\n\n return rtn\n}\n\nexport function scale (data, max) {\n let scalePercent = max / 255\n if (max <= 3 && max >= 0) scalePercent = max\n const rtn = data.map(value => value * scalePercent)\n return rtn\n}\n\nexport function split (data, count) {\n const size = Math.floor(data.length / count)\n const rtn = []\n let temp = []\n\n let track = 0\n for (let i = 0; i <= size * count; i++) {\n if (track === size) {\n rtn.push(temp)\n temp = []\n track = 0\n }\n\n temp.push(data[i])\n track++\n }\n\n return rtn\n}\n\nexport function getPoints (shape = 'line', size, [originX, originY], pointCount, endPoints, options = {}) {\n const { offset = 0, rotate = 0, customOrigin = [] } = options\n const rtn = {\n start: [],\n end: []\n }\n if (shape === 'line') {\n const increment = size / pointCount\n\n originX = customOrigin[0] || originX\n originY = customOrigin[1] || originY\n\n for (let i = 0; i <= pointCount; i++) {\n const degree = rotate\n const pointOffset = endPoints[i] * (offset / 100)\n\n const startingPoint = __rotatePoint__([originX + (i * increment), originY - pointOffset],\n [originX, originY], degree)\n rtn.start.push(startingPoint)\n\n const endingPoint = __rotatePoint__([originX + (i * increment), (originY + endPoints[i]) - pointOffset],\n [originX, originY], degree)\n rtn.end.push(endingPoint)\n }\n\n return rtn\n }\n}\n","import { split, scale, shrink } from './helper'\n\nfunction drawPath (ctx, dataArray, options, bufferLen) {\n const { w, linear, reverse, offset } = options\n ctx.save()\n ctx.beginPath()\n const sliceWidth = w * 1 / bufferLen\n ctx.strokeStyle = linear\n let x = 0\n let y = 0\n for (let i = 0; i < bufferLen; i++) {\n y = reverse ? 0 - dataArray[i] : dataArray[i]\n y = offset - y\n if (i === 0) {\n ctx.moveTo(x, y)\n } else {\n ctx.lineTo(x, y)\n }\n x += sliceWidth\n }\n ctx.lineTo(w, y)\n ctx.stroke()\n}\nexport default (context) => {\n const { options, ctx, h, w } = context\n let data = context.data\n const { colors } = options\n data = shrink(data, 2048)\n data = scale(data, h / 2)\n data = split(data, 4).slice(0, 3)\n\n ctx.clearRect(0, 0, w, h)\n ctx.fillStyle = options.bgColor\n ctx.fillRect(0, 0, w, h)\n for (let i = 0; i < data.length; i++) {\n drawPath(ctx, data[i], {\n linear: colors[i],\n w,\n h,\n offset: h / 2,\n reverse: false\n }, data[i].length)\n drawPath(ctx, data[i], {\n linear: colors[i],\n w,\n h,\n offset: h / 2,\n reverse: true\n }, data[i].length)\n }\n}\n","import drawBars from './drawBars'\nimport drawVertLines from './drawVertlines'\nimport drawLightning from './drawLightning'\nimport drawDoubleline from './drawDoubleline'\nimport drawDoubleBars from './drawDoubleBars'\nimport drawWaves from './drawWaves'\n\nconst modeMap = {\n bars: drawBars,\n vertLines: drawVertLines, // 数显\n lightning: drawLightning,\n doubleLine: drawDoubleline,\n doubleBars: drawDoubleBars,\n waves: drawWaves\n}\nconst frameRateMap = {\n bars: 2,\n vertLines: 1,\n lightning: 2,\n doubleLine: 1,\n doubleBars: 2,\n waves: 2\n}\n\nconst MODES = {\n BARS: 'bars',\n VERT_LINES: 'vertLines',\n LIGHTNING: 'lightning',\n DOUBLE_LINE: 'doubleLine',\n DOUBLE_BARS: 'doubleBars',\n WAVES: 'waves'\n}\n\nfunction render (data, canvas, options = {}, frame) {\n if (!canvas) {\n return\n }\n options = { ...options }\n if (!options.stroke) options.stroke = 1\n if (!options.colors) options.colors = ['#ff8177', '#cf556c', '#f99185', '#b12a5b']\n\n const ctx = canvas.getContext('2d')\n const h = canvas.height\n const w = canvas.width\n\n ctx.strokeStyle = options.colors[0]\n ctx.lineWidth = options.stroke\n\n const context = {\n data, options, ctx, h, w\n }\n if (typeof options.mode === 'string') options.mode = [options.mode]\n options.mode.forEach(mode => {\n // abide by the frame rate\n if (frame % frameRateMap[mode] === 0) {\n // clear canvas\n ctx.clearRect(0, 0, w, h)\n ctx.beginPath()\n\n modeMap[mode](context)\n }\n })\n}\n\nexport {\n render as default,\n MODES\n}\n","export default (context) => {\n const { data, options, ctx, h, w } = context\n const count = data.length > options.count ? options.count : data.length\n const percent = parseInt(h / 255 * 2, 10)\n ctx.clearRect(0, 0, w, h)\n ctx.fillStyle = options.bgColor\n ctx.fillRect(0, 0, w, h)\n const step = w / count\n const barWidth = step - step / 4\n let barHeight\n let x = 0\n const gradient = options.linear\n for (let i = 0; i < count; i++) {\n barHeight = data[i]\n ctx.fillStyle = gradient\n ctx.fillRect(x, h - barHeight, barWidth, barHeight * percent + h / 2)\n x += step\n }\n}\n","export default (context) => {\n const { data, options, ctx, h, w } = context\n let count = options.count || 128\n if (data.length < count) {\n count = data.length\n }\n const percent = h / 255\n const increase = w / count\n const gradient = options.linear\n ctx.clearRect(0, 0, w, h)\n ctx.fillStyle = options.bgColor\n ctx.fillRect(0, 0, w, h)\n for (let point = 1; point <= count; point++) {\n let p = data[point] // get value\n p *= percent\n\n const x = increase * point\n\n ctx.moveTo(x, h)\n ctx.lineTo(x, h - p)\n\n ctx.strokeStyle = gradient\n ctx.stroke()\n ctx.beginPath()\n }\n}\n","export default (context) => {\n const { data, options, ctx, h, w } = context\n const bufferLen = data.length > options.count ? options.count : data.length\n ctx.clearRect(0, 0, w, h)\n ctx.fillStyle = options.bgColor\n ctx.fillRect(0, 0, w, h)\n ctx.beginPath()\n const gradient = options.linear\n ctx.strokeStyle = gradient// options.colors[0]\n const sliceWidth = w / bufferLen\n let x = 0\n for (let i = 0; i < bufferLen; i++) {\n const v = data[i] / 128.0\n const y = v * h / 2\n if (i === 0) {\n ctx.moveTo(x, y)\n } else {\n ctx.lineTo(x, y)\n }\n x += sliceWidth\n }\n ctx.lineTo(w, h / 2)\n ctx.stroke()\n}\n","export default (context) => {\r\n const { data, options, ctx, h, w } = context\r\n\r\n const percent = h / 255\r\n const increase = w / 128\r\n const count = options.count || 128\r\n const min = 5\r\n // const breakpoint = Math.floor(count / options.colors.length)\r\n\r\n ctx.clearRect(0, 0, w, h)\r\n ctx.fillStyle = options.bgColor\r\n ctx.fillRect(0, 0, w, h)\r\n const gradient = options.linear\r\n for (let point = 1; point <= count; point++) {\r\n let p = data[point] // get value\r\n p += min\r\n p *= percent\r\n\r\n const x = increase * point\r\n\r\n const mid = (h / 2) + (p / 2)\r\n\r\n ctx.moveTo(x, mid)\r\n ctx.lineTo(x, mid - p)\r\n ctx.strokeStyle = gradient\r\n ctx.stroke()\r\n ctx.beginPath()\r\n // if (point % breakpoint === 0) {\r\n // const i = (point / breakpoint) - 1\r\n // ctx.strokeStyle = options.colors[i]\r\n // ctx.stroke()\r\n // ctx.beginPath()\r\n // }\r\n }\r\n}\r\n","export default (context) => {\r\n const { data, options, ctx, h, w } = context\r\n const count = data.length > options.count ? options.count : data.length\r\n const percent = h / 255\r\n ctx.clearRect(0, 0, w, h)\r\n ctx.fillStyle = options.bgColor\r\n ctx.fillRect(0, 0, w, h)\r\n const step = w / count\r\n const barWidth = step - step / 4\r\n let barHeight\r\n let x = 0\r\n const gradient = options.linear\r\n for (let i = 0; i < count; i++) {\r\n barHeight = data[i] * percent\r\n ctx.fillStyle = gradient\r\n ctx.fillRect(x, h / 2 + barHeight / 2, barWidth, -(barHeight))\r\n x += step\r\n }\r\n}\r\n","\nimport render, { MODES } from './render'\nimport { getGradient } from './helper'\n\n/**\n * @typedef {{\n * fftSize?: number,\n * mode?: 'bars' | 'vertLines' | 'lightning' | 'doubleLine' | 'doubleBars' | 'waves',\n * colors?: Array,\n * stroke?: number,\n * bgColor?: string,\n * isGradient?: boolean\n * }} IAnalyzeOptions\n */\nclass Analyze {\n static get defaultConfig () {\n return {\n fftSize: 16384,\n count: 1024,\n mode: 'bars',\n colors: ['#ff8177', '#cf556c', '#f99185', '#b12a5b'],\n stroke: 2,\n bgColor: '#000',\n isGradient: true,\n linear: null\n }\n }\n\n /**\n * all modes\n * @type Array\n */\n static get MODES () {\n return MODES\n }\n\n static get AudioCtx () {\n return window.AudioContext || window.webkitAudioContext\n }\n\n /**\n * @constructor\n * @param { any } player\n * @param { HTMLElement } canvas\n * @param { IAnalyzeOptions } options\n * @returns\n */\n constructor (player, canvas, options = {}) {\n this.canvas = canvas\n const { width, height } = this.canvas.getBoundingClientRect()\n this.canvas.width = width * 2\n this.canvas.height = height * 2\n this.player = player\n this.options = Analyze.defaultConfig\n Object.keys(options).map(key => {\n this.options[key] = options[key]\n })\n\n if (!Analyze.AudioCtx) {\n return\n }\n if (player.audioCtx) {\n this._audioCtx = player.audioCtx\n } else {\n this._audioCtx = new Analyze.AudioCtx()\n }\n this.analyser = this._audioCtx.createAnalyser()\n const gainNode = this._audioCtx.createGain()\n gainNode.gain.setValueAtTime(player.volume, player.currentTime)\n this.gainNode = gainNode\n this.source = this._audioCtx.createMediaElementSource(player.video)\n this.ctx = canvas.getContext('2d')\n this.source.connect(this.analyser)\n this.analyser.connect(gainNode)\n this.fftSize = this.options.fftSize\n this.frameCount = 0\n\n if (this.options.isGradient) {\n this.options.linear = getGradient(this.ctx, canvas.width, this.options.colors)\n }\n gainNode.connect(this._audioCtx.destination)\n this._initPlayerEvents()\n }\n\n /**\n * @private\n */\n _initPlayerEvents () {\n ['play', 'playing', 'seeked'].forEach(name => {\n this.player.on(name, this.start)\n })\n // ['seeking', 'waiting', 'pause', 'ended'].forEach(name => {\n // this.player.on(name, this.stop)\n // })\n this.player.on('volumechange', this._onoVolumechange)\n this.player.on('destroy', this._onDestroy)\n }\n\n start = () => {\n if (this.reqId) {\n return\n }\n this._renderFrame()\n }\n\n stop = () => {\n cancelAnimationFrame(this.reqId)\n this.reqId = null\n }\n\n destroy () {\n this.stop();\n ['play', 'playing', 'seeked'].forEach(name => {\n this.player.off(name, this.start)\n })\n this.player.off('volumechange', this._onoVolumechange)\n this.player.off('destroy', this._onDestroy)\n this._audioCtx.close()\n }\n\n /**\n * @private\n */\n _onDestroy = () => {\n this._audioCtx.close()\n }\n\n /**\n * @private\n */\n _onoVolumechange = () => {\n console.log('onoVolumechange')\n this.gainNode.gain.setValueAtTime(this.player.volume, this.player.currentTime)\n }\n\n /**\n * @private\n */\n _renderFrame = () => {\n if (this.reqId) {\n cancelAnimationFrame(this.reqId)\n }\n this.reqId = requestAnimationFrame(this._renderFrame)\n this.frameCount++\n this.mode === 'lightning' ? this.analyser.getByteTimeDomainData(this.dataArray) : this.analyser.getByteFrequencyData(this.dataArray)\n render.call(this, this.dataArray, this.canvas, this.options, this.frameCount)\n }\n\n /**\n * @type { string }\n */\n set mode (val) {\n // let flag = false\n // for (let i = 0; i < MODES.length; i++) {\n // if (val === MODES[i]) {\n // flag = true\n // break\n // }\n // }\n this.options.mode = val\n }\n\n get mode () {\n return this.options.mode\n }\n\n /**\n * @type { number }\n */\n set fftSize (val) {\n this.analyser.fftSize = val\n const bufferLen = this.analyser.frequencyBinCount\n this.dataArray = new Uint8Array(bufferLen)\n }\n\n get fftSize () {\n return this.analyser.frequencyBinCount * 2\n }\n}\n\nexport {\n Analyze as default,\n MODES\n}\n","import { Util } from 'xgplayer'\n\nclass LyricTime {\n constructor (timeTxt) {\n // eslint-disable-next-line no-lookahead-lookbehind-regexp/no-lookahead-lookbehind-regexp\n this.regRule = /(\\d{2}(?=:)):(\\d{2}(?=\\.))\\.(\\d{2,3})/g\n if (this.regRule.test(timeTxt)) {\n this.time = RegExp.$1 * 60 + RegExp.$2 * 1 + ('0.' + RegExp.$3) * 1\n } else {\n this.time = -1\n }\n }\n}\n\nexport { LyricTime }\n\nclass Lyric {\n constructor (txts, dom) {\n this.rawTxts = txts\n this.txts = txts.map((item) => { return item.replace(/^[\\r\\n]|[\\r\\n]$/g, '').match(/(\\[.*\\])[^[]+/g) })\n this.isDynamics = txts.map((item, idx) => {\n return [].concat(item.match(/\\[\\d{2}:\\d{2}\\.\\d{2,3}\\]/g)).length === this.txts[idx].length && this.txts[idx].length === this.txts[0].length && this.txts[idx].length > 1\n })\n this.isDynamic = this.isDynamics.some((item) => {\n return item\n })\n this.__ainimateInterval__ = 0\n this.__offset__ = 0\n this.__offsetScale__ = 0.5\n this.dom = dom\n this.lists = []\n this.isDynamics.map((item, idx) => {\n if (item) {\n this.lists.push(\n this.txts[idx].map((txt, index) => {\n const reg = /(\\[[\\d:\\S]+\\])([^[]+)/g.test(txt)\n const time = RegExp.$1\n const lyric = RegExp.$2\n return {\n time: reg ? new LyricTime(time).time : -1,\n lyric,\n idx: index\n }\n })\n )\n }\n })\n this.list = this.lists.reduce((pre, cur) => {\n return pre.map((item, idx) => {\n return {\n time: item.time,\n lyric: item.lyric === '\\n' ? `${item.lyric}${cur[idx].lyric}` : `${item.lyric}
${cur[idx].lyric}`,\n idx\n }\n })\n })\n this.line = 0\n }\n\n set interval (val) {\n this.__ainimateInterval__ = val\n }\n\n get interval () {\n return this.__ainimateInterval__\n }\n\n set offset (val) {\n this.__offset__ = val\n }\n\n get offset () {\n return this.__offset__\n }\n\n set offsetScale (val) {\n this.__offsetScale__ = val\n }\n\n get offsetScale () {\n return this.__offsetScale__\n }\n\n adjust () {\n const list = this.list\n for (let i = 0, j, k, len = list.length; i < len; i++) {\n for (j = i + 1; j < len; j++) {\n if (list[j].time > list[i].time) {\n break\n }\n }\n if (j < len) {\n const sep = (list[j].time - list[i].time) / (j - i)\n for (k = i + 1; k < j; k++) {\n list[k].time = list[k - 1].time + sep\n }\n }\n }\n }\n\n find (curTime) {\n const list = this.list\n const interval = this.__ainimateInterval__\n const offset = this.__offset__\n curTime = curTime + offset > 0 ? curTime + offset : 0\n return list.filter(({ time }, idx) => {\n const idxy = idx + 1\n return curTime >= time && ((list[idxy] && curTime * 1 + interval * 1 <= list[idxy].time) || (idxy >= list.length))\n })\n }\n\n bind (player) {\n const self = this\n this.__player__ = player\n if (self.isDynamic) {\n self.__handle__ = (() => {\n const f = this.find(player.currentTime)[0]\n if (f && f.idx !== this.line) {\n this.line = f.idx\n player.emit('lyricUpdate', f)\n }\n }).bind(self, player)\n player.on('timeupdate', self.__handle__)\n\n self.__startHandle__ = (() => {\n player.emit('lyricUpdate', self.list[0])\n }).bind(self, player)\n player.once('playing', self.__startHandle__)\n //\n // self.__endHandle__ = (() => {\n // player.emit('lyricUpdate', self.list[self.list.length - 1])\n // }).bind(self, player)\n // player.on('ended', self.__endHandle__)\n return true\n } else {\n return false\n }\n }\n\n unbind (player) {\n delete this.__player__\n if (this.__handle__) {\n player.off('lyricUpdate', this.__handle__)\n delete this.__handle__\n }\n }\n\n show () {\n const dom = this.dom\n const lyrbicTxts = []\n const self = this\n const ev = ['click', 'touchstart']\n if (dom && dom.nodeType === 1) {\n const lrcWrap = Util.createDom('div', '
', {}, 'xgplayer-lrcWrap')\n dom.appendChild(lrcWrap)\n this.list.forEach(item => {\n lyrbicTxts.push(`${item.lyric.replace(/[\\r\\n]/g, '')}`)\n })\n lrcWrap.innerHTML = lyrbicTxts.join('')\n const lrcForward = Util.createDom('xg-lrcForward', '
', {}, 'xgplayer-lrcForward')\n dom.appendChild(lrcForward)\n ev.forEach(item => {\n lrcForward.addEventListener(item, function (e) {\n e.preventDefault()\n e.stopPropagation()\n self.offset -= self.offsetScale\n console.log(`lyric go forward ${self.offsetScale}s`)\n }, false)\n })\n\n const lrcBack = Util.createDom('xg-lrcBack', '
', {}, 'xgplayer-lrcBack')\n dom.appendChild(lrcBack)\n ev.forEach(item => {\n lrcBack.addEventListener(item, function (e) {\n e.preventDefault()\n e.stopPropagation()\n self.offset += self.offsetScale\n console.log(`lyric go back ${self.offsetScale}s`)\n }, false)\n })\n this.__updateHandle__ = (item) => {\n const domWrap = this.dom.querySelector('.xgplayer-lrcWrap')\n let activeDom = domWrap.querySelector('.xgplayer-lyric-item-active')\n const offsetHeight = domWrap.offsetHeight\n let activeTop\n if (activeDom) {\n activeDom.className = 'xgplayer-lyric-item'\n }\n activeDom = domWrap.querySelector(`.xgplayer-lyric-item[data-idx=\"${item.idx}\"]`)\n if (activeDom) {\n activeDom.className = 'xgplayer-lyric-item xgplayer-lyric-item-active'\n activeTop = (activeDom.getBoundingClientRect().top - domWrap.getBoundingClientRect().top + domWrap.scrollTop - offsetHeight / 2)\n if (activeTop) {\n domWrap.scrollTop = activeTop\n }\n }\n }\n this.__player__.on('lyricUpdate', this.__updateHandle__)\n } else {\n this.__player__.emit('error', 'lyric container can not be empty')\n }\n }\n\n hide () {\n this.__updateHandle__.off('lyricUpdate', this.__updateHandle__)\n }\n}\n\nexport default Lyric\n","import MusicPreset from './preset'\nimport Analyze from './analyze'\nimport Lyric from './lyric'\nimport Music from './music'\n\nMusicPreset.Analyze = Analyze\nMusicPreset.Lyric = Lyric\nMusicPreset.Music = Music\n\nexport default MusicPreset"],"names":["Xhr","url","callback","_classCallCheck","this","xhr","window","XMLHttpRequest","target","responseType","open","onload","status","Function","response","onerror","e","run","_createClass","key","value","abort","readyState","send","PLAY_MODES","ORDER","SLOOP","LOOP","RANDOM","CLASS_NAME","_randomIndex","min","max","index","i","Math","floor","random","Music","_BasePlugin","_inherits","_super","_createSuper","_this","_len","arguments","length","args","Array","_key","_defineProperty","_assertThisInitialized","call","apply","concat","mode","list","player","pause","currentTime","change","next","abCycle","config","_initABCycle","_assertThisInitialize","halfPass","duration","confirmOrder","c","_end","end","loop","emit","start","playerConfig","Util","addClass","root","nextIndex","prevIndex","history","disable","src","poster","title","vid","_curInfo","on","Events","TIME_UPDATE","_onTimeUpdate","ENDED","_onEnded","DURATION_CHANGE","_onDurationChange","offline","checkOffline","then","data","code","state","catch","removeClass","_p","plugins","progresspreview","_start","dot","id","playerId","time","text","color","findDot","updateDot","createDot","deleteDot","_i","_nextCompute","_prevCompute","timeScale","meta","push","idx","every","item","splice","ext","undefined","typeof","_objectSpread","removeAbCycle","_this2","offlineVid","playNext","autoplay","off","_emitChange","once","play","_this3","Promise","resolve","reject","database","openDB","getDataByKey","myDB","ojstore","name","result","setTimeout","closeDB","URL","createObjectURL","blob","preloadNext","preload","_item","res","addData","Blob","type","get","set","scale","val","Object","keys","map","BasePlugin","MusicCover","_Plugin","find","_img","Image","appendChild","show","hide","position","Plugin","POSITIONS","CONTROLS_LEFT","MusicBackward","preventDefault","stopPropagation","music","backward","initIcons","forEach","bind","onClick","musicBackward","icon","class","icons","unbind","MusicPrev","prev","musicPrev","MusicForward","forward","musicForward","MusicNext","musicNext","MusicMeta","progress","innerHTML","MusicPreset","options","log","typeOf","controls","initShow","_c","marginControls","mediaType","initMusicConfig","ignores","getGradient","ctx","w","colors","gradient","createLinearGradient","per","addColorStop","drawPath","dataArray","bufferLen","linear","reverse","offset","save","beginPath","sliceWidth","strokeStyle","x","y","moveTo","lineTo","stroke","modeMap","bars","context","h","count","percent","parseInt","clearRect","fillStyle","bgColor","fillRect","barHeight","step","barWidth","vertLines","increase","point","p","lightning","v","doubleLine","mid","doubleBars","waves","shrink","rtn","splitAt","arraySection","slice","middle","split","size","temp","track","scalePercent","frameRateMap","MODES","BARS","VERT_LINES","LIGHTNING","DOUBLE_LINE","DOUBLE_BARS","WAVES","render","canvas","frame","getContext","height","width","lineWidth","Analyze","reqId","_renderFrame","cancelAnimationFrame","_audioCtx","close","console","gainNode","gain","setValueAtTime","volume","requestAnimationFrame","frameCount","analyser","getByteTimeDomainData","getByteFrequencyData","_this$canvas$getBound","getBoundingClientRect","defaultConfig","AudioCtx","audioCtx","createAnalyser","createGain","source","createMediaElementSource","video","connect","fftSize","isGradient","destination","_initPlayerEvents","_onoVolumechange","_onDestroy","stop","frequencyBinCount","Uint8Array","AudioContext","webkitAudioContext","LyricTime","timeTxt","regRule","test","RegExp","$1","$2","$3","Lyric","txts","dom","rawTxts","replace","match","isDynamics","isDynamic","some","__ainimateInterval__","__offset__","__offsetScale__","lists","txt","reg","lyric","reduce","pre","cur","line","j","k","len","sep","curTime","interval","filter","_ref","idxy","self","__player__","__handle__","f","__startHandle__","lyrbicTxts","ev","nodeType","lrcWrap","createDom","join","lrcForward","addEventListener","offsetScale","lrcBack","__updateHandle__","activeTop","domWrap","querySelector","activeDom","offsetHeight","className","top","scrollTop"],"mappings":"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"}