UNPKG

qambi

Version:

MIDI sequencer, loads MIDI files, can record and playback MIDI, uses WebMIDI and WebAudio

193 lines (160 loc) 4.9 kB
'use strict'; 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) }) */ }