import { IntervalName } from '@tonaljs/pitch-interval'; import { NoteName } from '@tonaljs/pitch-note'; /** * The properties of a pitch class set * @param {number} num - a number between 1 and 4095 (both included) that * uniquely identifies the set. It's the decimal number of the chroma. * @param {string} chroma - a string representation of the set: a 12-char string * with either "1" or "0" as characters, representing a pitch class or not * for the given position in the octave. For example, a "1" at index 0 means 'C', * a "1" at index 2 means 'D', and so on... * @param {string} normalized - the chroma but shifted to the first 1 * @param {number} length - the number of notes of the pitch class set * @param {IntervalName[]} intervals - the intervals of the pitch class set * *starting from C* */ interface Pcset { readonly name: string; readonly empty: boolean; readonly setNum: number; readonly chroma: PcsetChroma; readonly normalized: PcsetChroma; readonly intervals: IntervalName[]; } declare const EmptyPcset: Pcset; type PcsetChroma = string; type PcsetNum = number; declare function isChroma(set: any): set is PcsetChroma; /** * A definition of a pitch class set. It could be: * - The pitch class set chroma (a 12-length string with only 1s or 0s) * - The pitch class set number (an integer between 1 and 4095) * - An array of note names * - An array of interval names */ type Set = Partial | PcsetChroma | PcsetNum | NoteName[] | IntervalName[]; /** * Get the pitch class set of a collection of notes or set number or chroma */ declare function get(src: Set): Pcset; /** * @use Pcset.get * @deprecated */ declare const pcset: typeof get; /** * Get pitch class set chroma * @function * @example * Pcset.chroma(["c", "d", "e"]); //=> "101010000000" */ declare const chroma: (set: Set) => string; /** * Get intervals (from C) of a set * @function * @example * Pcset.intervals(["c", "d", "e"]); //=> */ declare const intervals: (set: Set) => string[]; /** * Get pitch class set number * @function * @example * Pcset.num(["c", "d", "e"]); //=> 2192 */ declare const num: (set: Set) => number; declare function notes(set: Set): NoteName[]; /** * Get a list of all possible pitch class sets (all possible chromas) *having * C as root*. There are 2048 different chromas. If you want them with another * note you have to transpose it * * @see http://allthescales.org/ * @return {Array} an array of possible chromas from '10000000000' to '11111111111' */ declare function chromas(): PcsetChroma[]; /** * Given a a list of notes or a pcset chroma, produce the rotations * of the chroma discarding the ones that starts with "0" * * This is used, for example, to get all the modes of a scale. * * @param {Array|string} set - the list of notes or pitchChr of the set * @param {boolean} normalize - (Optional, true by default) remove all * the rotations that starts with "0" * @return {Array} an array with all the modes of the chroma * * @example * Pcset.modes(["C", "D", "E"]).map(Pcset.intervals) */ declare function modes(set: Set, normalize?: boolean): PcsetChroma[]; /** * Test if two pitch class sets are equal * * @param {Array|string} set1 - one of the pitch class sets * @param {Array|string} set2 - the other pitch class set * @return {boolean} true if they are equal * @example * Pcset.isEqual(["c2", "d3"], ["c5", "d2"]) // => true */ declare function isEqual(s1: Set, s2: Set): boolean; /** * Create a function that test if a collection of notes is a * subset of a given set * * The function is curried. * * @param {PcsetChroma|NoteName[]} set - the superset to test against (chroma or * list of notes) * @return{function(PcsetChroma|NoteNames[]): boolean} a function accepting a set * to test against (chroma or list of notes) * @example * const inCMajor = Pcset.isSubsetOf(["C", "E", "G"]) * inCMajor(["e6", "c4"]) // => true * inCMajor(["e6", "c4", "d3"]) // => false */ declare function isSubsetOf(set: Set): (notes: Set | Pcset) => boolean | 0; /** * Create a function that test if a collection of notes is a * superset of a given set (it contains all notes and at least one more) * * @param {Set} set - an array of notes or a chroma set string to test against * @return {(subset: Set): boolean} a function that given a set * returns true if is a subset of the first one * @example * const extendsCMajor = Pcset.isSupersetOf(["C", "E", "G"]) * extendsCMajor(["e6", "a", "c4", "g2"]) // => true * extendsCMajor(["c6", "e4", "g3"]) // => false */ declare function isSupersetOf(set: Set): (notes: Set) => boolean | 0; /** * Test if a given pitch class set includes a note * * @param {Array} set - the base set to test against * @param {string} note - the note to test * @return {boolean} true if the note is included in the pcset * * Can be partially applied * * @example * const isNoteInCMajor = isNoteIncludedIn(['C', 'E', 'G']) * isNoteInCMajor('C4') // => true * isNoteInCMajor('C#4') // => false */ declare function isNoteIncludedIn(set: Set): (noteName: NoteName) => boolean; /** @deprecated use: isNoteIncludedIn */ declare const includes: typeof isNoteIncludedIn; /** * Filter a list with a pitch class set * * @param {Array|string} set - the pitch class set notes * @param {Array|string} notes - the note list to be filtered * @return {Array} the filtered notes * * @example * Pcset.filter(["C", "D", "E"], ["c2", "c#2", "d2", "c3", "c#3", "d3"]) // => [ "c2", "d2", "c3", "d3" ]) * Pcset.filter(["C2"], ["c2", "c#2", "d2", "c3", "c#3", "d3"]) // => [ "c2", "c3" ]) */ declare function filter(set: Set): (notes: NoteName[]) => string[]; /** @deprecated */ declare const _default: { get: typeof get; chroma: (set: Set) => string; num: (set: Set) => number; intervals: (set: Set) => string[]; chromas: typeof chromas; isSupersetOf: typeof isSupersetOf; isSubsetOf: typeof isSubsetOf; isNoteIncludedIn: typeof isNoteIncludedIn; isEqual: typeof isEqual; filter: typeof filter; modes: typeof modes; notes: typeof notes; pcset: typeof get; }; export { EmptyPcset, type Pcset, type PcsetChroma, type PcsetNum, type Set, chroma, chromas, _default as default, filter, get, includes, intervals, isChroma, isEqual, isNoteIncludedIn, isSubsetOf, isSupersetOf, modes, notes, num, pcset };