28#include "musx/util/Fraction.h"
29#include "BaseClasses.h"
240 {
return isLinear() ? int(int8_t(
key & 0xff)) + getAlterationOffset(ctx) : 0; }
256 return isSameConcert(src) && m_alterationOffset == src.m_alterationOffset && m_octaveDisplacement == src.m_octaveDisplacement;
305 std::optional<std::vector<int>>
calcKeyMap()
const;
311 std::unique_ptr<music_theory::Transposer>
createTransposer(
int displacement,
int alteration)
const;
317 MUSX_INTEGRITY_ERROR(
"Key signature has invalid key value: " + std::to_string(
key));
324 std::vector<unsigned> calcTonalCenterArrayForSharps()
const;
325 std::vector<unsigned> calcTonalCenterArrayForFlats()
const;
326 std::vector<unsigned> calcTonalCenterArray(
KeyContext ctx)
const;
327 std::vector<int> calcAcciAmountsArray(
KeyContext ctx)
const;
328 std::vector<unsigned> calcAcciOrderArray(
KeyContext ctx)
const;
330 int m_octaveDisplacement{};
331 int m_alterationOffset{};
395 {
return std::accumulate(
units.begin(),
units.end(),
Edu{}); }
411 { return acc + (comp.sumCounts() * comp.sumUnits()); }
413 return result /
Edu(NoteType::Whole);
443 void checkIndex(
size_t index)
const
446 throw std::invalid_argument(
"Index out of range. The time signature has " + std::to_string(
components.size())
447 +
" elements. The index requested was " + std::to_string(index) +
".");
455 explicit TimeSignature(
const DocumentWeakPtr& document,
int beats,
Edu unit,
bool hasCompositeTop,
bool hasCompositeBottom,
456 std::optional<bool> abbreviate = std::nullopt);
462 explicit TimeSignature(
const DocumentWeakPtr& document,
const TimeSigComponent& timeSigUnit, std::optional<bool> abbreviate)
463 : CommonClassBase(document), m_abbreviate(abbreviate)
468 std::optional<bool> m_abbreviate;
470 friend class others::Measure;
471 friend class details::IndependentStaffDetails;
510 :
OthersBase(document, partId, shareMode, cmper) {}
547 Cmper cmper = 0, std::optional<Inci> inci = std::nullopt)
548 :
OthersBase(document, partId, shareMode, cmper, inci)
572 std::optional<std::pair<MeasCmper, Edu>>
nextLocation(
const std::optional<InstCmper>& forStaff = std::nullopt)
const;
596 :
OthersBase(document, partId, shareMode, cmper) {}
DocumentPtr getDocument() const
Gets a reference to the Document.
Definition BaseClasses.h:85
virtual void integrityCheck()
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition BaseClasses.h:132
ShareMode
Describes how this instance is shared between part and score.
Definition BaseClasses.h:68
Base class for classes that are commonly used among others, details, entries, and/or texts....
Definition BaseClasses.h:178
CommonClassBase(const DocumentWeakPtr &document)
Constructs a CommonClassBase object.
Definition BaseClasses.h:185
Represents the default font settings for a particular element type.
Definition CommonClasses.h:119
bool calcIsSymbolFont() const
Calculates if this is a symbol font. (See others::FontDefinition::calcIsSymbolFont....
Definition Implementations.cpp:1169
bool strikeout
Strikeout effect.
Definition CommonClasses.h:126
void setFontIdByName(const std::string &name)
Sets the id of the font from a string name.
Definition Implementations.cpp:1141
Cmper fontId
Font identifier. This is a Cmper for others::FontDefinition.
Definition CommonClasses.h:121
static std::vector< std::filesystem::path > calcSMuFLPaths()
Returns the standard SMuFL font folder.
Definition Implementations.cpp:1177
bool calcIsSMuFL() const
Calculates whether this is a SMuFL font.
Definition CommonClasses.h:174
std::string getName() const
Get the name of the font.
Definition Implementations.cpp:1133
static const xml::XmlElementArray< FontInfo > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
void setEnigmaStyles(uint16_t efx)
Set style effects based on a bitmask. This is mainly useful for capturing text styles from enigma str...
Definition CommonClasses.h:151
bool italic
Italic effect.
Definition CommonClasses.h:124
bool hidden
Hidden effect.
Definition CommonClasses.h:128
bool calcIsDefaultMusic() const
Calculates if this is the default music font.
Definition CommonClasses.h:162
int fontSize
Font size.
Definition CommonClasses.h:122
bool underline
Underline effect.
Definition CommonClasses.h:125
bool absolute
Fixed size effect.
Definition CommonClasses.h:127
std::optional< std::filesystem::path > calcSMuFLMetaDataPath() const
Returns the filepath of the SMuFL font's metadata json file, if any.
Definition Implementations.cpp:1153
bool bold
Bold effect.
Definition CommonClasses.h:123
Shared key signature class that is contained in other classes. (See others::Measure)
Definition CommonClasses.h:191
Cmper getKeyMode() const
Returns the key mode.
Definition CommonClasses.h:234
int getAlteration(KeyContext ctx) const
For linear keys, returns the number of sharps or flats from -7..7 (if any).
Definition CommonClasses.h:239
bool hideKeySigShowAccis
Instead of a key signature, show accidentals for the key on the notes where they occur.
Definition CommonClasses.h:218
bool isLinear() const
whether this is a linear key
Definition CommonClasses.h:242
int calcEDODivisions() const
Calculates the number of EDO division for the key. (The standard value is 12.)
Definition Implementations.cpp:1829
bool isBuiltIn() const
whether this is a built-in key
Definition CommonClasses.h:244
KeyContext
Indicates whether to compute key signature values in concert or written pitch.
Definition CommonClasses.h:205
@ Written
Use written pitch (with transposition)
@ Concert
Use concert pitch (untransposed)
int calcTonalCenterIndex(KeyContext ctx) const
Calculates the tonal center index for the key, where C=0, D=1, E=2, ...
Definition Implementations.cpp:1713
int getOctaveDisplacement(KeyContext ctx) const
The octave displacement if this key is a transposed key.
Definition CommonClasses.h:298
uint16_t key
16-bit value intepreted as follows:
Definition CommonClasses.h:216
std::unique_ptr< music_theory::Transposer > createTransposer(int displacement, int alteration) const
Creates a transposer for this KeySignature instance.
Definition Implementations.cpp:1837
std::optional< music_theory::DiatonicMode > calcDiatonicMode() const
If this key specifies a diatonic mode, returns the mode. This value is independent of EDO divisions....
Definition Implementations.cpp:1842
bool isSameConcert(const KeySignature &src)
returns whether the two key signatures represent the same concert key signature, ignoring transpositi...
Definition CommonClasses.h:260
void setTransposition(int interval, int keyAdjustment, bool simplify)
Transposes the key by the specified amounts. Set them to zero to remove transposition.
Definition Implementations.cpp:1756
int calcAlterationOnNote(unsigned noteIndex, KeyContext ctx) const
Calculates the amount of alteration on a note int the key.
Definition Implementations.cpp:1724
bool isMinor() const
whether this is a built-in minor key
Definition CommonClasses.h:246
void integrityCheck() override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition CommonClasses.h:313
bool isSame(const KeySignature &src)
returns whether the two key signatures represent the same key signature, taking into account transpos...
Definition CommonClasses.h:254
bool isNonLinear() const
whether this is a non-linear key
Definition CommonClasses.h:243
static const xml::XmlElementArray< KeySignature > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool isMajor() const
whether this is a built-in major key
Definition CommonClasses.h:245
std::optional< std::vector< int > > calcKeyMap() const
Calculates the key's diatonic key map.
Definition Implementations.cpp:1791
bool keyless
Indicates the absence of a key signature.
Definition CommonClasses.h:217
Contains the syllable information for a single syllable. (See texts::LyricsTextBase)
Definition CommonClasses.h:347
bool hasHyphenAfter
indicates the syllable if followed by a hyphen.
Definition CommonClasses.h:352
std::string syllable
the syllable text with no hyphenation or font information.
Definition CommonClasses.h:350
bool hasHyphenBefore
indicates the syllable is preceded by a hyphen.
Definition CommonClasses.h:351
Base class for all "others" types.
Definition BaseClasses.h:223
Shared time signature class that is derived from other classes. (See others::Measure)
Definition CommonClasses.h:373
bool isCutTime() const
Returns if this time signature is cut time.
Definition Implementations.cpp:3781
std::vector< TimeSigComponent > components
the components in the time signature
Definition CommonClasses.h:398
bool isSame(const TimeSignature &src)
returns whether the two time signatures represent the same time signature
Definition CommonClasses.h:417
util::Fraction calcTotalDuration() const
Calculates the total duration of the time signature as a fraction of a whole note.
Definition CommonClasses.h:407
std::optional< char32_t > getAbbreviatedSymbol() const
Returns the abbreviated symbol (code point) for this time signature, or std::nullopt if none.
Definition Implementations.cpp:3750
bool isCommonTime() const
Returns if this time signature is common time.
Definition Implementations.cpp:3773
std::pair< util::Fraction, NoteType > calcSimplified() const
Calculates the simplest form of of this time signature, expressed as a fractional count of NoteType u...
Definition Implementations.cpp:3789
std::shared_ptr< TimeSignature > createComponent(size_t index) const
Creates a time signature corresponding to the component at index.
Definition CommonClasses.h:425
Represents independent time and key signature overrides for a staff.
Definition Details.h:715
Represents the enclosure settings for text expressions.
Definition CommonClasses.h:483
bool notTall
"Enforce Minimum Width": don't let shape get taller than it is wide
Definition CommonClasses.h:521
Evpu yAdd
Center Y offset - offsets text from center (in EVPU).
Definition CommonClasses.h:513
Enclosure(const DocumentWeakPtr &document, Cmper partId=0, ShareMode shareMode=ShareMode::All, Cmper cmper=0)
Constructs an Enclosure object.
Definition CommonClasses.h:509
bool roundCorners
Whether the enclosure has rounded corners.
Definition CommonClasses.h:523
Efix lineWidth
Line thickness in 64ths of an EVPU (EFIX).
Definition CommonClasses.h:516
static const xml::XmlElementArray< Enclosure > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool opaque
Whether the enclosure is opaque.
Definition CommonClasses.h:522
Shape
Enumeration for enclosure shapes.
Definition CommonClasses.h:490
@ NoEnclosure
No enclosure.
Evpu yMargin
Half height - extra space on top/bottom sides (in EVPU).
Definition CommonClasses.h:515
Shape shape
Enclosure shape (default: NoEnclosure).
Definition CommonClasses.h:517
bool fixedSize
Whether the enclosure is fixed size (ignore text bounding box)
Definition CommonClasses.h:519
bool equalAspect
"Match Height and Width"
Definition CommonClasses.h:520
Efix cornerRadius
Corner radius (in EFIX).
Definition CommonClasses.h:518
Evpu xMargin
Half width - extra space on left/right sides (in EVPU).
Definition CommonClasses.h:514
Evpu xAdd
Center X offset - offsets text from center (in EVPU).
Definition CommonClasses.h:512
Represents the attributes of a measure.
Definition Others.h:964
Represents a range of music using measure and EDUs.
Definition CommonClasses.h:536
Edu startEdu
Starting EDU (Elapsed Durational Unit) in the range.
Definition CommonClasses.h:553
MeasCmper endMeas
Ending measure in the range.
Definition CommonClasses.h:554
static const xml::XmlElementArray< MusicRange > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
std::optional< std::pair< MeasCmper, Edu > > nextLocation(const std::optional< InstCmper > &forStaff=std::nullopt) const
Returns the next metric location following the music range.
Definition Implementations.cpp:2186
Edu endEdu
Ending EDU (Elapsed Durational Unit) in the range.
Definition CommonClasses.h:555
MusicRange(const DocumentWeakPtr &document, Cmper partId=SCORE_PARTID, ShareMode shareMode=ShareMode::All, Cmper cmper=0, std::optional< Inci > inci=std::nullopt)
Constructs a MusicRange object.
Definition CommonClasses.h:546
MeasCmper startMeas
Starting measure in the range.
Definition CommonClasses.h:552
bool contains(MeasCmper measId, Edu eduPosition) const
Returns true of the given metric location is contained in this MusicRange instance.
Definition CommonClasses.h:560
Contains horizontal and vertical offsets, alignment, and expansion settings for name positioning.
Definition CommonClasses.h:585
bool indivPos
Indicates that this positioning overrides the default positioning. (Not used by options::StaffOptions...
Definition CommonClasses.h:609
NamePositioning(const DocumentWeakPtr &document, Cmper partId=SCORE_PARTID, ShareMode shareMode=ShareMode::All, Cmper cmper=0)
Constructs an NamePositioning object.
Definition CommonClasses.h:595
bool expand
"Expand Single Word"
Definition CommonClasses.h:611
AlignJustify
Alignment and justification options for staff and group names.
Definition CommonClasses.h:600
@ Center
Center alignment.
@ Left
Left alignment or justification (the default value.)
Evpu horzOff
Horizontal distance from staff in Evpu.
Definition CommonClasses.h:606
AlignJustify hAlign
Horizontal alignment for the name text. (xml node is <halign>)
Definition CommonClasses.h:610
AlignJustify justify
Justification for the name text.
Definition CommonClasses.h:608
Evpu vertOff
Vertical offset from staff in Evpu.
Definition CommonClasses.h:607
static const xml::XmlElementArray< NamePositioning > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
Represents the definition of a Finale staff.
Definition Others.h:2021
Base class for lyrics text.
Definition Texts.h:118
A class to represent fractions with integer m_numerator and m_denominator, automatically reduced to s...
Definition Fraction.h:37
A dependency-free, header-only collection of useful functions for music theory.
DiatonicMode
Represents the seven standard diatonic musical modes.
Definition music_theory.hpp:49
ShowClefMode
Enum representing the clef display mode for a frame.
Definition CommonClasses.h:105
@ WhenNeeded
Clef is displayed only when needed (the default).
@ Always
Clef is always displayed. (xml value is "forced")
@ Never
Clef is never displayed. (xml value is "hidden")
NoteType
Enum class representing note types based on EDU values.
Definition CommonClasses.h:56
int16_t MeasCmper
Enigma meas Cmper (may be negative when not applicable)
Definition Fundamentals.h:64
int32_t Efix
EFIX value (64 per EVPU, 64*288=18432 per inch)
Definition Fundamentals.h:60
constexpr Cmper SCORE_PARTID
The part id of the score.
Definition Fundamentals.h:80
int32_t Evpu
EVPU value (288 per inch)
Definition Fundamentals.h:57
uint16_t Cmper
Enigma "comperator" key type.
Definition Fundamentals.h:55
DefaultClefType
Clef types used by default in Finale documents. The values correspond to indices into musx::dom::opti...
Definition CommonClasses.h:80
@ Bass8vb
F clef, sounds one octave lower (8vb).
@ Alto
C clef, centered on third line (Alto clef).
@ BaritoneC
C clef on fifth line (Baritone clef).
@ Tab1
Tablature clef (5 lines).
@ Treble
G clef, standard treble.
@ FrenchViolin
G clef placed on first line (French violin clef).
@ Treble8va
G clef, sounds one octave higher (8va).
@ Bass8va
F clef, sounds one octave higher (8va).
@ AltPercussion
Alternate percussion clef, heavy vertical hash marks (no pitch).
@ Soprano
C clef on first line (Soprano clef).
@ Bass
F clef, standard bass.
@ Percussion
Percussion clef, open rectangle (no pitch).
@ Baritone
F clef on third line (Baritone clef).
@ Tab2
Tablature clef (5 lines, alternative style).
@ Treble8vb
G clef, sounds one octave lower (8vb).
@ Blank
Blank clef (invisible, no symbol).
@ MezzoSoprano
C clef on second line (Mezzo-soprano clef).
@ Tenor
C clef, centered on fourth line (Tenor clef).
uint16_t ClefIndex
Index into options::ClefOptions::clefDefs.
Definition Fundamentals.h:67
int32_t Edu
"Enigma Durational Units" value (1024 per quarter note)
Definition Fundamentals.h:61
std::weak_ptr< Document > DocumentWeakPtr
Shared weak Document pointer.
Definition BaseClasses.h:53
std::vector< XmlElementDescriptor< T > > XmlElementArray
an array type for XmlElementDescriptor instances.
Definition XmlInterface.h:127
object model for musx file (enigmaxml)
Definition BaseClasses.h:32
A single time signature component.
Definition CommonClasses.h:378
std::vector< util::Fraction > counts
Definition CommonClasses.h:379
std::vector< Edu > units
Definition CommonClasses.h:381
util::Fraction sumCounts() const
Compute the sum of all counts.
Definition CommonClasses.h:390
Edu sumUnits() const
Compute the sum of all units.
Definition CommonClasses.h:394
bool operator==(const TimeSigComponent &src) const
Test if two TimeSigComponent values are the same.
Definition CommonClasses.h:386