import { Fraction } from "../Common/DataObjects/Fraction";
import { MusicPartManager } from "./MusicParts/MusicPartManager";
import { SourceMeasure } from "./VoiceData/SourceMeasure";
import { Repetition } from "./MusicSource/Repetition";
import { DynamicsContainer } from "./VoiceData/HelperObjects/DynamicsContainer";
import { InstrumentalGroup } from "./InstrumentalGroup";
import { Instrument } from "./Instrument";
import { Label } from "./Label";
import { Staff } from "./VoiceData/Staff";
import { MusicSheetErrors } from "../Common/DataObjects/MusicSheetErrors";
import { MultiTempoExpression } from "./VoiceData/Expressions/MultiTempoExpression";
import { EngravingRules } from "./Graphical/EngravingRules";
import { PlaybackSettings } from "../Common/DataObjects/PlaybackSettings";
/**
 * This is the representation of a complete piece of sheet music.
 * It includes the contents of a MusicXML file after the reading.
 * Notes: the musicsheet might not need the Rules, e.g. in the testframework. The EngravingRules Constructor
 * fails when no FontInfo exists, which needs a TextMeasurer
 */
export declare class MusicSheet {
    constructor();
    static defaultTitle: string;
    userStartTempoInBPM: number;
    pageWidth: number;
    private idString;
    private sourceMeasures;
    private repetitions;
    private dynListStaves;
    private timestampSortedDynamicExpressionsList;
    private timestampSortedTempoExpressionsList;
    private instrumentalGroups;
    /** The parts in the sheet, e.g. piano left hand, or piano right hand, or violin. */
    private instruments;
    private playbackSettings;
    private path;
    private title;
    private subtitle;
    private composer;
    private lyricist;
    private copyright;
    private musicPartManager;
    private musicSheetErrors;
    private staves;
    private selectionStart;
    private selectionEnd;
    private transpose;
    private defaultStartTempoInBpm;
    private drawErroneousMeasures;
    private hasBeenOpenedForTheFirstTime;
    private currentEnrolledPosition;
    private rules;
    private hasBPMInfo;
    /** Global factor / scale by which all measure widths will be scaled.
     * (e.g. 0.7 = all measures are only 70% as long)
     * This is similar to SourceMeasure.widthFactor,
     *   which only applies to one measure and is multiplicative to the global factor.
     *   (so if globalWidthFactor is 0.7 and measure.widthFactor is 0.7, that measure's length will be 49% as long)
     * As with measure.widthFactor, use this with caution, as it can cause overlaps, especially with lyrics.
     */
    MeasureWidthFactor: number;
    /** Ignore tempo instructions like metronome numbers, e.g. because a bpm was set in the UI */
    IgnoreTempoInstructions: boolean;
    /**
     * Get the global index within the music sheet for this staff.
     * @param staff
     * @returns {number}
     */
    static getIndexFromStaff(staff: Staff): number;
    get SourceMeasures(): SourceMeasure[];
    set SourceMeasures(value: SourceMeasure[]);
    get Repetitions(): Repetition[];
    set Repetitions(value: Repetition[]);
    get DynListStaves(): DynamicsContainer[][];
    set TimestampSortedTempoExpressionsList(value: MultiTempoExpression[]);
    get TimestampSortedTempoExpressionsList(): MultiTempoExpression[];
    get TimestampSortedDynamicExpressionsList(): DynamicsContainer[];
    get InstrumentalGroups(): InstrumentalGroup[];
    get Parts(): Instrument[];
    get Instruments(): Instrument[];
    get SheetPlaybackSetting(): PlaybackSettings;
    set SheetPlaybackSetting(value: PlaybackSettings);
    get DrawErroneousMeasures(): boolean;
    set DrawErroneousMeasures(value: boolean);
    get HasBeenOpenedForTheFirstTime(): boolean;
    set HasBeenOpenedForTheFirstTime(value: boolean);
    InitializeStartTempoInBPM(startTempo: number): void;
    get DefaultStartTempoInBpm(): number;
    set DefaultStartTempoInBpm(value: number);
    get Path(): string;
    set Path(value: string);
    get Staves(): Staff[];
    get TitleString(): string;
    set TitleString(value: string);
    get SubtitleString(): string;
    set SubtitleString(value: string);
    get ComposerString(): string;
    set ComposerString(value: string);
    get LyricistString(): string;
    set LyricistString(value: string);
    get CopyrightString(): string;
    set CopyrightString(value: string);
    get Title(): Label;
    set Title(value: Label);
    get Subtitle(): Label;
    set Subtitle(value: Label);
    get Composer(): Label;
    set Composer(value: Label);
    get Lyricist(): Label;
    set Lyricist(value: Label);
    get Copyright(): Label;
    set Copyright(value: Label);
    get Rules(): EngravingRules;
    set Rules(value: EngravingRules);
    get SheetErrors(): MusicSheetErrors;
    get SelectionStart(): Fraction;
    set SelectionStart(value: Fraction);
    get SelectionEnd(): Fraction;
    set SelectionEnd(value: Fraction);
    set HasBPMInfo(value: boolean);
    get HasBPMInfo(): boolean;
    addMeasure(measure: SourceMeasure): void;
    checkForInstrumentWithNoVoice(): void;
    /**
     *
     * @param staffIndexInMusicSheet - The global staff index, iterating through all staves of all instruments.
     * @returns {Staff}
     */
    getStaffFromIndex(staffIndexInMusicSheet: number): Staff;
    fillStaffList(): void;
    get MusicPartManager(): MusicPartManager;
    set MusicPartManager(value: MusicPartManager);
    getCompleteNumberOfStaves(): number;
    /**
     * Return a sourceMeasureList, where the given indices correspond to the whole SourceMeasureList of the MusicSheet.
     * @param start
     * @param end
     * @returns {SourceMeasure[]}
     */
    getListOfMeasuresFromIndeces(start: number, end: number): SourceMeasure[];
    /**
     * Returns the next SourceMeasure from a given SourceMeasure.
     * @param measure
     */
    getNextSourceMeasure(measure: SourceMeasure): SourceMeasure;
    /**
     * Returns the first SourceMeasure of MusicSheet.
     */
    getFirstSourceMeasure(): SourceMeasure;
    /**
     * Returns the last SourceMeasure of MusicSheet.
     */
    getLastSourceMeasure(): SourceMeasure;
    resetAllNoteStates(): void;
    getMusicSheetInstrumentIndex(instrument: Instrument): number;
    getGlobalStaffIndexOfFirstStaff(instrument: Instrument): number;
    /**
     * Set to the index-given Repetition a new (set from user) value.
     * @param index
     * @param value
     */
    setRepetitionNewUserNumberOfRepetitions(index: number, value: number): void;
    /**
     * Return the [[Repetition]] from the given index.
     * @param index
     * @returns {any}
     */
    getRepetitionByIndex(index: number): Repetition;
    CompareTo(other: MusicSheet): number;
    getExpressionsStartTempoInBPM(): number;
    get Errors(): {
        [n: number]: string[];
    };
    get FirstMeasureNumber(): number;
    get LastMeasureNumber(): number;
    get CurrentEnrolledPosition(): Fraction;
    set CurrentEnrolledPosition(value: Fraction);
    get Transpose(): number;
    /** Sets the number of halftones for transposition.
     * E.g. +1 halftone will transpose Eb major to E major.
     * also see Instrument.Transpose (e.g. osmd.Sheet.Instruments[0].Transpose will additionally transpose this instrument only)
     * osmd.TransposeCaculator needs to be defined/created for this to take effect. (just set it with new TransposeCalculator())
     */
    set Transpose(value: number);
    get FullNameString(): string;
    get IdString(): string;
    set IdString(value: string);
    getEnrolledSelectionStartTimeStampWorkaround(): Fraction;
    get SheetEndTimestamp(): Fraction;
    /**
     * Works only if the [[SourceMeasure]]s are already filled with VerticalStaffEntryContainers!
     * @param timeStamp
     * @returns {SourceMeasure}
     */
    getSourceMeasureFromTimeStamp(timeStamp: Fraction): SourceMeasure;
    findSourceMeasureFromTimeStamp(timestamp: Fraction): SourceMeasure;
    getVisibleInstruments(): Instrument[];
}
