opensheetmusicdisplay
Version:
An open source JavaScript engine for displaying MusicXML based on VexFlow.
589 lines (588 loc) • 29.7 kB
TypeScript
import { PagePlacementEnum } from "./GraphicalMusicPage";
import { TextAlignmentEnum } from "../../Common/Enums/TextAlignment";
import { PlacementEnum } from "../VoiceData/Expressions/AbstractExpression";
import { AutoBeamOptions, AlignRestOption, FillEmptyMeasuresWithWholeRests, SkyBottomLineBatchCalculatorBackendType } from "../../OpenSheetMusicDisplay/OSMDOptions";
import { ColoringModes as ColoringMode } from "../../Common/Enums/ColoringModes";
import { Dictionary } from "typescript-collections";
import { FontStyles } from "../../Common/Enums";
import { NoteEnum, AccidentalEnum } from "../../Common/DataObjects/Pitch";
import { ChordSymbolEnum, CustomChord } from "../../MusicalScore/VoiceData/ChordSymbolContainer";
import { GraphicalNote } from "./GraphicalNote";
import { Note } from "../VoiceData/Note";
/** Rendering and Engraving options, more fine-grained than [[IOSMDOptions]].
* Not all of these options are meant to be modified by users of the library,
* full support is only given for [[IOSMDOptions]].
* Nevertheless, there are many useful options here,
* like Render* to (not) render certain elements (e.g. osmd.rules.RenderRehearsalMarks = false)
*/
export declare class EngravingRules {
/** A unit of distance. 1.0 is the distance between lines of a stave for OSMD, which is 10 pixels in Vexflow at osmd.Zoom = 1 (default). */
static unit: number;
SamplingUnit: number;
StaccatoShorteningFactor: number;
/** Height (size) of the sheet title. */
SheetTitleHeight: number;
SheetSubtitleHeight: number;
SheetMinimumDistanceBetweenTitleAndSubtitle: number;
SheetComposerHeight: number;
SheetAuthorHeight: number;
SheetCopyrightHeight: number;
SheetCopyrightMargin: number;
/** Whether to use the (deprecated) OSMD < 1.8.6 way of parsing and displaying subtitles and composer,
* which did not read multiple lines from XML credit-words tags.
* Option will probably be removed soon.
* @deprecated
*/
SheetComposerSubtitleUseLegacyParsing: boolean;
CompactMode: boolean;
PagePlacementEnum: PagePlacementEnum;
PageHeight: number;
PageTopMargin: number;
PageTopMarginNarrow: number;
PageBottomMargin: number;
PageLeftMargin: number;
PageRightMargin: number;
TitleTopDistance: number;
TitleBottomDistance: number;
SystemLeftMargin: number;
SystemRightMargin: number;
SystemLabelsRightMargin: number;
SystemComposerDistance: number;
SystemLyricistDistance: number;
InstrumentLabelTextHeight: number;
MinimumDistanceBetweenSystems: number;
MinSkyBottomDistBetweenSystems: number;
LastSystemMaxScalingFactor: number;
StaffDistance: number;
BetweenStaffDistance: number;
StaffHeight: number;
TabStaffInterlineHeight: number;
TabStaffInterlineHeightForBboxes: number;
BetweenStaffLinesDistance: number;
/** Whether to automatically beam notes that don't already have beams in XML. */
AutoBeamNotes: boolean;
/** Options for autoBeaming like whether to beam over rests. See AutoBeamOptions interface. */
AutoBeamOptions: AutoBeamOptions;
/** Whether to automatically generate new beams for tabs. Also see TabBeamsRendered for existing XML beams. */
AutoBeamTabs: boolean;
BeamWidth: number;
BeamSpaceWidth: number;
BeamForwardLength: number;
FlatBeams: boolean;
FlatBeamOffset: number;
FlatBeamOffsetPerBeam: number;
ClefLeftMargin: number;
ClefRightMargin: number;
/** How many unique note positions a percussion score needs to have to not be rendered on one line.
* To always use 5 lines for percussion, set this to 0. (works unless the XML says <staff-lines>1)
*/
PercussionOneLineCutoff: number;
PercussionForceVoicesOneLineCutoff: number;
PercussionUseXMLDisplayStep: boolean;
PercussionXMLDisplayStepNoteValueShift: number;
PercussionOneLineXMLDisplayStepOctaveOffset: number;
/** Makes the score position notes on the 2 cajon stafflines, and use 2 stafflines even if PercussionOneLineCutoff set.
* Should only be set for cajon scores, as this will disable the PercussionOneLineCutoff.
*/
PercussionUseCajon2NoteSystem: boolean;
BetweenKeySymbolsDistance: number;
KeyRightMargin: number;
RhythmRightMargin: number;
ShowRhythmAgainAfterPartEndOrFinalBarline: boolean;
NewPartAndSystemAfterFinalBarline: boolean;
InStaffClefScalingFactor: number;
DistanceBetweenNaturalAndSymbolWhenCancelling: number;
NoteHelperLinesOffset: number;
MeasureLeftMargin: number;
MeasureRightMargin: number;
DistanceBetweenLastInstructionAndRepetitionBarline: number;
ArpeggioDistance: number;
IdealStemLength: number;
StemNoteHeadBorderYOffset: number;
StemWidth: number;
StemMargin: number;
StemMinLength: number;
StemMaxLength: number;
BeamSlopeMaxAngle: number;
StemMinAllowedDistanceBetweenNoteHeadAndBeamLine: number;
SetWantedStemDirectionByXml: boolean;
GraceNoteScalingFactor: number;
GraceNoteXOffset: number;
/** Set this to e.g. -0.5 or -0.8 to put grace notes a lot closer to the main note. */
GraceNoteGroupXMargin: number;
WedgeOpeningLength: number;
WedgeMeasureEndOpeningLength: number;
WedgeMeasureBeginOpeningLength: number;
WedgePlacementAboveY: number;
WedgePlacementBelowY: number;
WedgeHorizontalMargin: number;
WedgeVerticalMargin: number;
DistanceOffsetBetweenTwoHorizontallyCrossedWedges: number;
WedgeMinLength: number;
WedgeEndDistanceBetweenTimestampsFactor: number;
/** Whether an accent should by default be placed above the note if its note stem is above. Default false (below).
* Applies to accents (>/^), staccato (.), pizzicato (+), mainly (in our samples)
* Note that this can be overwritten if the MusicXML says "placement='below'".
*/
ArticulationAboveNoteForStemUp: boolean;
SoftAccentWedgePadding: number;
SoftAccentSizeFactor: number;
DistanceBetweenAdjacentDynamics: number;
TempoChangeMeasureValidity: number;
TempoContinousFactor: number;
StaccatoScalingFactor: number;
BetweenDotsDistance: number;
OrnamentAccidentalScalingFactor: number;
ChordSymbolTextHeight: number;
ChordSymbolTextAlignmentTop: TextAlignmentEnum;
ChordSymbolTextAlignmentBottom: TextAlignmentEnum;
ChordSymbolBottomMargin: number;
ChordSymbolRelativeXOffset: number;
/** Additional x-shift for short chord symbols (e.g. C, but not Eb/7), to appear more centered. */
ChordSymbolExtraXShiftForShortChordSymbols: number;
/** Threshold width below which to apply ChordSymbolExtraXShiftForShortChordSymbols. */
ChordSymbolExtraXShiftWidthThreshold: number;
ChordSymbolXSpacing: number;
ChordOverlapAllowedIntoNextMeasure: number;
ChordSymbolYOffset: number;
ChordSymbolYPadding: number;
ChordSymbolYAlignment: boolean;
ChordSymbolYAlignmentScope: string;
/** Offset to start of measure (barline) when chord symbol is on whole measure rest.
* An offset of 0 would place the chord symbol directly above the barline, so the default is ~1.2.
*/
ChordSymbolWholeMeasureRestXOffset: number;
ChordSymbolWholeMeasureRestXOffsetMeasure1: number;
ChordSymbolLabelTexts: Dictionary<ChordSymbolEnum, string>;
ChordAccidentalTexts: Dictionary<AccidentalEnum, string>;
CustomChords: CustomChord[];
/** Not always a symbol, can also be text (RepetitionInstruction). Keeping the name for backwards compatibility. */
RepetitionSymbolsYOffset: number;
/** Adds a percent of the stave's width (e.g. 0.4 = 40%) to the x position of end instructions like Fine or D.C. al fine */
RepetitionEndInstructionXShiftAsPercentOfStaveWidth: number;
RehearsalMarkXOffset: number;
RehearsalMarkXOffsetDefault: number;
RehearsalMarkXOffsetSystemStartMeasure: number;
RehearsalMarkYOffset: number;
RehearsalMarkYOffsetDefault: number;
/** y offset added to avoid collisions of rehearsal marks (e.g. "A" or "Verse") with multiple measure rest numbers. */
RehearsalMarkYOffsetAddedForRehearsalMarks: number;
RehearsalMarkFontSize: number;
MeasureNumberLabelHeight: number;
MeasureNumberLabelOffset: number;
MeasureNumberLabelXOffset: number;
/** Whether tuplets should display ratio (3:2 instead of 3 for triplet). Default false. */
TupletsRatioed: boolean;
/** Whether to show a ratio when the XML says "show-number: both". Otherwise uses the default TupletsRatioed. */
TupletsRatioedUseXMLValue: boolean;
/** Whether tuplets (except triplets) should be bracketed (e.g. |--5--| instead of 5). Default false.
* Note that this doesn't affect triplets (|--3--|), which have their own setting TripletsBracketed.
* If false, only tuplets given as bracketed in XML (bracket="yes") will be bracketed.
* (If not given in XML, bracketing is implementation-dependent according to standard)
*/
TupletsBracketed: boolean;
/** Whether all triplets should be bracketed. Overrides tupletsBracketed for triplets.
* If false, only triplets given as bracketed in XML (bracket="yes") will be bracketed.
* (Bracketing all triplets can be cluttering)
*/
TripletsBracketed: boolean;
/** Whether to bracket like the XML says when 'bracket="no"' or "yes" is given.
* Otherwise, OSMD decides bracket usage.
* Note that sometimes the XML doesn't have any 'bracket' value. */
TupletsBracketedUseXMLValue: boolean;
TupletNumberLabelHeight: number;
TupletNumberYOffset: number;
TupletNumberLimitConsecutiveRepetitions: boolean;
TupletNumberMaxConsecutiveRepetitions: number;
TupletNumberAlwaysDisableAfterFirstMax: boolean;
/** Whether to use the <tuplet show-number="value"> value or to ignore it. */
TupletNumberUseShowNoneXMLValue: boolean;
LabelMarginBorderFactor: number;
TupletVerticalLineLength: number;
/** Whether to show tuplet numbers (and brackets) in tabs. Brackets can be disabled via TabTupletsBracketed. */
TupletNumbersInTabs: boolean;
/** Whether to show brackets in tab tuplets. To not render tab tuplets entirely, set TupletNumbersInTabs = false. */
TabTupletsBracketed: boolean;
TabTupletYOffsetBottom: number;
/** Additional offset applied to top tuplets (added to TabTupletYOffset).
* You could apply a negative offset if the piece doesn't have effects like bends,
* which often take some vertical space.
*/
TabTupletYOffsetTop: number;
TabTupletYOffsetEffects: number;
TabBeamsRendered: boolean;
TabKeySignatureRendered: boolean;
/** Whether space should be reserved as if there was a key signature.
* False basically only works for tab-only scores, as it prevents vertical x-alignment with other staves.
* False is more compact for tab-only scores.
*/
TabKeySignatureSpacingAdded: boolean;
TabTimeSignatureRendered: boolean;
/** Whether space should be reserved as if there was a key signature.
* False basically only works for tab-only scores, as it prevents vertical x-alignment with other staves.
* False is more compact for tab-only scores.
*/
TabTimeSignatureSpacingAdded: boolean;
TabFingeringsRendered: boolean;
/** Use an X in tabs when the note has an X notehead, e.g. in the staff above in the classical notes, instead of the fret number */
TabUseXNoteheadShapeForTabNote: boolean;
TabUseXNoteheadAlternativeGlyph: boolean;
TabXNoteheadScale: number;
/** Whether the first measure is allowed to have a left repeat barline, if explicitly given in the MusicXML. */
RepetitionAllowFirstMeasureBeginningRepeatBarline: boolean;
RepetitionEndingLabelHeight: number;
RepetitionEndingLabelXOffset: number;
RepetitionEndingLabelYOffset: number;
RepetitionEndingLineYLowerOffset: number;
RepetitionEndingLineYUpperOffset: number;
/** Whether the cursor should ignore / skip repetitions (alternative name: SkipRepetitions). False by default */
CursorIgnoreRepetitions: boolean;
VoltaOffset: number;
/** X offset applied after label was moved to not overflow the staffline to the left.
* Without this offset, simply removing the overflow is usually too strict, moving it too far unnecessarily.
* e.g. see Beethoven Geliebte sample ("Ziemlich langsam")
*/
LabelXOffsetForStafflineLeftOverflowCheck: number;
TempoExpressionTextAlignment: TextAlignmentEnum;
UnknownExpressionTextAlignment: TextAlignmentEnum;
/** Default alignment of lyrics.
* Left alignments will extend text to the right of the bounding box,
* which facilitates spacing by extending measure width.
*/
LyricsAlignmentStandard: TextAlignmentEnum;
LyricsHeight: number;
LyricsYOffsetToStaffHeight: number;
LyricsYMarginToBottomLine: number;
/** Extra x-shift (to the right) for short lyrics to be better vertically aligned.
* Also see ChordSymbolExtraXShiftForShortChordSymbols, same principle, same default value.
*/
LyricsExtraXShiftForShortLyrics: number;
/** Threshold of the lyric entry's width below which the x-shift is applied. Default 1.4. */
LyricsExtraXShiftForShortLyricsWidthThreshold: number;
/** Whether to enable x padding (to the right) for notes with long lyrics, see LyricsXPaddingFactorForLongLyrics for the degree.
* This helps avoid overlaps and shorten measures, because otherwise the whole measure needs to be stretched to avoid overlaps,
* see MaximumLyricsElongationFactor */
LyricsUseXPaddingForLongLyrics: boolean;
/** How much spacing/padding should be added after notes with long lyrics on short notes
* (>4 characters on <8th note),
* so that the measure doesn't need to be elongated too much to avoid lyrics collisions.
* Default 1 = 10 pixels */
LyricsXPaddingFactorForLongLyrics: number;
/** How wide a text needs to be to trigger lyrics padding for short notes.
* This is visual width, not number of characters, as e.g. 'zzz' is wider than 'iii'.
* Default 3.3.
*/
LyricsXPaddingWidthThreshold: number;
/** Long notes need less padding than short ones, by default we use 0.7 less padding. */
LyricsXPaddingReductionForLongNotes: number;
/** Last note in measure needs less padding because of measure bar and bar start/end padding. */
LyricsXPaddingReductionForLastNoteInMeasure: number;
LyricsXPaddingForLastNoteInMeasure: boolean;
/** Reduction applied for the last note of a measure when its lyric is a multi-syllable
* mid-word continuation (a dash trails to the next syllable, which lives in the next measure).
* Lower than LyricsXPaddingReductionForLastNoteInMeasure because the next measure's first note
* has a syllable + dash glyph right at its start — the usual measure-end buffer doesn't apply.
* Set to 0 for maximum cross-measure clearance (no reduction), or up to
* LyricsXPaddingReductionForLastNoteInMeasure for the same reduction as a normal last note.
* Default 1.0 (regular note 1.2). */
LyricsXPaddingReductionForLastNoteInMeasureCrossMeasureMidWord: number;
VerticalBetweenLyricsDistance: number;
HorizontalBetweenLyricsDistance: number;
BetweenSyllableMaximumDistance: number;
BetweenSyllableMinimumDistance: number;
LyricOverlapAllowedIntoNextMeasure: number;
MinimumDistanceBetweenDashes: number;
MaximumLyricsElongationFactor: number;
SlurPlacementFromXML: boolean;
SlurPlacementAtStems: boolean;
SlurPlacementUseSkyBottomLine: boolean;
BezierCurveStepSize: number;
TPower3: number[];
OneMinusTPower3: number[];
FactorOne: number[];
FactorTwo: number[];
TieGhostObjectWidth: number;
TieYPositionOffsetFactor: number;
MinimumNeededXspaceForTieGhostObject: number;
TieHeightMinimum: number;
TieHeightMaximum: number;
TieHeightInterpolationK: number;
TieHeightInterpolationD: number;
SlurNoteHeadYOffset: number;
SlurEndArticulationYOffset: number;
SlurStartArticulationYOffsetOfArticulation: number;
SlurStemXOffset: number;
SlurSlopeMaxAngle: number;
SlurTangentMinAngle: number;
SlurTangentMaxAngle: number;
SlurHeightFactor: number;
SlurHeightFlattenLongSlursFactorByWidth: number;
SlurHeightFlattenLongSlursFactorByAngle: number;
SlurHeightFlattenLongSlursCutoffAngle: number;
SlurHeightFlattenLongSlursCutoffWidth: number;
SlursStartingAtSameStaffEntryYOffset: number;
SlurMaximumYControlPointDistance: number;
GlissandoNoteOffset: number;
GlissandoStafflineStartMinimumWidth: number;
GlissandoStafflineStartYDistanceToNote: number;
GlissandoStafflineEndOffset: number;
GlissandoDefaultWidth: number;
TempoYSpacing: number;
InstantaneousTempoTextHeight: number;
ContinuousDynamicTextHeight: number;
/** Whether to use the XML offset value for expressions, especially wedges (crescendo). See #1477 */
UseEndOffsetForExpressions: boolean;
MoodTextHeight: number;
UnknownTextHeight: number;
ContinuousTempoTextHeight: number;
VexFlowDefaultNotationFontScale: number;
VexFlowDefaultTabFontScale: number;
TremoloStrokeScale: number;
TremoloYSpacingScale: number;
TremoloBuzzRollThickness: number;
StaffLineWidth: number;
StaffLineColor: string;
LedgerLineWidth: number;
LedgerLineStrokeStyle: string;
LedgerLineColorDefault: string;
WedgeLineWidth: number;
TupletLineWidth: number;
LyricUnderscoreLineWidth: number;
SystemThinLineWidth: number;
SystemBoldLineWidth: number;
SystemRepetitionEndingLineWidth: number;
SystemDotWidth: number;
MultipleRestMeasureDefaultWidth: number;
MultipleRestMeasureAddKeySignature: boolean;
/** Use the same measure width for all measures (experimental).
* Note that this will use the largest width of all measures,
* as Vexflow will mess up the layout with overlays if using less than minimum width.
* See formatter.preCalculateMinTotalWidth()
*/
FixedMeasureWidth: boolean;
/** Use a fixed width for all measures (experimental).
* This is mostly for debugging or for when you already know how big the measures
* in the target score are, because using a too low width will cause overlaps in Vexflow.
*/
FixedMeasureWidthFixedValue: number;
FixedMeasureWidthUseForPickupMeasures: boolean;
DistanceBetweenVerticalSystemLines: number;
DistanceBetweenDotAndLine: number;
RepeatEndStartPadding: number;
OctaveShiftLineWidth: number;
OctaveShiftVerticalLineLength: number;
OctaveShiftOnWholeMeasureNoteUntilEndOfMeasure: boolean;
GraceLineWidth: number;
MinimumStaffLineDistance: number;
MinSkyBottomDistBetweenStaves: number;
MinimumCrossedBeamDifferenceMargin: number;
/** Maximum width of sheet / HTMLElement containing the score. Canvas is limited to 32767 in current browsers, though SVG isn't.
* Setting this to > 32767 will break the canvas backend (no problem if you only use SVG).
*/
SheetMaximumWidth: number;
VoiceSpacingMultiplierVexflow: number;
VoiceSpacingAddendVexflow: number;
PickupMeasureWidthMultiplier: number;
/** The spacing between a repetition that is followed by an implicit/pickup/incomplete measure.
* (E.g. in a 4/4 time signature, a measure that repeats after the 3rd beat, continuing with a pickup measure)
*/
PickupMeasureRepetitionSpacing: number;
/** Multiplier for PickupMeasureRepetitionSpacing if there is only one note in the pickup measure. This usually needs a lot more space. */
PickupMeasureSpacingSingleNoteAddend: number;
DisplacedNoteMargin: number;
MinNoteDistance: number;
SubMeasureXSpacingThreshold: number;
MeasureDynamicsMaxScalingFactor: number;
WholeRestXShiftVexflow: number;
MetronomeMarksDrawn: boolean;
MetronomeMarkXShift: number;
MetronomeMarkYShift: number;
SoftmaxFactorVexFlow: number;
/** Stagger (x-shift) whole notes that are the same note, but in different voices (show 2 instead of 1). */
StaggerSameWholeNotes: boolean;
MaxInstructionsConstValue: number;
NoteDistances: number[];
NoteDistancesScalingFactors: number[];
DurationDistanceDict: {
[_: number]: number;
};
DurationScalingDistanceDict: {
[_: number]: number;
};
/** Whether to align rests. 0 = Never, 1 = Always, 2 = Auto.
* Currently not recommended because rests are now positioned to avoid collisions with notes. */
AlignRests: AlignRestOption;
RestCollisionYPadding: number;
FillEmptyMeasuresWithWholeRest: FillEmptyMeasuresWithWholeRests | number;
ArpeggiosGoAcrossVoices: boolean;
RenderArpeggios: boolean;
RenderSlurs: boolean;
RenderGlissandi: boolean;
ColoringMode: ColoringMode;
ColoringEnabled: boolean;
ColorStemsLikeNoteheads: boolean;
ColorFlags: boolean;
ColorBeams: boolean;
ColoringSetCurrent: Dictionary<NoteEnum | number, string>;
/** Default color for all musical elements including key signature etc. Default undefined. */
DefaultColorMusic: string;
DefaultColorNotehead: string;
DefaultColorRest: string;
DefaultColorStem: string;
DefaultColorLabel: string;
DefaultColorLyrics: string;
DefaultColorChordSymbol: string;
DefaultColorTitle: string;
DefaultColorCursor: string;
DefaultFontFamily: string;
DefaultFontStyle: FontStyles;
DefaultVexFlowNoteFont: string;
MaxMeasureToDrawIndex: number;
/** The setting given in osmd.setOptions(), which may lead to a different index if there's a pickup measure. */
MaxMeasureToDrawNumber: number;
MinMeasureToDrawIndex: number;
/** The setting given in osmd.setOptions(), which may lead to a different index if there's a pickup measure.
* If there's a pickup measure (measure 0), and we want to draw from measure number 2,
* we need to skip measure index 0 (the pickup measure).
*/
MinMeasureToDrawNumber: number;
MaxPageToDrawNumber: number;
MaxSystemToDrawNumber: number;
/** Whether to render a label for the composer of the piece at the top of the sheet. */
RenderComposer: boolean;
RenderTitle: boolean;
RenderSubtitle: boolean;
RenderLyricist: boolean;
RenderCopyright: boolean;
RenderPartNames: boolean;
RenderPartAbbreviations: boolean;
/** Whether two render system labels on page 2+. This doesn't affect the default endless PageFormat. */
RenderSystemLabelsAfterFirstPage: boolean;
RenderFingerings: boolean;
RenderMeasureNumbers: boolean;
RenderMeasureNumbersOnlyAtSystemStart: boolean;
UseXMLMeasureNumbers: boolean;
RenderLyrics: boolean;
RenderChordSymbols: boolean;
RenderMultipleRestMeasures: boolean;
AutoGenerateMultipleRestMeasuresFromRestMeasures: boolean;
RenderRehearsalMarks: boolean;
RenderClefsAtBeginningOfStaffline: boolean;
RenderKeySignatures: boolean;
RenderTimeSignatures: boolean;
RenderFirstTempoExpression: boolean;
RenderPedals: boolean;
RenderWavyLines: boolean;
DynamicExpressionMaxDistance: number;
DynamicExpressionSpacer: number;
IgnoreRepeatedDynamics: boolean;
ExpressionsUseXMLColor: boolean;
ArticulationPlacementFromXML: boolean;
/** Percent distance of breath marks to next note or end of staff, e.g. 0.8 = 80%. */
BreathMarkDistance: number;
/** Where to draw fingerings (Above, Below, AboveOrBelow, Left, Right, or Auto).
* Default AboveOrBelow. Auto experimental. */
FingeringPosition: PlacementEnum;
FingeringPositionFromXML: boolean;
FingeringPositionGrace: PlacementEnum;
FingeringInsideStafflines: boolean;
FingeringLabelFontHeight: number;
FingeringOffsetX: number;
FingeringOffsetY: number;
FingeringPaddingY: number;
FingeringTextSize: number;
/** Whether to render string numbers in classical scores, i.e. not the string numbers in tabs, but e.g. for violin. */
RenderStringNumbersClassical: boolean;
/** This is not for tabs, but for classical scores, especially violin. */
StringNumberOffsetY: number;
NewSystemAtXMLNewSystemAttribute: boolean;
/** Whether to begin a new system when a page break is given in XML ('new-page="yes"'), but newPageFromXML is false.
* Default false, because it can lead to nonsensical system breaks after a single measure,
* as OSMD does a different layout than the original music program exported from.
* */
NewSystemAtXMLNewPageAttribute: boolean;
NewPageAtXMLNewPageAttribute: boolean;
/** Force OSMD to render only x measures per line/system, creating line breaks / system breaks. Disabled if set to 0. */
RenderXMeasuresPerLineAkaSystem: number;
PageFormat: PageFormat;
PageBackgroundColor: string;
/** Whether dark mode is enabled. This is read-only, to set this, please use osmd.setOptions({darkMode: true}). */
DarkModeEnabled: boolean;
UsePageBackgroundColorForTabNotes: boolean;
RenderSingleHorizontalStaffline: boolean;
RestoreCursorAfterRerender: boolean;
StretchLastSystemLine: boolean;
/** Ignore brackets - e.g. `( )` - that were supposed to be around a note,
* but were inserted as a words element in the MusicXML, which can't be matched to the note anymore,
* and would otherwise just be placed somewhere else. See OSMD Issue 1251. */
IgnoreBracketsWords: boolean;
PlaceWordsInsideStafflineFromXml: boolean;
PlaceWordsInsideStafflineYOffset: number;
SpacingBetweenTextLines: number;
NoteToGraphicalNoteMap: Dictionary<number, GraphicalNote>;
NoteToGraphicalNoteMapObjectCount: number;
/** How many times osmd.render() was already called on the currently loaded score.
* Resets after osmd.load() (via osmd.reset()).
* Can be relevant for transposition or generally informative.
*/
RenderCount: number;
/** The skyline and bottom-line batch calculation algorithm to use.
* Note that this can be overridden if AlwaysSetPreferredSkyBottomLineBackendAutomatically is true (which is the default).
*/
PreferredSkyBottomLineBatchCalculatorBackend: SkyBottomLineBatchCalculatorBackendType;
/** Whether to consider using WebGL in Firefox in EngravingRules.setPreferredSkyBottomLineBackendAutomatically() */
DisableWebGLInFirefox: boolean;
/** Whether to consider using WebGL in Safari/iOS in EngravingRules.setPreferredSkyBottomLineBackendAutomatically() */
DisableWebGLInSafariAndIOS: boolean;
/** The minimum number of measures in the sheet where the skyline and bottom-line batch calculation is enabled.
* Batch is faster for medium to large size scores, but slower for very short scores.
*/
SkyBottomLineBatchMinMeasures: number;
/** The minimum number of measures in the sheet where WebGL will be used. WebGL is slower for short scores, but much faster for large ones.
* Note that WebGL is currently never used in Safari and Firefox, because it's always slower there.
*/
SkyBottomLineWebGLMinMeasures: number;
/** Whether to always set preferred backend (WebGL or Plain) automatically, depending on browser and number of measures. */
AlwaysSetPreferredSkyBottomLineBackendAutomatically: boolean;
/** Currently only used in audio player */
UseInterpolatedTempoForAccelerandoEtc: boolean;
constructor();
loadDefaultValues(): void;
setPreferredSkyBottomLineBackendAutomatically(numberOfGraphicalMeasures?: number): void;
/** Makes it so that all musical elements (including key/time signature)
* are colored with the given color by default,
* unless an element has a different color set (e.g. VoiceEntry.StemColor).
*/
applyDefaultColorMusic(color: string): void;
addGraphicalNoteToNoteMap(note: Note, graphicalNote: GraphicalNote): void;
/** Returns the GraphicalNote corresponding to (its) note. Also used by Cursor.GNotesUnderCursor().
* We don't want to save a GraphicalNote reference in Note, see Note.NoteToGraphicalNoteObjectId.
*/
GNote(note: Note): GraphicalNote;
/** This should be done before a new sheet is loaded, not each re-render (otherwise the map would end empty). */
clearMusicSheetObjects(): void;
resetChordAccidentalTexts(chordAccidentalTexts: Dictionary<AccidentalEnum, string>, useChordAccidentalsUnicode: boolean): void;
setChordSymbolLabelText(key: ChordSymbolEnum, value: string): void;
resetChordSymbolLabelTexts(chordtexts: Dictionary<ChordSymbolEnum, string>): Dictionary<ChordSymbolEnum, string>;
addChordName(altName: string, chordKindText: string, adds: string[], alts: string[], subs: string[]): void;
renameChord(altName: string, newAltName: string): void;
resetChordNames(): void;
/**
* This method maps NoteDurations to Distances and DistancesScalingFactors.
*/
/**
* Calculate Curve-independend factors, to be used later in the Slur- and TieCurvePoints calculation
*/
private calculateCurveParametersArrays;
}
export declare class PageFormat {
constructor(width: number, height: number, idString?: string);
width: number;
height: number;
idString: string;
get aspectRatio(): number;
/** Undefined page format: use default page format. */
get IsUndefined(): boolean;
static get UndefinedPageFormat(): PageFormat;
Equals(otherPageFormat: PageFormat): boolean;
}