UNPKG

qambi

Version:

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

241 lines (202 loc) 6.14 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports.getNiceTime = getNiceTime; exports.base64ToBinary = base64ToBinary; exports.typeString = typeString; exports.sortEvents = sortEvents; exports.checkIfBase64 = checkIfBase64; exports.getEqualPowerCurve = getEqualPowerCurve; exports.checkMIDINumber = checkMIDINumber; var _isomorphicFetch = require('isomorphic-fetch'); var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var mPI = Math.PI, mPow = Math.pow, mRound = Math.round, mFloor = Math.floor, mRandom = Math.random; function getNiceTime(millis) { var h = void 0, m = void 0, s = void 0, ms = void 0, seconds = void 0, timeAsString = ''; seconds = millis / 1000; // → millis to seconds h = mFloor(seconds / (60 * 60)); m = mFloor(seconds % (60 * 60) / 60); s = mFloor(seconds % 60); ms = mRound((seconds - h * 3600 - m * 60 - s) * 1000); timeAsString += h + ':'; timeAsString += m < 10 ? '0' + m : m; timeAsString += ':'; timeAsString += s < 10 ? '0' + s : s; timeAsString += ':'; timeAsString += ms === 0 ? '000' : ms < 10 ? '00' + ms : ms < 100 ? '0' + ms : ms; //console.log(h, m, s, ms); return { hour: h, minute: m, second: s, millisecond: ms, timeAsString: timeAsString, timeAsArray: [h, m, s, ms] }; } // adapted version of https://github.com/danguer/blog-examples/blob/master/js/base64-binary.js function base64ToBinary(input) { var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', bytes = void 0, uarray = void 0, buffer = void 0, lkey1 = void 0, lkey2 = void 0, chr1 = void 0, chr2 = void 0, chr3 = void 0, enc1 = void 0, enc2 = void 0, enc3 = void 0, enc4 = void 0, i = void 0, j = 0; bytes = Math.ceil(3 * input.length / 4.0); buffer = new ArrayBuffer(bytes); uarray = new Uint8Array(buffer); lkey1 = keyStr.indexOf(input.charAt(input.length - 1)); lkey2 = keyStr.indexOf(input.charAt(input.length - 1)); if (lkey1 == 64) bytes--; //padding chars, so skip if (lkey2 == 64) bytes--; //padding chars, so skip input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ''); for (i = 0; i < bytes; i += 3) { //get the 3 octects in 4 ascii chars enc1 = keyStr.indexOf(input.charAt(j++)); enc2 = keyStr.indexOf(input.charAt(j++)); enc3 = keyStr.indexOf(input.charAt(j++)); enc4 = keyStr.indexOf(input.charAt(j++)); chr1 = enc1 << 2 | enc2 >> 4; chr2 = (enc2 & 15) << 4 | enc3 >> 2; chr3 = (enc3 & 3) << 6 | enc4; uarray[i] = chr1; if (enc3 != 64) uarray[i + 1] = chr2; if (enc4 != 64) uarray[i + 2] = chr3; } //console.log(buffer); return buffer; } function typeString(o) { if ((typeof o === 'undefined' ? 'undefined' : _typeof(o)) != 'object') { return typeof o === 'undefined' ? 'undefined' : _typeof(o); } if (o === null) { return 'null'; } //object, array, function, date, regexp, string, number, boolean, error var internalClass = Object.prototype.toString.call(o).match(/\[object\s(\w+)\]/)[1]; return internalClass.toLowerCase(); } function sortEvents(events) { events.sort(function (a, b) { if (a.ticks === b.ticks) { var r = a.type - b.type; if (a.type === 176 && b.type === 144) { r = -1; } return r; } return a.ticks - b.ticks; }); } function checkIfBase64(data) { var passed = true; try { atob(data); } catch (e) { passed = false; } return passed; } function getEqualPowerCurve(numSteps, type, maxValue) { var i = void 0, value = void 0, percent = void 0, values = new Float32Array(numSteps); for (i = 0; i < numSteps; i++) { percent = i / numSteps; if (type === 'fadeIn') { value = Math.cos((1.0 - percent) * 0.5 * mPI) * maxValue; } else if (type === 'fadeOut') { value = Math.cos(percent * 0.5 * Math.PI) * maxValue; } values[i] = value; if (i === numSteps - 1) { values[i] = type === 'fadeIn' ? 1 : 0; } } return values; } function checkMIDINumber(value) { //console.log(value); if (isNaN(value)) { console.warn('please provide a number'); return false; } if (value < 0 || value > 127) { console.warn('please provide a number between 0 and 127'); return false; } return value; } /* //old school ajax export function ajax(config){ let request = new XMLHttpRequest(), method = typeof config.method === 'undefined' ? 'GET' : config.method, fileSize; function executor(resolve, reject){ reject = reject || function(){}; resolve = resolve || function(){}; request.onload = function(){ if(request.status !== 200){ reject(request.status); return; } if(config.responseType === 'json'){ fileSize = request.response.length; resolve(JSON.parse(request.response), fileSize); request = null; }else{ resolve(request.response); request = null; } }; request.onerror = function(e){ config.onError(e); }; request.open(method, config.url, true); if(config.overrideMimeType){ request.overrideMimeType(config.overrideMimeType); } if(config.responseType){ if(config.responseType === 'json'){ request.responseType = 'text'; }else{ request.responseType = config.responseType; } } if(method === 'POST') { request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); } if(config.data){ request.send(config.data); }else{ request.send(); } } return new Promise(executor); } */