export interface Position {
    line: number;
    column: number;
}
export interface BaseParsedNode {
    type: string;
    raw: string;
    range: [number, number];
    loc: {
        start: Position;
        end: Position;
    };
}
export interface TempoNode extends BaseParsedNode {
    type: 'TempoNode';
    /** Beats per minute */
    beat: number;
}
export interface KeySignatureNode extends BaseParsedNode {
    type: 'KeySignatureNode';
    tonic: number;
    accidental: 0 | 1 | -1;
    pitch: string;
}
export interface TimeSignatureNode extends BaseParsedNode {
    type: 'TimeSignatureNode';
    /** Beats per measure */
    beat: number;
    /** Beats per note */
    unit: number;
}
export interface NoteNode extends BaseParsedNode {
    type: 'NoteNode';
    continuation: boolean;
    accidental: 0 | 1 | -1;
    notation: number;
    octave: number;
    dot: number;
    half: number;
    leaning: boolean;
}
export interface DashNode extends BaseParsedNode {
    type: 'DashNode';
}
export interface BarLineNode extends BaseParsedNode {
    type: 'BarLineNode';
    end: boolean;
    repeat: 0 | 1 | -1;
}
export interface FineNode extends BaseParsedNode {
    type: 'FineNode';
    except: number;
}
export interface UnknownNode extends BaseParsedNode {
    type: 'UnknownNode';
}
export type ParsedNode = TempoNode | KeySignatureNode | TimeSignatureNode | NoteNode | DashNode | BarLineNode | FineNode | UnknownNode;
export interface ParsedNotation {
    type: 'ParsedNotation';
    nodes: ParsedNode[];
}
export declare function parse(notation: string): ParsedNotation;
export type Serializable<T extends BaseParsedNode> = Omit<T, 'range' | 'loc'> & Partial<Pick<T, 'range' | 'loc'>>;
export type SerializableParsedNode = Serializable<TempoNode> | Serializable<KeySignatureNode> | Serializable<TimeSignatureNode> | Serializable<NoteNode> | Serializable<DashNode> | Serializable<BarLineNode> | Serializable<FineNode> | Serializable<UnknownNode>;
export type SerializableParsedNotation = Omit<ParsedNotation, 'nodes'> & {
    nodes: SerializableParsedNode[];
};
export declare function stringify(notation: SerializableParsedNotation): string;
