react-orchestra
Version:
A toolbox to build interactive and smart instruments on the web and mobile.
41 lines (40 loc) • 1.49 kB
JavaScript
/* mod */
import getInterval from './getInterval';
/**
* Get all possible interval permutations between these notes. Helpful to be able to guess scale
* @function
* @name getIntervalPermutationsFromNoteNames
* @param {array} noteNames - Without octave
* @example
* getIntervalPermutationsFromNoteNames(['A', 'B', 'C'])
*
* // Returns { firstNoteName: 'A', intervals: [0, 9, 10], guessedScales: [] },
* // { firstNoteName: 'B', intervals: [0, 2, 11], guessedScales: [] },
* // { firstNoteName: 'C', intervals: [0, 1, 3], guessedScales: [] },
* @return {array} intervalPermutations -
* [{firstNoteName: string, intervals: number, guessedScales: array}]
*/
var getIntervalPermutationsFromNoteNames = function getIntervalPermutationsFromNoteNames(noteNames) {
var intervalsPermutations = [];
for (var i = 0; i < noteNames.length; i += 1) {
var intervals = [0];
var firstNoteName = noteNames[i];
for (var j = 0; j < noteNames.length; j += 1) {
if (j !== i) {
var interval = getInterval(firstNoteName, noteNames[j]);
intervals.push(interval);
}
}
intervals.sort(function (a, b) {
return a - b;
});
var noteIntervals = {
firstNoteName: firstNoteName, // /: firstNoteName.substring(0, firstNoteName.length - 1),
intervals: intervals,
guessedScales: []
};
intervalsPermutations.push(noteIntervals);
}
return intervalsPermutations;
};
export default getIntervalPermutationsFromNoteNames;