import { IntervalLiteral, IntervalName } from '@tonaljs/pitch-interval';
import { NoteLiteral, NoteName } from '@tonaljs/pitch-note';

/**
 * Transpose a note by an interval.
 *
 * @param {string} note - the note or note name
 * @param {string} interval - the interval or interval name
 * @return {string} the transposed note name or empty string if not valid notes
 * @example
 * import { transpose } from "@tonaljs/core"
 * transpose("d3", "3M") // => "F#3"
 * transpose("D", "3M") // => "F#"
 * ["C", "D", "E", "F", "G"].map(pc => transpose(pc, "M3)) // => ["E", "F#", "G#", "A", "B"]
 */
declare function transpose(noteName: NoteLiteral, intervalName: IntervalLiteral | [number, number]): NoteName;
declare function tonicIntervalsTransposer(intervals: string[], tonic: string | undefined | null): (normalized: number) => string;
/**
 * Find the interval distance between two notes or coord classes.
 *
 * To find distance between coord classes, both notes must be coord classes and
 * the interval is always ascending
 *
 * @param {Note|string} from - the note or note name to calculate distance from
 * @param {Note|string} to - the note or note name to calculate distance to
 * @return {string} the interval name or empty string if not valid notes
 *
 */
declare function distance(fromNote: NoteLiteral, toNote: NoteLiteral): IntervalName;

export { distance, tonicIntervalsTransposer, transpose };
