waveform-playlist-nartj
Version:
Multiple track web audio editor and player with waveform preview
84 lines (69 loc) • 2.58 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.STATE_FINISHED = exports.STATE_DECODING = exports.STATE_LOADING = exports.STATE_UNINITIALIZED = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _eventEmitter = _interopRequireDefault(require("event-emitter"));
var STATE_UNINITIALIZED = 0;
exports.STATE_UNINITIALIZED = STATE_UNINITIALIZED;
var STATE_LOADING = 1;
exports.STATE_LOADING = STATE_LOADING;
var STATE_DECODING = 2;
exports.STATE_DECODING = STATE_DECODING;
var STATE_FINISHED = 3;
exports.STATE_FINISHED = STATE_FINISHED;
var _default = /*#__PURE__*/function () {
function _default(src, audioContext) {
var ee = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : (0, _eventEmitter["default"])();
(0, _classCallCheck2["default"])(this, _default);
this.src = src;
this.ac = audioContext;
this.audioRequestState = STATE_UNINITIALIZED;
this.ee = ee;
}
(0, _createClass2["default"])(_default, [{
key: "setStateChange",
value: function setStateChange(state) {
this.audioRequestState = state;
this.ee.emit('audiorequeststatechange', this.audioRequestState, this.src);
}
}, {
key: "fileProgress",
value: function fileProgress(e) {
var percentComplete = 0;
if (this.audioRequestState === STATE_UNINITIALIZED) {
this.setStateChange(STATE_LOADING);
}
if (e.lengthComputable) {
percentComplete = e.loaded / e.total * 100;
}
this.ee.emit('loadprogress', percentComplete, this.src);
}
}, {
key: "fileLoad",
value: function fileLoad(e) {
var _this = this;
var audioData = e.target.response || e.target.result;
this.setStateChange(STATE_DECODING);
return new Promise(function (resolve, reject) {
_this.ac.decodeAudioData(audioData, function (audioBuffer) {
_this.audioBuffer = audioBuffer;
_this.setStateChange(STATE_FINISHED);
resolve(audioBuffer);
}, function (err) {
if (err === null) {
// Safari issues with null error
reject(Error('MediaDecodeAudioDataUnknownContentType'));
} else {
reject(err);
}
});
});
}
}]);
return _default;
}();
exports["default"] = _default;