qambi
Version:
MIDI sequencer, loads MIDI files, can record and playback MIDI, uses WebMIDI and WebAudio
193 lines (160 loc) • 4.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Blob = exports.rAF = exports.getUserMedia = undefined;
exports.init = init;
var _qambi = require('./qambi');
var _qambi2 = _interopRequireDefault(_qambi);
var _song = require('./song');
var _sampler = require('./sampler');
var _init_audio = require('./init_audio');
var _init_midi = require('./init_midi');
var _settings = require('./settings');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var getUserMedia = exports.getUserMedia = function () {
if (typeof navigator !== 'undefined') {
return navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
}
return function () {
console.warn('getUserMedia is not available');
};
}();
var rAF = exports.rAF = function () {
if (typeof navigator !== 'undefined') {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame;
}
return function () {
console.warn('requestAnimationFrame is not available');
};
}();
var Blob = exports.Blob = function () {
if (typeof navigator !== 'undefined') {
return window.Blob || window.webkitBlob;
}
return function () {
console.warn('Blob is not available');
};
}();
function loadInstrument(data) {
var sampler = new _sampler.Sampler();
return new Promise(function (resolve, reject) {
sampler.parseSampleData(data).then(function () {
return resolve(sampler);
});
});
}
function init() {
var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
// load settings.instruments (array or object)
// load settings.midifiles (array or object)
/*
qambi.init({
song: {
type: 'Song',
url: '../data/minute_waltz.mid'
},
piano: {
type: 'Instrument',
url: '../../instruments/electric-piano.json'
}
})
qambi.init({
instruments: ['../instruments/piano', '../instruments/violin'],
midifiles: ['../midi/mozart.mid']
})
.then((loaded) => {
let [piano, violin] = loaded.instruments
let [mozart] = loaded.midifiles
})
*/
var promises = [(0, _init_audio.initAudio)(), (0, _init_midi.initMIDI)()];
var loadKeys = void 0;
if (settings !== null) {
loadKeys = Object.keys(settings);
var i = loadKeys.indexOf('settings');
if (i !== -1) {
(0, _settings.updateSettings)(settings.settings);
loadKeys.splice(i, 1);
}
//console.log(loadKeys)
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = loadKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var key = _step.value;
var data = settings[key];
if (data.type === 'Song') {
promises.push(_song.Song.fromMIDIFile(data.url));
} else if (data.type === 'Instrument') {
promises.push(loadInstrument(data));
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
return new Promise(function (resolve, reject) {
Promise.all(promises).then(function (result) {
var returnObj = {};
result.forEach(function (data, i) {
if (i === 0) {
// initAudio
returnObj.legacy = data.legacy;
returnObj.mp3 = data.mp3;
returnObj.ogg = data.ogg;
} else if (i === 1) {
// initMIDI
returnObj.jazz = data.jazz;
returnObj.midi = data.midi;
returnObj.webmidi = data.webmidi;
} else {
// Instruments, samples or MIDI files that got loaded during initialization
//result[loadKeys[i - 2]] = data
returnObj[loadKeys[i - 2]] = data;
}
});
//console.log(returnObj.jazz)
if (returnObj.midi === false) {
console.log('qambi', _qambi2.default.version, '[your browser has no support for MIDI]');
} else {
console.log('qambi', _qambi2.default.version);
}
resolve(returnObj);
}, function (error) {
reject(error);
});
});
/*
Promise.all([initAudio(), initMIDI()])
.then(
(data) => {
// parseAudio
let dataAudio = data[0]
// parseMIDI
let dataMidi = data[1]
callback({
legacy: dataAudio.legacy,
mp3: dataAudio.mp3,
ogg: dataAudio.ogg,
midi: dataMidi.midi,
webmidi: dataMidi.webmidi,
})
},
(error) => {
callback(error)
})
*/
}