waveform-playlist-nartj
Version:
Multiple track web audio editor and player with waveform preview
105 lines (90 loc) • 3.44 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.init = init;
exports["default"] = _default;
var _lodash = _interopRequireDefault(require("lodash.assign"));
var _createElement = _interopRequireDefault(require("virtual-dom/create-element"));
var _eventEmitter = _interopRequireDefault(require("event-emitter"));
var _Playlist = _interopRequireDefault(require("./Playlist"));
require("regenerator-runtime");
require("regenerator-runtime/runtime.js");
function init() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var ee = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (0, _eventEmitter["default"])();
if (options.container === undefined) {
throw new Error('DOM element container must be given.');
}
window.OfflineAudioContext = window.OfflineAudioContext || window.webkitOfflineAudioContext;
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var audioContext = new window.AudioContext();
var defaults = {
ac: audioContext,
sampleRate: audioContext.sampleRate,
samplesPerPixel: 4096,
mono: true,
fadeType: 'logarithmic',
exclSolo: false,
timescale: false,
controls: {
show: false,
width: 150
},
colors: {
waveOutlineColor: 'white',
timeColor: 'grey',
fadeColor: 'black'
},
seekStyle: 'line',
waveHeight: 128,
state: 'cursor',
zoomLevels: [512, 1024, 2048, 4096],
annotationList: {
annotations: [],
controls: [],
editable: false,
linkEndpoints: false,
isContinuousPlay: false
},
isAutomaticScroll: false
};
var config = (0, _lodash["default"])(defaults, options);
var zoomIndex = config.zoomLevels.indexOf(config.samplesPerPixel);
if (zoomIndex === -1) {
throw new Error('initial samplesPerPixel must be included in array zoomLevels');
}
var playlist = new _Playlist["default"]();
playlist.setSampleRate(config.sampleRate);
playlist.setSamplesPerPixel(config.samplesPerPixel);
playlist.setAudioContext(config.ac);
playlist.setEventEmitter(ee);
playlist.setUpEventEmitter();
playlist.setTimeSelection(0, 0);
playlist.setState(config.state);
playlist.setControlOptions(config.controls);
playlist.setWaveHeight(config.waveHeight);
playlist.setColors(config.colors);
playlist.setZoomLevels(config.zoomLevels);
playlist.setZoomIndex(zoomIndex);
playlist.setMono(config.mono);
playlist.setExclSolo(config.exclSolo);
playlist.setShowTimeScale(config.timescale);
playlist.setSeekStyle(config.seekStyle);
playlist.setAnnotations(config.annotationList);
playlist.isAutomaticScroll = config.isAutomaticScroll;
playlist.isContinuousPlay = config.isContinuousPlay;
playlist.linkedEndpoints = config.linkedEndpoints; // take care of initial virtual dom rendering.
var tree = playlist.render();
var rootNode = (0, _createElement["default"])(tree);
config.container.appendChild(rootNode);
playlist.tree = tree;
playlist.rootNode = rootNode;
return playlist;
}
function _default() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var ee = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (0, _eventEmitter["default"])();
return init(options, ee);
}