UNPKG

consonance

Version:
46 lines (31 loc) 960 B
const R = require('ramda'); const ms = require('simple-modular-scale'); const consonance = (() => { "use strict"; const mapIndexed = R.addIndex(R.map); const comparator = R.curry((a, b) => a - b); const toScale = R.curry((scale, input, i) => { const difference = R.pipe(comparator(input), Math.abs); let reducer = (memo, val) => { var d0 = difference(memo); var d1 = difference(val); return d1 < d0 ? val : memo; }; let output = R.reduce(reducer, Infinity, scale); return { input, output, i }; }); const consonance = (sizes, options = {}) => { var scale; if (R.isArrayLike(options)) { scale = options; } else { scale = ms(options); } const sortedScale = R.sort(comparator, scale) let fn = toScale(sortedScale); return mapIndexed(fn, sizes); }; return consonance; })(); if (typeof module != "undefined" && module.exports) module.exports = consonance;