import { Metronome } from './metronome';
import { StaveCount } from './stavecount';
import { StaveLineCount } from './stavelinecount';
import { Clef } from './clef';
import { Key } from './key';
import { Time } from './time';
import { SignatureChange } from './types';
import { FragmentSignature } from './fragmentsignature';
import { PartSignature } from './partsignature';
import { StaveSignature } from './stavesignature';
import { Config } from '../../config';
import { Logger } from '../../debug';
/** Signature tracks how subsignatures evolve as the piece progresses. */
export declare class Signature {
    private config;
    private log;
    private metronome;
    private staveCounts;
    private staveLineCounts;
    private clefs;
    private keys;
    private times;
    private changes;
    constructor(config: Config, log: Logger, metronome: Metronome | null, staveCounts: StaveCount[], staveLineCounts: StaveLineCount[], clefs: Clef[], keys: Key[], times: Time[], changes: SignatureChange[]);
    static default(config: Config, log: Logger): Signature;
    static builder(config: Config, log: Logger): SignatureBuilder;
    asFragmentSignature(): FragmentSignature;
    asPartSignature(partId: string): PartSignature;
    asStaveSignature(partId: string, staveNumber: number): StaveSignature;
    getMetronome(): Metronome;
    getStaveCount(partId: string): StaveCount;
    getStaveCounts(): StaveCount[];
    getStaveLineCount(partId: string, staveNumber: number): StaveLineCount;
    getStaveLineCounts(): StaveLineCount[];
    getClef(partId: string, staveNumber: number): Clef;
    getClefs(): Clef[];
    getKey(partId: string, staveNumber: number): Key;
    getPreviousKey(partId: string, staveNumber: number): Key | null;
    getKeys(): Key[];
    getTime(partId: string, staveNumber: number): Time;
    getTimes(): Time[];
    getChanges(): SignatureChange[];
    hasChanges(): boolean;
}
declare class SignatureBuilder {
    private config;
    private log;
    private previousSignature;
    private metronome;
    private staveCounts;
    private staveLineCounts;
    private clefs;
    private keys;
    private times;
    constructor(config: Config, log: Logger);
    setPreviousSignature(signature: Signature): SignatureBuilder;
    setMetronome(metronome: Metronome): SignatureBuilder;
    addStaveCount(staveCount: StaveCount): SignatureBuilder;
    addStaveLineCount(staveLineCount: StaveLineCount): SignatureBuilder;
    addKey(key: Key): SignatureBuilder;
    addClef(clef: Clef): SignatureBuilder;
    addTime(time: Time): SignatureBuilder;
    build(): Signature;
    private buildMetronome;
    private buildStaveCounts;
    private buildStaveLineCounts;
    private buildClefs;
    private buildKeys;
    private buildTimes;
    private diffMetronome;
    private diffStaveCounts;
    private diffStaveLineCounts;
    private diffClefs;
    private diffKeys;
    private diffTimes;
}
export {};
