qambi
Version:
MIDI sequencer, loads MIDI files, can record and playback MIDI, uses WebMIDI and WebAudio
152 lines (129 loc) • 4.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
exports.dispatchEvent = dispatchEvent;
exports.addEventListener = addEventListener;
exports.removeEventListener = removeEventListener;
var eventListeners = new Map();
function dispatchEvent(event) {
//console.log(event.type)
var map = void 0;
if (event.type === 'event') {
var midiEvent = event.data;
var midiEventType = midiEvent.type;
//console.log(midiEventType)
if (eventListeners.has(midiEventType)) {
map = eventListeners.get(midiEventType);
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = map.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var cb = _step.value;
cb(midiEvent);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
}
//console.log(event.type, eventListeners.has(event.type))
if (eventListeners.has(event.type) === false) {
return;
}
map = eventListeners.get(event.type);
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = map.values()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _cb = _step2.value;
_cb(event);
}
// @todo: run filters here, for instance if an eventlistener has been added to all NOTE_ON events, check the type of the incoming event
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
function addEventListener(type, callback) {
var map = void 0;
var id = type + '_' + new Date().getTime();
if (eventListeners.has(type) === false) {
map = new Map();
eventListeners.set(type, map);
} else {
map = eventListeners.get(type);
}
map.set(id, callback);
//console.log(eventListeners)
return id;
}
function removeEventListener(type, id) {
if (eventListeners.has(type) === false) {
console.log('no eventlisteners of type' + type);
return;
}
var map = eventListeners.get(type);
if (typeof id === 'function') {
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = map.entries()[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var _step3$value = _slicedToArray(_step3.value, 2),
key = _step3$value[0],
value = _step3$value[1];
console.log(key, value);
if (value === id) {
console.log(key);
id = key;
break;
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
if (typeof id === 'string') {
map.delete(id);
}
} else if (typeof id === 'string') {
map.delete(id);
} else {
console.log('could not remove eventlistener');
}
}