UNPKG

videojs-wavesurfer

Version:

video.js plugin that adds a navigable waveform for audio and video files.

934 lines (875 loc) 36.5 kB
/*! * videojs-wavesurfer * @version 3.10.0 * @see https://github.com/collab-project/videojs-wavesurfer * @copyright 2014-2024 Collab * @license MIT */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("video.js"), require("wavesurfer.js")); else if(typeof define === 'function' && define.amd) define("VideojsWavesurfer", ["video.js", "wavesurfer.js"], factory); else if(typeof exports === 'object') exports["VideojsWavesurfer"] = factory(require("video.js"), require("wavesurfer.js")); else root["VideojsWavesurfer"] = factory(root["videojs"], root["WaveSurfer"]); })(self, (__WEBPACK_EXTERNAL_MODULE_video_js__, __WEBPACK_EXTERNAL_MODULE_wavesurfer_js__) => { return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./node_modules/add-zero/index.js": /*!****************************************!*\ !*** ./node_modules/add-zero/index.js ***! \****************************************/ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;(function(exports) { 'use strict'; function addZero(value, digits) { digits = digits || 2; var isNegative = Number(value) < 0; var buffer = value.toString(); var size = 0; // Strip minus sign if number is negative if(isNegative) { buffer = buffer.slice(1); } size = digits - buffer.length + 1; buffer = new Array(size).join('0').concat(buffer); // Adds back minus sign if needed return (isNegative ? '-' : '') + buffer; } if(true) { !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return addZero; }).call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else {} })(this); /***/ }), /***/ "./src/js/defaults.js": /*!****************************!*\ !*** ./src/js/defaults.js ***! \****************************/ /***/ ((module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var pluginDefaultOptions = { debug: false, displayMilliseconds: true }; var _default = exports["default"] = pluginDefaultOptions; module.exports = exports.default; /***/ }), /***/ "./src/js/event.js": /*!*************************!*\ !*** ./src/js/event.js ***! \*************************/ /***/ ((module, exports) => { "use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Event = _createClass(function Event() { _classCallCheck(this, Event); }); Event.READY = 'ready'; Event.ERROR = 'error'; Event.VOLUMECHANGE = 'volumechange'; Event.FULLSCREENCHANGE = 'fullscreenchange'; Event.TIMEUPDATE = 'timeupdate'; Event.ENDED = 'ended'; Event.PAUSE = 'pause'; Event.FINISH = 'finish'; Event.SEEK = 'seek'; Event.REDRAW = 'redraw'; Event.AUDIOPROCESS = 'audioprocess'; Event.DEVICE_READY = 'deviceReady'; Event.DEVICE_ERROR = 'deviceError'; Event.AUDIO_OUTPUT_READY = 'audioOutputReady'; Event.WAVE_READY = 'waveReady'; Event.PLAYBACK_FINISH = 'playbackFinish'; Event.ABORT = 'abort'; Event.RESIZE = 'resize'; Object.freeze(Event); var _default = exports["default"] = Event; module.exports = exports.default; /***/ }), /***/ "./src/js/middleware.js": /*!******************************!*\ !*** ./src/js/middleware.js ***! \******************************/ /***/ ((module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var WavesurferMiddleware = { setSource: function setSource(srcObj, next) { if (this.player.usingPlugin('wavesurfer')) { var backend = this.player.wavesurfer().surfer.params.backend; var src = srcObj.src; var peaks = srcObj.peaks; switch (backend) { case 'WebAudio': this.player.wavesurfer().load(src); break; default: next(null, srcObj); var element = this.player.tech_.el(); if (peaks === undefined) { this.player.wavesurfer().load(element); } else { this.player.wavesurfer().load(element, peaks); } break; } } else { next(null, srcObj); } } }; var _default = exports["default"] = WavesurferMiddleware; module.exports = exports.default; /***/ }), /***/ "./src/js/utils/format-time.js": /*!*************************************!*\ !*** ./src/js/utils/format-time.js ***! \*************************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _addZero = _interopRequireDefault(__webpack_require__(/*! add-zero */ "./node_modules/add-zero/index.js")); var _parseMs = _interopRequireDefault(__webpack_require__(/*! parse-ms */ "./node_modules/parse-ms/index.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var formatTime = function formatTime(seconds, guide) { var displayMilliseconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; seconds = seconds < 0 ? 0 : seconds; if (isNaN(seconds) || seconds === Infinity) { seconds = 0; } var inputTime = (0, _parseMs.default)(seconds * 1000); var guideTime = inputTime; if (guide !== undefined) { guideTime = (0, _parseMs.default)(guide * 1000); } var hr = (0, _addZero.default)(inputTime.hours); var min = (0, _addZero.default)(inputTime.minutes); var sec = (0, _addZero.default)(inputTime.seconds); var ms = (0, _addZero.default)(inputTime.milliseconds, 3); if (inputTime.days > 0 || guideTime.days > 0) { var day = (0, _addZero.default)(inputTime.days); return "".concat(day, ":").concat(hr, ":").concat(min, ":").concat(sec); } if (inputTime.hours > 0 || guideTime.hours > 0) { return "".concat(hr, ":").concat(min, ":").concat(sec); } if (displayMilliseconds) { return "".concat(min, ":").concat(sec, ":").concat(ms); } return "".concat(min, ":").concat(sec); }; var _default = exports["default"] = formatTime; module.exports = exports.default; /***/ }), /***/ "./src/js/utils/log.js": /*!*****************************!*\ !*** ./src/js/utils/log.js ***! \*****************************/ /***/ ((module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _video = _interopRequireDefault(__webpack_require__(/*! video.js */ "video.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ERROR = 'error'; var WARN = 'warn'; var log = function log(args, logType, debug) { if (debug === true) { if (logType === ERROR) { _video.default.log.error(args); } else if (logType === WARN) { _video.default.log.warn(args); } else { _video.default.log(args); } } }; var _default = exports["default"] = log; module.exports = exports.default; /***/ }), /***/ "./node_modules/global/window.js": /*!***************************************!*\ !*** ./node_modules/global/window.js ***! \***************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var win; if (typeof window !== "undefined") { win = window; } else if (typeof __webpack_require__.g !== "undefined") { win = __webpack_require__.g; } else if (typeof self !== "undefined"){ win = self; } else { win = {}; } module.exports = win; /***/ }), /***/ "video.js": /*!*************************************************************************************************!*\ !*** external {"commonjs":"video.js","commonjs2":"video.js","amd":"video.js","root":"videojs"} ***! \*************************************************************************************************/ /***/ ((module) => { "use strict"; module.exports = __WEBPACK_EXTERNAL_MODULE_video_js__; /***/ }), /***/ "wavesurfer.js": /*!*******************************************************************************************************************!*\ !*** external {"commonjs":"wavesurfer.js","commonjs2":"wavesurfer.js","amd":"wavesurfer.js","root":"WaveSurfer"} ***! \*******************************************************************************************************************/ /***/ ((module) => { "use strict"; module.exports = __WEBPACK_EXTERNAL_MODULE_wavesurfer_js__; /***/ }), /***/ "./node_modules/parse-ms/index.js": /*!****************************************!*\ !*** ./node_modules/parse-ms/index.js ***! \****************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ parseMilliseconds) /* harmony export */ }); function parseMilliseconds(milliseconds) { if (typeof milliseconds !== 'number') { throw new TypeError('Expected a number'); } const roundTowardsZero = milliseconds > 0 ? Math.floor : Math.ceil; return { days: roundTowardsZero(milliseconds / 86400000), hours: roundTowardsZero(milliseconds / 3600000) % 24, minutes: roundTowardsZero(milliseconds / 60000) % 60, seconds: roundTowardsZero(milliseconds / 1000) % 60, milliseconds: roundTowardsZero(milliseconds) % 1000, microseconds: roundTowardsZero(milliseconds * 1000) % 1000, nanoseconds: roundTowardsZero(milliseconds * 1e6) % 1000 }; } /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/global */ /******/ (() => { /******/ __webpack_require__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); /******/ } catch (e) { /******/ if (typeof window === 'object') return window; /******/ } /******/ })(); /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be in strict mode. (() => { "use strict"; var exports = __webpack_exports__; /*!**************************************!*\ !*** ./src/js/videojs.wavesurfer.js ***! \**************************************/ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Wavesurfer = void 0; var _event = _interopRequireDefault(__webpack_require__(/*! ./event */ "./src/js/event.js")); var _log2 = _interopRequireDefault(__webpack_require__(/*! ./utils/log */ "./src/js/utils/log.js")); var _formatTime = _interopRequireDefault(__webpack_require__(/*! ./utils/format-time */ "./src/js/utils/format-time.js")); var _defaults = _interopRequireDefault(__webpack_require__(/*! ./defaults */ "./src/js/defaults.js")); var _middleware = _interopRequireDefault(__webpack_require__(/*! ./middleware */ "./src/js/middleware.js")); var _window = _interopRequireDefault(__webpack_require__(/*! global/window */ "./node_modules/global/window.js")); var _video = _interopRequireDefault(__webpack_require__(/*! video.js */ "video.js")); var _wavesurfer = _interopRequireDefault(__webpack_require__(/*! wavesurfer.js */ "wavesurfer.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } var Plugin = _video.default.getPlugin('plugin'); var wavesurferPluginName = 'wavesurfer'; var wavesurferClassName = 'vjs-wavedisplay'; var wavesurferStyleName = 'vjs-wavesurfer'; var WEBAUDIO = 'WebAudio'; var MEDIAELEMENT = 'MediaElement'; var MEDIAELEMENT_WEBAUDIO = 'MediaElementWebAudio'; var Wavesurfer = exports.Wavesurfer = function (_Plugin) { _inherits(Wavesurfer, _Plugin); function Wavesurfer(player, options) { var _this; _classCallCheck(this, Wavesurfer); _this = _callSuper(this, Wavesurfer, [player, options]); player.addClass(wavesurferStyleName); if (_video.default.obj !== undefined) { options = _video.default.obj.merge(_defaults.default, options); } else { options = _video.default.mergeOptions(_defaults.default, options); } _this.waveReady = false; _this.waveFinished = false; _this.liveMode = false; _this.backend = null; _this.debug = options.debug.toString() === 'true'; _this.textTracksEnabled = _this.player.options_.tracks.length > 0; _this.displayMilliseconds = options.displayMilliseconds; if (options.formatTime && typeof options.formatTime === 'function') { _this.setFormatTime(options.formatTime); } else { _this.setFormatTime(function (seconds, guide) { return (0, _formatTime.default)(seconds, guide, _this.displayMilliseconds); }); } _this.player.one(_event.default.READY, _this.initialize.bind(_assertThisInitialized(_this))); return _this; } _createClass(Wavesurfer, [{ key: "initialize", value: function initialize() { var _this2 = this; if (this.player.bigPlayButton !== undefined) { this.player.bigPlayButton.hide(); } var mergedOptions = this.parseOptions(this.player.options_.plugins.wavesurfer); if (this.player.options_.controls === true) { this.player.controlBar.show(); this.player.controlBar.el_.style.display = 'flex'; if (this.backend === WEBAUDIO && this.player.controlBar.progressControl !== undefined) { this.player.controlBar.progressControl.hide(); } if (this.player.controlBar.pictureInPictureToggle !== undefined) { this.player.controlBar.pictureInPictureToggle.hide(); } var uiElements = ['currentTimeDisplay', 'timeDivider', 'durationDisplay']; uiElements.forEach(function (element) { element = _this2.player.controlBar[element]; if (element !== undefined) { element.el_.style.display = 'block'; element.show(); } }); if (this.player.controlBar.remainingTimeDisplay !== undefined) { this.player.controlBar.remainingTimeDisplay.hide(); } if (this.backend === WEBAUDIO && this.player.controlBar.playToggle !== undefined) { this.player.controlBar.playToggle.on(['tap', 'click'], this.onPlayToggle.bind(this)); this.player.controlBar.playToggle.hide(); } } this.surfer = _wavesurfer.default.create(mergedOptions); this.surfer.on(_event.default.ERROR, this.onWaveError.bind(this)); this.surfer.on(_event.default.FINISH, this.onWaveFinish.bind(this)); this.backend = this.surfer.params.backend; this.log('Using wavesurfer.js ' + this.backend + ' backend.'); if ('microphone' in this.player.wavesurfer().surfer.getActivePlugins()) { this.liveMode = true; this.waveReady = true; this.log('wavesurfer.js microphone plugin enabled.'); this.player.controlBar.playToggle.show(); this.surfer.microphone.on(_event.default.DEVICE_ERROR, this.onWaveError.bind(this)); } this.surferReady = this.onWaveReady.bind(this); if (this.backend === WEBAUDIO) { this.surferProgress = this.onWaveProgress.bind(this); this.surferSeek = this.onWaveSeek.bind(this); if (this.player.muted()) { this.setVolume(0); } } if (!this.liveMode) { this.setupPlaybackEvents(true); } this.player.on(_event.default.VOLUMECHANGE, this.onVolumeChange.bind(this)); this.player.on(_event.default.FULLSCREENCHANGE, this.onScreenChange.bind(this)); if (this.player.options_.fluid === true) { this.surfer.drawer.wrapper.className = wavesurferClassName; } } }, { key: "parseOptions", value: function parseOptions() { var surferOpts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var rect = this.player.el_.getBoundingClientRect(); this.originalWidth = this.player.options_.width || rect.width; this.originalHeight = this.player.options_.height || rect.height; var controlBarHeight = this.player.controlBar.height(); if (this.player.options_.controls === true && controlBarHeight === 0) { controlBarHeight = 30; } if (surferOpts.container === undefined) { surferOpts.container = this.player.el_; } if (surferOpts.waveformHeight === undefined) { var playerHeight = rect.height; surferOpts.height = playerHeight - controlBarHeight; } else { surferOpts.height = surferOpts.waveformHeight; } if (surferOpts.splitChannels && surferOpts.splitChannels === true) { surferOpts.height /= 2; } if ('backend' in surferOpts) { this.backend = surferOpts.backend; } else { surferOpts.backend = this.backend = MEDIAELEMENT; } return surferOpts; } }, { key: "setupPlaybackEvents", value: function setupPlaybackEvents(enable) { if (enable === false) { this.surfer.un(_event.default.READY, this.surferReady); if (this.backend === WEBAUDIO) { this.surfer.un(_event.default.AUDIOPROCESS, this.surferProgress); this.surfer.un(_event.default.SEEK, this.surferSeek); } } else if (enable === true) { this.surfer.on(_event.default.READY, this.surferReady); if (this.backend === WEBAUDIO) { this.surfer.on(_event.default.AUDIOPROCESS, this.surferProgress); this.surfer.on(_event.default.SEEK, this.surferSeek); } } } }, { key: "load", value: function load(url, peaks) { if (url instanceof Blob || url instanceof File) { this.log('Loading object: ' + JSON.stringify(url)); this.surfer.loadBlob(url); } else { if (peaks !== undefined) { this.loadPeaks(url, peaks); } else { if (typeof url === 'string') { this.log('Loading URL: ' + url); } else { this.log('Loading element: ' + url); } this.surfer.load(url); } } } }, { key: "loadPeaks", value: function loadPeaks(url, peaks) { var _this3 = this; if (Array.isArray(peaks)) { this.log('Loading URL with array of peaks: ' + url); this.surfer.load(url, peaks); } else { var requestOptions = { url: peaks, responseType: 'json' }; if (this.player.options_.plugins.wavesurfer.xhr !== undefined) { requestOptions.xhr = this.player.options_.plugins.wavesurfer.xhr; } var request = _wavesurfer.default.util.fetchFile(requestOptions); request.once('success', function (data) { _this3.log('Loaded Peak Data URL: ' + peaks); if (data && data.data) { _this3.surfer.load(url, data.data); } else { _this3.player.trigger(_event.default.ERROR, 'Could not load peaks data from ' + peaks); _this3.log(err, 'error'); } }); request.once('error', function (e) { _this3.player.trigger(_event.default.ERROR, 'Unable to retrieve peak data from ' + peaks + '. Status code: ' + request.response.status); }); } } }, { key: "play", value: function play() { if (this.player.controlBar.playToggle !== undefined && this.player.controlBar.playToggle.contentEl()) { this.player.controlBar.playToggle.handlePlay(); } if (this.liveMode) { if (!this.surfer.microphone.active) { this.log('Start microphone'); this.surfer.microphone.start(); } else { var paused = !this.surfer.microphone.paused; if (paused) { this.pause(); } else { this.log('Resume microphone'); this.surfer.microphone.play(); } } } else { this.log('Start playback'); this.player.play(); this.surfer.play(); } } }, { key: "pause", value: function pause() { if (this.player.controlBar.playToggle !== undefined && this.player.controlBar.playToggle.contentEl()) { this.player.controlBar.playToggle.handlePause(); } if (this.liveMode) { this.log('Pause microphone'); this.surfer.microphone.pause(); } else { this.log('Pause playback'); if (!this.waveFinished) { this.surfer.pause(); } else { this.waveFinished = false; } this.setCurrentTime(); } } }, { key: "dispose", value: function dispose() { if (this.surfer) { if (this.liveMode && this.surfer.microphone) { this.surfer.microphone.destroy(); this.log('Destroyed microphone plugin'); } this.surfer.destroy(); } this.log('Destroyed plugin'); } }, { key: "isDestroyed", value: function isDestroyed() { return this.player && this.player.children() === null; } }, { key: "destroy", value: function destroy() { this.player.dispose(); } }, { key: "setVolume", value: function setVolume(volume) { if (volume !== undefined) { this.log('Changing volume to: ' + volume); this.player.volume(volume); } } }, { key: "exportImage", value: function exportImage(format, quality) { var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'blob'; return this.surfer.exportImage(format, quality, type); } }, { key: "setAudioOutput", value: function setAudioOutput(deviceId) { var _this4 = this; if (deviceId) { this.surfer.setSinkId(deviceId).then(function (result) { _this4.player.trigger(_event.default.AUDIO_OUTPUT_READY); }).catch(function (err) { _this4.player.trigger(_event.default.ERROR, err); _this4.log(err, 'error'); }); } } }, { key: "getCurrentTime", value: function getCurrentTime() { var currentTime = this.surfer.getCurrentTime(); currentTime = isNaN(currentTime) ? 0 : currentTime; return currentTime; } }, { key: "setCurrentTime", value: function setCurrentTime(currentTime, duration) { if (currentTime === undefined) { currentTime = this.surfer.getCurrentTime(); } if (duration === undefined) { duration = this.surfer.getDuration(); } currentTime = isNaN(currentTime) ? 0 : currentTime; duration = isNaN(duration) ? 0 : duration; if (this.player.controlBar.currentTimeDisplay && this.player.controlBar.currentTimeDisplay.contentEl() && this.player.controlBar.currentTimeDisplay.contentEl().lastChild) { var time = Math.min(currentTime, duration); this.player.controlBar.currentTimeDisplay.formattedTime_ = this.player.controlBar.currentTimeDisplay.contentEl().lastChild.textContent = this._formatTime(time, duration, this.displayMilliseconds); } if (this.textTracksEnabled && this.player.tech_ && this.player.tech_.el_) { this.player.tech_.setCurrentTime(currentTime); } } }, { key: "getDuration", value: function getDuration() { var duration = this.surfer.getDuration(); duration = isNaN(duration) ? 0 : duration; return duration; } }, { key: "setDuration", value: function setDuration(duration) { if (duration === undefined) { duration = this.surfer.getDuration(); } duration = isNaN(duration) ? 0 : duration; if (this.player.controlBar.durationDisplay && this.player.controlBar.durationDisplay.contentEl() && this.player.controlBar.durationDisplay.contentEl().lastChild) { this.player.controlBar.durationDisplay.formattedTime_ = this.player.controlBar.durationDisplay.contentEl().lastChild.textContent = this._formatTime(duration, duration, this.displayMilliseconds); } } }, { key: "onWaveReady", value: function onWaveReady() { var _this5 = this; this.waveReady = true; this.waveFinished = false; this.liveMode = false; this.log('Waveform is ready'); this.player.trigger(_event.default.WAVE_READY); if (this.backend === WEBAUDIO) { this.setCurrentTime(); this.setDuration(); if (this.player.controlBar.playToggle !== undefined && this.player.controlBar.playToggle.contentEl()) { this.player.controlBar.playToggle.show(); } } if (this.player.loadingSpinner.contentEl()) { this.player.loadingSpinner.hide(); } if (this.player.options_.autoplay === true) { this.setVolume(0); if (this.backend === WEBAUDIO) { this.play(); } else { this.player.play().catch(function (e) { _this5.onWaveError(e); }); } } } }, { key: "onWaveFinish", value: function onWaveFinish() { var _this6 = this; this.log('Finished playback'); this.player.trigger(_event.default.PLAYBACK_FINISH); if (this.player.options_.loop === true) { if (this.backend === WEBAUDIO) { this.surfer.stop(); this.play(); } } else { this.waveFinished = true; if (this.backend === WEBAUDIO) { this.pause(); this.player.trigger(_event.default.ENDED); this.surfer.once(_event.default.SEEK, function () { if (_this6.player.controlBar.playToggle !== undefined) { _this6.player.controlBar.playToggle.removeClass('vjs-ended'); } _this6.player.trigger(_event.default.PAUSE); }); } } } }, { key: "onWaveProgress", value: function onWaveProgress(time) { this.setCurrentTime(); } }, { key: "onWaveSeek", value: function onWaveSeek() { this.setCurrentTime(); } }, { key: "onWaveError", value: function onWaveError(error) { if (error.name && error.name === 'AbortError' || error.name === 'DOMException' && error.message.startsWith('The operation was aborted')) { this.player.trigger(_event.default.ABORT, error); } else { this.player.trigger(_event.default.ERROR, error); this.log(error, 'error'); } } }, { key: "onPlayToggle", value: function onPlayToggle() { if (this.player.controlBar.playToggle !== undefined && this.player.controlBar.playToggle.hasClass('vjs-ended')) { this.player.controlBar.playToggle.removeClass('vjs-ended'); } if (this.surfer.isPlaying()) { this.pause(); } else { this.play(); } } }, { key: "onVolumeChange", value: function onVolumeChange() { var volume = this.player.volume(); if (this.player.muted()) { volume = 0; } this.surfer.setVolume(volume); } }, { key: "onScreenChange", value: function onScreenChange() { var _this7 = this; var fullscreenDelay = this.player.setInterval(function () { var isFullscreen = _this7.player.isFullscreen(); var newWidth, newHeight; if (!isFullscreen) { newWidth = _this7.originalWidth; newHeight = _this7.originalHeight; } if (_this7.waveReady) { if (_this7.liveMode && !_this7.surfer.microphone.active) { return; } _this7.redrawWaveform(newWidth, newHeight); } _this7.player.clearInterval(fullscreenDelay); }, 100); } }, { key: "redrawWaveform", value: function redrawWaveform(newWidth, newHeight) { if (!this.isDestroyed()) { if (this.player.el_) { var rect = this.player.el_.getBoundingClientRect(); if (newWidth === undefined) { newWidth = rect.width; } if (newHeight === undefined) { newHeight = rect.height; } } this.surfer.drawer.destroy(); this.surfer.params.width = newWidth; this.surfer.params.height = newHeight - this.player.controlBar.height(); this.surfer.createDrawer(); this.surfer.drawer.wrapper.className = wavesurferClassName; this.surfer.drawBuffer(); this.surfer.drawer.progress(this.surfer.backend.getPlayedPercents()); } } }, { key: "log", value: function log(args, logType) { (0, _log2.default)(args, logType, this.debug); } }, { key: "setFormatTime", value: function setFormatTime(customImplementation) { this._formatTime = customImplementation; if (_video.default.time) { _video.default.time.setFormatTime(this._formatTime); } else { _video.default.setFormatTime(this._formatTime); } } }]); return Wavesurfer; }(Plugin); Wavesurfer.VERSION = "3.10.0"; _video.default.Wavesurfer = Wavesurfer; if (_video.default.getPlugin(wavesurferPluginName) === undefined) { _video.default.registerPlugin(wavesurferPluginName, Wavesurfer); } _video.default.use('*', function (player) { _middleware.default.player = player; return _middleware.default; }); })(); /******/ return __webpack_exports__; /******/ })() ; });