import { RomanNumeral } from './roman-numeral'; import { Scale } from '../scale'; import { MatchingRule, Rule } from './rule'; export declare enum ExpansionType { /** * Expansion is inserted before the target */ PREFIX = 0, /** * Expansion spans from source to target and cannot be used with other expansions */ FULL = 1 } export type ExpansionRule = Rule & { type: ExpansionType; expansion: MatchingRule[]; } & ({ type: ExpansionType.FULL; } | { type: ExpansionType.PREFIX; priority: number; }); /** * Expansions consist of elaborations beyond basic progressions * I.e. I - I6 could be expanded to be I - V64 - I6 * * TODO chainable? - e.g. (V6/V - (I64 - V)) */ export declare namespace Expansion { const basicInversions: ExpansionRule[]; const dominantInversions: ({ type: ExpansionType; source: MatchingRule; target: MatchingRule; expansion: MatchingRule[]; priority?: undefined; } | { type: ExpansionType; target: MatchingRule; expansion: MatchingRule[]; source?: undefined; priority?: undefined; } | { type: ExpansionType; priority: number; target: MatchingRule; expansion: MatchingRule[]; source?: undefined; })[]; const subdominant: { type: ExpansionType; source: MatchingRule; target: MatchingRule; expansion: MatchingRule[]; }[]; const cadential64: { type: ExpansionType; priority: number; target: MatchingRule; expansion: MatchingRule[]; }[]; const submediant: { type: ExpansionType; source: MatchingRule; expansion: MatchingRule[]; }[]; const subdominantSevenths: { type: ExpansionType; source: MatchingRule; target: MatchingRule; expansion: MatchingRule[]; }[]; const tonicSubstitutes: { type: ExpansionType; source: MatchingRule; target: MatchingRule; expansion: MatchingRule[]; }[]; const secondaryDominant: { type: ExpansionType; priority: number; target: MatchingRule; expansion: MatchingRule[]; }[]; const mediant: { type: ExpansionType; source: MatchingRule; target: MatchingRule; expansion: MatchingRule[]; }[]; const sequences: { type: ExpansionType; source: MatchingRule; target: MatchingRule; expansion: MatchingRule[]; }[]; const leadingToneSevenths: { type: ExpansionType; priority: number; target: MatchingRule; expansion: MatchingRule[]; }[]; const otherSeventhChords: { type: ExpansionType; source: MatchingRule; target: MatchingRule; expansion: MatchingRule[]; }[]; const secondaryDominants: { type: ExpansionType; priority: number; target: MatchingRule; expansion: MatchingRule[]; }[]; const defaultExpansions: ExpansionRule[]; function matchingExpansions(scale: Scale, previous: RomanNumeral, option: RomanNumeral, expansions?: ExpansionRule[]): Generator; }