qambi
Version:
MIDI sequencer, loads MIDI files, can record and playback MIDI, uses WebMIDI and WebAudio
241 lines (202 loc) • 6.14 kB
JavaScript
;
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);
}
*/