MUSX Document Model
Loading...
Searching...
No Matches
Entries.h
1/*
2 * Copyright (C) 2025, Robert Patterson
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 * THE SOFTWARE.
21 */
22#pragma once
23
24#include <tuple>
25#include <map>
26
27#include "musx/util/Fraction.h"
28#include "BaseClasses.h"
29#include "CommonClasses.h"
30 // do not add other dom class dependencies. Use Implementations.h for implementations that need total class access.
31
32namespace music_theory {
33enum class NoteName : int;
34class Transposer;
35} // namespace music_theory
36
37namespace musx {
38namespace dom {
39
40namespace others {
41class Frame;
42class PercussionNoteInfo;
43class Staff;
44class StaffComposite;
45class StaffUsed;
46} // namespace others
47
48namespace details {
49class TupletDef;
50class GFrameHold;
51
60public:
71 GFrameHoldContext(const DocumentPtr& document, Cmper partId, Cmper staffId, Cmper measureId, util::Fraction timeOffset = 0);
72
78 Cmper getRequestedPartId() const { return m_requestedPartId; }
79
85 const GFrameHold* operator->() const { return m_hold.get(); }
86
92 explicit operator bool() const noexcept { return static_cast<bool>(m_hold); }
93
97 ClefIndex calcClefIndexAt(Edu position) const;
98
103 { return calcClefIndexAt(position.calcEduDuration()); }
104
110 std::shared_ptr<const EntryFrame> createEntryFrame(LayerIndex layerIndex) const;
111
119 bool iterateEntries(LayerIndex layerIndex, std::function<bool(const EntryInfoPtr&)> iterator) const;
120
126 bool iterateEntries(std::function<bool(const EntryInfoPtr&)> iterator) const;
127
130 std::map<LayerIndex, int> calcVoices() const;
131
134 bool calcIsCuesOnly(bool includeVisibleInScore = false) const;
135
143 EntryInfoPtr calcNearestEntry(util::Fraction position, bool findExact = true, std::optional<LayerIndex> matchLayer = std::nullopt,
144 std::optional<bool> matchVoice2 = std::nullopt, util::Fraction atGraceNoteDuration = 0) const;
145
152
153private:
155 Cmper m_requestedPartId;
156 util::Fraction m_timeOffset;
157};
158
159} // namespace details
160
170std::pair<NoteType, unsigned> calcNoteInfoFromEdu(Edu duration);
171
173unsigned calcNumberOfBeamsInEdu(Edu duration);
174
181class Note : public Base
182{
183public:
185 explicit Note(const DocumentWeakPtr& document, NoteNumber noteId)
186 : Base(document, 0, ShareMode::All), m_noteId(noteId)
187 {
188 }
189
191 static constexpr NoteNumber RESTID = 31;
192
200 using NoteProperties = std::tuple<music_theory::NoteName, int, int, int>;
201
202 int harmLev{};
203 int harmAlt{};
204 bool isValid{};
205 bool tieStart{};
206 bool tieEnd{};
207 bool crossStaff{};
212 bool upSplitStem{};
214 bool showAcci{};
215 bool parenAcci{};
216 bool noPlayback{};
217 bool noSpacing{};
218 bool freezeAcci{};
220
223 NoteNumber getNoteId() const { return m_noteId; }
224
235 std::pair<int, int> calcDefaultEnharmonic(const MusxInstance<KeySignature>& key) const;
236
263 const MusxInstance<others::PercussionNoteInfo>& percNoteInfo, const MusxInstance<others::Staff>& staff = nullptr, bool respellEnharmonic = false) const;
264
266
267private:
268 NoteNumber m_noteId{};
269};
270
277class Entry : public Base
278{
279public:
284 explicit Entry(const DocumentWeakPtr& document, Cmper partId, ShareMode shareMode, EntryNumber entnum, EntryNumber prev, EntryNumber next)
285 : Base(document, partId, shareMode), m_entnum(entnum), m_prev(prev), m_next(next)
286 {
287 }
288
298 int numNotes{};
300 bool isValid{};
301 bool isNote{};
302 bool v2Launch{};
303 bool voice2{};
304 bool createdByHP{};
306 bool graceNote{};
307 bool noteDetail{};
308 bool articDetail{};
309 bool lyricDetail{};
310 bool tupletStart{};
311 bool splitRest{};
313 bool floatRest{};
314 bool isHidden{};
315 bool beamExt{};
316 bool flipTie{};
317 bool dotTieAlt{};
318 bool beam{};
319 bool secBeam{};
321 bool stemDetail{};
322 bool crossStaff{};
325 bool doubleStem{};
326 bool splitStem{};
328 bool upStemScore{};
329 bool checkAccis{};
330 bool dummy{};
333 bool noLeger{};
334 bool sorted{};
335 bool slashGrace{};
338 bool flatBeam{};
339 bool noPlayback{};
340 bool noSpacing{};
341 bool freezeBeam{};
342
344 std::vector<std::shared_ptr<Note>> notes;
345
351 std::vector<std::tuple<StaffCmper, MeasCmper, LayerIndex>> locations;
352
354 EntryNumber getEntryNumber() const { return m_entnum; }
355
360
365
369 std::pair<NoteType, unsigned> calcNoteInfo() const { return calcNoteInfoFromEdu(duration); }
370
375
378 bool hasStem() const { return duration < Edu(NoteType::Whole); }
379
385 { return !isNote && !isHidden && duration == Edu(NoteType::Whole); }
386
387 void integrityCheck(const std::shared_ptr<Base>& ptrToThis) override
388 {
389 this->Base::integrityCheck(ptrToThis);
390 if (size_t(numNotes) != notes.size()) {
391 MUSX_INTEGRITY_ERROR("Entry " + std::to_string(m_entnum) + " has an incorrect number of notes.");
392 }
393 }
394
397 static void calcLocations(const DocumentPtr& document);
398
399 constexpr static std::string_view XmlNodeName = "entry";
401
402private:
403 EntryNumber m_entnum;
404 EntryNumber m_prev;
405 EntryNumber m_next;
406};
407
408class EntryInfo;
409class EntryFrame;
410class NoteInfoPtr;
411
416{
417public:
421 {
422 Normal,
423 IncludeAll,
429 };
430
432 struct WorkaroundAwareResult;
433
435 EntryInfoPtr() : m_entryFrame(nullptr), m_indexInFrame(0) {}
436
442 explicit EntryInfoPtr(const std::shared_ptr<const EntryFrame>& entryFrame, size_t index = 0)
443 : m_entryFrame(entryFrame), m_indexInFrame(index) {}
444
454 static EntryInfoPtr fromPositionOrNull(const DocumentPtr& document, Cmper partId, StaffCmper staffId, MeasCmper measureId,
455 EntryNumber entryNumber, util::Fraction timeOffset = 0);
456
467 static EntryInfoPtr fromEntryNumber(const DocumentPtr& document, Cmper partId, EntryNumber entryNumber, util::Fraction timeOffset = 0);
468
470 const std::shared_ptr<const EntryInfo> operator->() const;
471
473 operator bool() const noexcept;
474
477 bool isSameEntry(const EntryInfoPtr& src) const;
478
487 bool calcIsSamePitchContent(const EntryInfoPtr& src, bool compareConcert = true) const;
488
501 bool calcIsSamePitchContentAndDuration(const EntryInfoPtr& src, bool compareConcert = true, bool requireSameVoice = true, bool requireSameGraceElapsedDura = false) const;
502
504 std::shared_ptr<const EntryFrame> getFrame() const { return m_entryFrame; }
505
507 size_t getIndexInFrame() const { return m_indexInFrame; }
508
511
513 StaffCmper getStaff() const;
514
517 MusxInstance<others::StaffComposite> createCurrentStaff(const std::optional<StaffCmper>& forStaffId = std::nullopt) const;
518
520 MeasCmper getMeasure() const;
521
524
527
530 Evpu calcManuaOffset() const;
531
533 unsigned calcReverseGraceIndex() const;
534
539
541 std::optional<size_t> calcNextTupletIndex(std::optional<size_t> currentIndex = 0) const;
542
545
549
554
558
562
565
570
574
580 EntryInfoPtr getNextInVoice(int voice) const;
581
587 EntryInfoPtr getPreviousInVoice(int voice) const;
588
616 WorkaroundAwareResult getNextInVoiceWorkaroundAware(int voice) const;
617
619 WorkaroundAwareResult asWorkaroundAwareResult() const;
620
623 { return iterateBeamGroup<&EntryInfoPtr::nextPotentialInBeam, &EntryInfoPtr::previousPotentialInBeam>(beamIterationMode); }
624
627 { return iterateBeamGroup<&EntryInfoPtr::previousPotentialInBeam, &EntryInfoPtr::nextPotentialInBeam>(beamIterationMode); }
628
633
638
641 bool calcDisplaysAsRest() const;
642
646 std::pair<int, int> calcTopBottomStaffPositions() const;
647
653 std::pair<bool, bool> calcEntryStemSettings() const;
654
658 bool calcUpStemDefault() const;
659
674 bool calcUpStem() const
675 {
676 if (m_upStem.has_value()) {
677 return m_upStem.value();
678 }
679 m_upStem = calcUpStemImpl();
680 return m_upStem.value();
681 }
682
685 bool calcUnbeamed() const;
686
688 bool calcIsBeamStart() const;
689
692 bool calcCreatesSingletonBeamLeft() const;
693
697
706
715
720 bool calcIsFeatheredBeamStart(Evpu& outLeftY, Evpu& outRightY) const;
721
727
731
733 unsigned calcNumberOfBeams() const;
734
738 unsigned calcLowestBeamStart(bool considerBeamOverBarlines = false) const;
739
742 unsigned calcLowestBeamEnd() const;
743
747 unsigned calcLowestBeamEndAcrossBarlines() const;
748
751 unsigned calcLowestBeamStub() const;
752
758 bool calcBeamStubIsLeft() const;
759
762
765
767 bool calcCanBeBeamed() const;
768
770 bool calcBeamMustStartHere() const;
771
774 int calcEntrySize() const;
775
781 bool calcIsCue(bool includeVisibleInScore = false) const;
782
785 bool calcIsFullMeasureRest() const;
786
791
796
799 std::vector<size_t> findTupletInfo() const;
800
804 bool calcIfLayerSettingsApply() const;
805
816
818 bool calcIsSingletonGrace() const;
819
825 int calcIsAuxiliaryPitchMarker() const;
826
837 bool calcIsTrillToGraceEntry() const;
838
846 bool calcIsGlissToGraceEntry() const;
847
853
860
866 EntryInfoPtr findMainEntryForGraceNote(bool ignoreRests = false) const;
867
869 bool operator<(const EntryInfoPtr& other) const
870 {
871 if (m_entryFrame != other.m_entryFrame)
872 return m_entryFrame < other.m_entryFrame;
873 return m_indexInFrame < other.m_indexInFrame;
874 }
875
876private:
877 unsigned calcVisibleBeams() const;
878
879 bool calcUpStemImpl() const;
880
881 template<EntryInfoPtr(EntryInfoPtr::* Iterator)() const>
882 std::optional<unsigned> iterateFindRestsInSecondaryBeam(const EntryInfoPtr nextOrPrevInBeam) const;
883
884 template<EntryInfoPtr(EntryInfoPtr::* Iterator)() const>
885 EntryInfoPtr iteratePotentialEntryInBeam() const;
886
887 template<EntryInfoPtr(EntryInfoPtr::* Iterator)() const>
888 bool iterateNotesExistLeftOrRight() const;
889
890 EntryInfoPtr nextPotentialInBeam(BeamIterationMode beamIterationMode) const;
891
892 EntryInfoPtr previousPotentialInBeam(BeamIterationMode beamIterationMode) const;
893
894 using BeamIteratorFn = EntryInfoPtr (EntryInfoPtr::*)(BeamIterationMode) const;
895 template<BeamIteratorFn Iterator, BeamIteratorFn ReverseIterator>
896 EntryInfoPtr iterateBeamGroup(BeamIterationMode beamIterationMode) const;
897
901 EntryInfoPtr findLeftBeamAnchorForBeamOverBarline() const;
902
906 EntryInfoPtr findRightBeamAnchorForBeamOverBarline() const;
907
908 std::shared_ptr<const EntryFrame> m_entryFrame;
909 size_t m_indexInFrame{};
910
912 mutable MusxInstance<others::StaffComposite> m_cachedStaff;
913
915 mutable std::optional<bool> m_upStem;
916};
917
921{
924
927 explicit operator bool() const noexcept
928 {
929 return static_cast<bool>(entry);
930 }
931};
932
939class EntryFrame : public std::enable_shared_from_this<EntryFrame>
940{
941public:
949 explicit EntryFrame(const details::GFrameHoldContext& gfhold, LayerIndex layerIndex, util::Fraction timeStretch, const MusxInstance<others::StaffComposite>& startStaff) :
950 m_context(gfhold),
951 m_layerIndex(layerIndex),
952 m_timeStretch(timeStretch),
953 m_startStaff(startStaff)
954 {
955 }
956
959 {
961 size_t startIndex;
962 size_t endIndex;
965 bool voice2;
966
968 TupletInfo(const std::weak_ptr<const EntryFrame>& parent, const MusxInstance<details::TupletDef>& tup, size_t index, util::Fraction start, bool forVoice2)
969 : tuplet(tup), startIndex(index), endIndex((std::numeric_limits<size_t>::max)()),
970 startDura(start), endDura(-1), voice2(forVoice2), m_parent(parent)
971 {}
972
974 size_t numEntries() const
975 {
976 MUSX_ASSERT_IF(startIndex > endIndex) {
977 throw std::logic_error("TupletInfo has invalid start and end indices.");
978 }
979 return endIndex - startIndex + 1;
980 }
981
984 bool includesEntry(const EntryInfoPtr& entryInfo) const
985 {
986 const size_t x = entryInfo.getIndexInFrame();
987 return (x >= startIndex && x <= endIndex);
988 }
989
1001 bool calcIsTremolo() const;
1002
1016 bool calcCreatesSingletonBeamRight() const { return calcCreatesSingleton(false); }
1017
1027 bool calcCreatesSingletonBeamLeft() const { return calcCreatesSingleton(true); }
1028
1039 // - the independent display time signature matches the tuplet's total display duration
1040 bool calcCreatesTimeStretch() const;
1041
1042 private:
1043 bool calcCreatesSingleton(bool left) const;
1044
1045 const std::shared_ptr<const EntryFrame> getParent() const
1046 {
1047 auto result = m_parent.lock();
1048 MUSX_ASSERT_IF(!result) {
1049 throw std::logic_error("Unable to obtain lock on parent entry frame.");
1050 }
1051 return result;
1052 }
1053
1054 const std::weak_ptr<const EntryFrame> m_parent;
1055 };
1056
1063 std::vector<TupletInfo> tupletInfo;
1068
1070 DocumentPtr getDocument() const;
1071
1073 const details::GFrameHoldContext& getContext() const { return m_context; }
1074
1076 Cmper getRequestedPartId() const { return m_context.getRequestedPartId(); }
1077
1079 StaffCmper getStaff() const;
1080
1082 MeasCmper getMeasure() const;
1083
1085 LayerIndex getLayerIndex() const { return m_layerIndex; }
1086
1089
1092 util::Fraction getTimeStretch() const { return m_timeStretch; }
1093
1095 const std::vector<std::shared_ptr<const EntryInfo>>& getEntries() const
1096 { return m_entries; }
1097
1101 EntryInfoPtr getFirstInVoice(int voice) const;
1102
1106 EntryInfoPtr getLastInVoice(int voice) const;
1107
1137
1139 void addEntry(const std::shared_ptr<const EntryInfo>& entry)
1140 { m_entries.emplace_back(entry); }
1141
1144 std::shared_ptr<const EntryFrame> getNext() const;
1145
1148 std::shared_ptr<const EntryFrame> getPrevious() const;
1149
1153
1157 MusxInstance<others::StaffComposite> createCurrentStaff(Edu eduPosition, const std::optional<StaffCmper>& forStaffId = std::nullopt) const;
1158
1161
1167 bool calcIsCueFrame(bool includeVisibleInScore = false) const;
1168
1174 bool calcAreAllEntriesHiddenInFrame() const;
1175
1182 EntryInfoPtr calcNearestEntry(util::Fraction position, bool findExact = true, std::optional<bool> matchVoice2 = std::nullopt,
1183 util::Fraction atGraceNoteDuration = 0) const;
1184
1189 bool iterateEntries(std::function<bool(const EntryInfoPtr&)> iterator) const;
1190
1191private:
1193 LayerIndex m_layerIndex;
1194 util::Fraction m_timeStretch;
1195
1196 std::vector<std::shared_ptr<const EntryInfo>> m_entries;
1197
1200
1202 mutable MusxInstance<others::LayerAttributes> m_cachedLayerAttributes;
1203};
1204
1205namespace details {
1206class GFrameHold;
1207} // namespace details
1208
1218{
1223 explicit EntryInfo(const MusxInstance<Entry>& entry)
1224 : m_entry(entry) {}
1225
1226#ifndef DOXYGEN_SHOULD_IGNORE_THIS
1228#endif
1229
1230public:
1235 unsigned graceIndex{};
1239
1243 {
1244 auto retval = m_entry.lock();
1245 if (!retval) {
1246 throw std::logic_error("Entry pointer is no longer valid");
1247 }
1248 return retval;
1249 }
1250
1254
1255private:
1257};
1258
1261{
1262public:
1264 NoteInfoPtr() : m_entry(), m_noteIndex(0) {}
1265
1269 NoteInfoPtr(const EntryInfoPtr& entryInfo, size_t noteIndex)
1270 : m_entry(entryInfo), m_noteIndex(noteIndex)
1271 {}
1272
1274 explicit operator bool() const noexcept
1275 { return m_entry && m_noteIndex < m_entry->getEntry()->notes.size(); }
1276
1279 bool isSameNote(const NoteInfoPtr& src) const
1280 { return m_entry.isSameEntry(src.m_entry) && m_noteIndex == src.m_noteIndex; }
1281
1285 NoteInfoPtr findEqualPitch(const EntryInfoPtr& entry) const;
1286
1289 {
1290 MUSX_ASSERT_IF(m_noteIndex >= m_entry->getEntry()->notes.size()) {
1291 throw std::logic_error("Note index is too large for notes array.");
1292 }
1293 return m_entry->getEntry()->notes[m_noteIndex];
1294 }
1295
1298 { return m_entry; }
1299
1312 Note::NoteProperties calcNoteProperties(const std::optional<bool>& enharmonicRespell = std::nullopt, bool alwaysUseEntryStaff = false) const;
1313
1321 Note::NoteProperties calcNotePropertiesConcert(bool alwaysUseEntryStaff = false) const;
1322
1330 Note::NoteProperties calcNotePropertiesInView(bool alwaysUseEntryStaff = false) const;
1331
1335
1339
1343 NoteInfoPtr calcTieTo() const;
1344
1349 NoteInfoPtr calcTieFrom(bool requireTie = true) const;
1350
1352 StaffCmper calcStaff() const;
1353
1356 std::unique_ptr<music_theory::Transposer> createTransposer() const;
1357
1361 {
1362 if (m_noteIndex >= m_entry->getEntry()->notes.size()) {
1363 return NoteInfoPtr();
1364 }
1365 return NoteInfoPtr(m_entry, m_noteIndex + 1);
1366 }
1367
1371 {
1372 if (m_noteIndex <= 0) {
1373 return NoteInfoPtr();
1374 }
1375 return NoteInfoPtr(m_entry, m_noteIndex - 1);
1376 }
1377
1379 bool calcIsEnharmonicRespell() const;
1380
1390 std::pair<int, int> calcDefaultEnharmonic() const
1391 { return (*this)->calcDefaultEnharmonic(m_entry.getKeySignature()); }
1392
1403
1404private:
1408 bool isSamePitch(const NoteInfoPtr& src) const;
1409
1413 bool isSamePitchValues(const NoteInfoPtr& src) const;
1414
1415 EntryInfoPtr m_entry;
1416 size_t m_noteIndex;
1417};
1418
1419} // namespace dom
1420} // namespace entries
Base class to enforce polymorphism across all DOM classes.
Definition BaseClasses.h:83
virtual void integrityCheck(const std::shared_ptr< Base > &ptrToThis)
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition BaseClasses.h:154
ShareMode
Describes how this instance is shared between part and score.
Definition BaseClasses.h:91
Wraps a reference to an existing object or owns a temporary value if needed.
Definition MusxInstance.h:179
Represents a vector of EntryInfo instances for a given frame, along with computed information.
Definition Entries.h:940
util::Fraction getTimeStretch() const
Get the time stretch in this frame. Rather than accessing this value directly, consider using EntryIn...
Definition Entries.h:1092
util::Fraction maxElapsedStaffDuration
Definition Entries.h:1066
EntryFrame(const details::GFrameHoldContext &gfhold, LayerIndex layerIndex, util::Fraction timeStretch, const MusxInstance< others::StaffComposite > &startStaff)
Constructor function.
Definition Entries.h:949
util::Fraction measureStaffDuration
The duration of the measure in staff duration units.
Definition Entries.h:1065
EntryInfoPtr getLastInVoice(int voice) const
Returns the last entry in the specified v1/v2 or null if none.
Definition Entries.cpp:135
MusxInstance< others::StaffComposite > getStartStaffInstance() const
Gets the staff at eduPosition 0 without needing to create it again.
Definition Entries.h:1151
bool calcAreAllEntriesHiddenInFrame() const
Calculates if this all notes in the frame are hidden. This routine only checks that entries are indiv...
Definition Entries.cpp:206
MeasCmper getMeasure() const
Get the measure for the entry frame.
Definition Entries.cpp:109
MusxInstance< others::Measure > getMeasureInstance() const
Get the measure instance.
Definition Entries.cpp:185
EntryInfoPtr calcNearestEntry(util::Fraction position, bool findExact=true, std::optional< bool > matchVoice2=std::nullopt, util::Fraction atGraceNoteDuration=0) const
Calculates the nearest non-grace-note entry at the given position.
Definition Entries.cpp:217
std::shared_ptr< const EntryFrame > getPrevious() const
Gets the entry frame for the previous measure with the same staff and layer.
Definition Entries.cpp:166
void addEntry(const std::shared_ptr< const EntryInfo > &entry)
Add an entry to the list.
Definition Entries.h:1139
const std::vector< std::shared_ptr< const EntryInfo > > & getEntries() const
Get the entry list.
Definition Entries.h:1095
EntryInfoPtr getFirstInVoice(int voice) const
Returns the first entry in the specified v1/v2 or null if none.
Definition Entries.cpp:119
StaffCmper getStaff() const
Get the staff for the entry.
Definition Entries.cpp:107
Cmper getRequestedPartId() const
Get the requested part ID for the entry frame.
Definition Entries.h:1076
MusxInstance< others::StaffComposite > createCurrentStaff(Edu eduPosition, const std::optional< StaffCmper > &forStaffId=std::nullopt) const
Creates a current StaffComposite for the entry frame.
Definition Entries.cpp:176
MusxInstance< KeySignature > keySignature
This can be different than the measure key sig if the staff has independent key signatures.
Definition Entries.h:1064
MusxInstance< others::LayerAttributes > getLayerAttributes() const
Get the LayerAttributes for this entry frame.
Definition Entries.cpp:111
const details::GFrameHoldContext & getContext() const
Get the frame context for this frame.
Definition Entries.h:1073
LayerIndex getLayerIndex() const
Get the layer index (0..3) of the entry frame.
Definition Entries.h:1085
bool iterateEntries(std::function< bool(const EntryInfoPtr &)> iterator) const
Iterates the entries for the specified layer in this EntryFrame from left to right.
Definition Entries.cpp:246
DocumentPtr getDocument() const
Get the document for the entry frame.
Definition Entries.cpp:105
std::vector< TupletInfo > tupletInfo
A list of the tuplets in the frame and their calculated starting and ending information.
Definition Entries.h:1063
std::shared_ptr< const EntryFrame > getNext() const
Gets the entry frame for the next measure with the same staff and layer.
Definition Entries.cpp:158
EntryInfoPtr::WorkaroundAwareResult getFirstInVoiceWorkaroundAware(int voice) const
Returns the first entry in the specified voice using musxdom's workaround-aware interpretation.
Definition Entries.cpp:145
bool calcIsCueFrame(bool includeVisibleInScore=false) const
Calculates if this entry frame is part of a cue.
Definition Entries.cpp:190
Wraps a frame of shared_ptr<const EntryInfo> and an index for per entry access. This class manages ow...
Definition Entries.h:416
bool calcUpStemDefault() const
Calculates if the entry is upstem by default, without considering voices, layers, staff options,...
Definition Entries.cpp:842
EntryInfoPtr getNextInFrame() const
Get the next entry in the frame.
Definition Entries.cpp:655
EntryInfoPtr getPreviousInBeamGroupAcrossBars(BeamIterationMode beamIterationMode=BeamIterationMode::Normal) const
Gets the previous entry in a beamed group or nullptr if the entry is not beamed or is the first in th...
Definition Entries.cpp:795
bool calcBeamMustStartHere() const
Determines if a beam must start on this entry.
Definition Entries.cpp:992
EntryInfoPtr(const std::shared_ptr< const EntryFrame > &entryFrame, size_t index=0)
Constructor function.
Definition Entries.h:442
EntryInfoPtr getNextSameV() const
Get the next entry in the frame in the same voice.
Definition Entries.cpp:663
bool calcCanBeBeamed() const
Determines if this entry can be beamed.
Definition Entries.cpp:979
EntryInfoPtr findMainEntryForGraceNote(bool ignoreRests=false) const
Finds the main entry for a grace note, taking into account hidden entries for beams over barlines.
Definition Entries.cpp:1241
size_t getIndexInFrame() const
Returns the index within the frame.
Definition Entries.h:507
util::Fraction calcGlobalElapsedDuration() const
Calculates the elapsed duration in global edu, removing any time stretch due to independent time sign...
Definition Entries.cpp:1599
std::pair< bool, bool > calcEntryStemSettings() const
Returns the Entry stem settings for the current requested part. This function encapsulates handling o...
Definition Entries.cpp:587
EntryInfoPtr calcBeamContinuesLeftOverBarline() const
Determines if this entry continues a beam across a barline from the previous measure.
Definition Entries.cpp:1265
EntryInfoPtr getNextInBeamGroup(BeamIterationMode beamIterationMode=BeamIterationMode::Normal) const
Gets the next entry in a beamed group or nullptr if the entry is not beamed or is the last in the gro...
Definition Entries.h:622
bool calcIfLayerSettingsApply() const
Calculates whether the conditions are met for the layer attributes dependent on others::LayerAttribut...
Definition Entries.cpp:1862
EntryInfoPtr getPreviousInVoice(int voice) const
Returns the previous entry in the frame in the specified v1/v2 or null if none.
Definition Entries.cpp:744
unsigned calcReverseGraceIndex() const
Caclulates the grace index counting leftward (used by other standards such as MNX)
Definition Entries.cpp:604
static EntryInfoPtr fromEntryNumber(const DocumentPtr &document, Cmper partId, EntryNumber entryNumber, util::Fraction timeOffset=0)
Returns an EntryInfoPtr for the entry specified by entryNumber.
Definition Entries.cpp:447
EntryInfoPtr getPreviousSameVNoGrace() const
Get the previous entry in the frame in the same voice, skipping grace notes.
Definition Entries.cpp:725
MusxInstance< details::EntryPartFieldDetail > getPartFieldData() const
Gets the applicable part data for the entry, or nullptr if none.
Definition Entries.cpp:564
BeamIterationMode
Controls which entries are included when iterating over beams.
Definition Entries.h:421
@ Normal
Skip hidden entries. This is how Finale displays beams.
@ IncludeAll
Include all entries, even if they are hidden.
Evpu calcManuaOffset() const
Returns the manual offset of the entry for the current requested part. This function encapsulates han...
Definition Entries.cpp:579
unsigned calcLowestBeamStart(bool considerBeamOverBarlines=false) const
Returns the lowest beam number starting at this entry, where 1 = 8th note beam, 2 = 16th note beam,...
Definition Entries.cpp:1454
bool isSameEntry(const EntryInfoPtr &src) const
Returns whether the input and the current instance refer to the same entry.
Definition Entries.cpp:484
EntryInfoPtr getPreviousInLayer() const
Get the previous entry in the same layer and staff. This can be in the previous measure.
Definition Entries.cpp:691
EntryInfoPtr findHiddenSourceForBeamOverBarline() const
Find the hidden source entry for a mid-system beam created by the Beam Over Barline plugin....
Definition Entries.cpp:1113
EntryInfoPtr getNextInLayer() const
Get the next entry in the same layer and staff. This can be in the next measure.
Definition Entries.cpp:644
unsigned calcLowestBeamStub() const
Returns the lowest beam stub at this entry, where 2 = 16th note stub, 3 = 32nd note stub,...
Definition Entries.cpp:1540
bool calcIsBeamedRestWorkaroundVisibleRest() const
A common workaround in Finale is to hide a rest in v1 and supply it in v2. Typically it is used when ...
Definition Entries.cpp:1828
bool calcIsSamePitchContent(const EntryInfoPtr &src, bool compareConcert=true) const
Returns whether this entry and src contain the same pitch content or rest value.
Definition Entries.cpp:492
util::Fraction calcGraceElapsedDuration() const
Calculates a grace note's symbolic starting duration as a negative offset from the main note....
Definition Entries.cpp:616
WorkaroundAwareResult getNextInVoiceWorkaroundAware(int voice) const
Returns the next forward entry in this voice using musxdom's workaround-aware interpretation.
Definition Entries.cpp:754
unsigned calcLowestBeamEnd() const
Returns the lowest beam number ending at this entry, where 1 = 8th note beam, 2 = 16th note beam,...
Definition Entries.cpp:1496
LayerIndex getLayerIndex() const
Get the layer index (0..3) of the entry.
Definition Entries.cpp:556
bool calcIsSingletonGrace() const
Return true if this entry is a grace note and the only grace in the sequence at this location.
Definition Entries.cpp:1927
unsigned calcLowestBeamEndAcrossBarlines() const
Returns the lowest beam number ending at this entry, where 1 = 8th note beam, 2 = 16th note beam,...
Definition Entries.cpp:1519
unsigned calcNumberOfBeams() const
Calculates the number of beams or flags on the entry.
Definition Entries.cpp:1403
EntryInfoPtr getNextInBeamGroupAcrossBars(BeamIterationMode beamIterationMode=BeamIterationMode::Normal) const
Gets the next entry in a beamed group, or nullptr if the entry is not beamed or is the last in the gr...
Definition Entries.cpp:779
EntryInfoPtr getPreviousInFrame() const
Get the previous entry in the frame.
Definition Entries.cpp:702
std::shared_ptr< const EntryFrame > getFrame() const
Returns the frame.
Definition Entries.h:504
bool calcUpStem() const
Determines the effective stem direction of the entry, taking into account voices, layers,...
Definition Entries.h:674
bool calcIsBeamedRestWorkaroundHiddenRest() const
A common workaround in Finale is to hide a rest in v1 and supply it in v2. Typically it is used when ...
Definition Entries.cpp:1808
bool calcIsSamePitchContentAndDuration(const EntryInfoPtr &src, bool compareConcert=true, bool requireSameVoice=true, bool requireSameGraceElapsedDura=false) const
Returns whether this entry and src represent the same notated value.
Definition Entries.cpp:528
EntryInfoPtr findBeamStartOrCurrent() const
Finds the first entry of a beamed group or returns the current entry if it is not beams.
Definition Entries.cpp:1354
bool calcDisplaysAsRest() const
Calculates if an entry displays as a rest.
Definition Entries.cpp:811
MusxInstance< KeySignature > getKeySignature() const
Get the key signature of the entry.
Definition Entries.cpp:562
bool calcIsCue(bool includeVisibleInScore=false) const
Calculates if this entry is part of a cue.
Definition Entries.cpp:1758
EntryInfoPtr getPreviousInBeamGroup(BeamIterationMode beamIterationMode=BeamIterationMode::Normal) const
Gets the previous entry in a beamed group or nullptr if the entry is not beamed or is the first in th...
Definition Entries.h:626
bool calcCreatesSingletonBeamLeft() const
Determines if this entry contains a tuplet that creates a singleton beam left. See EntryFrame::Tuplet...
Definition Entries.cpp:1004
bool operator<(const EntryInfoPtr &other) const
Explicit operator< for std::map.
Definition Entries.h:869
std::optional< size_t > calcNextTupletIndex(std::optional< size_t > currentIndex=0) const
Returns the next higher tuplet index that this entry starts, or std::nullopt if none.
Definition Entries.cpp:629
static EntryInfoPtr fromPositionOrNull(const DocumentPtr &document, Cmper partId, StaffCmper staffId, MeasCmper measureId, EntryNumber entryNumber, util::Fraction timeOffset=0)
Searches the given position at staffId and measureId for the entryNumber.
Definition Entries.cpp:432
std::pair< int, int > calcTopBottomStaffPositions() const
Calculates the top and bottom staff positions of the entry, taking into account percussion notes....
Definition Entries.cpp:817
StaffCmper getStaff() const
Get the staff cmper.
Definition Entries.cpp:558
EntryInfoPtr findBeamEnd() const
Finds the end entry of a beamed group.
Definition Entries.cpp:1371
int calcEntrySize() const
Returns the entry size as a percentage, taking into account the beaming.
Definition Entries.cpp:1744
bool calcIsBeamStart() const
Returns whether this is the start of a primary beam.
Definition Entries.cpp:997
EntryInfoPtr getPreviousSameV() const
Get the previous entry in the frame in the same voice.
Definition Entries.cpp:710
int calcCrossStaffDirectionForAll(DeferredReference< MusxInstanceList< others::StaffUsed > > staffList={}) const
Calculates if this entry has cross-staffed notes all in a single direction.
Definition Entries.cpp:1903
MusxInstance< others::StaffComposite > createCurrentStaff(const std::optional< StaffCmper > &forStaffId=std::nullopt) const
Creates the current StaffComposite for the entry.
Definition Entries.cpp:596
EntryInfoPtr findDisplayEntryForBeamOverBarline() const
Find the display entry for a hidden source entry. The display entry is one or more bars previous to t...
Definition Entries.cpp:1188
bool calcIsTrillToGraceEntry() const
Calculates if this entry is a trill-to entry as created by the Parenthesize Trill-To Notes plugin.
Definition Entries.cpp:1950
int calcIsAuxiliaryPitchMarker() const
Return true if this entry is an auxiliary pitch marker (specifically, a trill-to or gliss-to pitch ma...
Definition Entries.cpp:1939
EntryInfoPtr getNextInVoice(int voice) const
Returns the next entry in the frame in the specified v1/v2 or null if none.
Definition Entries.cpp:734
EntryInfoPtr calcBeamContinuesRightOverBarline() const
Determines if this entry continues a beam across a barline to the next measure.
Definition Entries.cpp:1309
const std::shared_ptr< const EntryInfo > operator->() const
Allows -> access to the underlying EntryInfo instance.
Definition Entries.cpp:468
bool calcUnbeamed() const
Returns whether this is an unbeamed entry.
Definition Entries.cpp:970
EntryInfoPtr()
Default constructor.
Definition Entries.h:435
bool calcCreatesSingletonBeamRight() const
Determines if this entry contains a tuplet that creates a singleton beam right. See EntryFrame::Tuple...
Definition Entries.cpp:1015
bool calcBeamStubIsLeft() const
Calculates if a beam stub on this entry would go left or right. It does not check that an entry actua...
Definition Entries.cpp:1550
bool calcIsGlissToGraceEntry() const
Calculates if this entry is a gliss-to entry as created by the Parenthesize Trill-To Notes plugin.
Definition Entries.cpp:1973
bool calcIsFullMeasureRest() const
Returns whether this is a full measure rest.
Definition Entries.cpp:1784
util::Fraction calcGlobalActualDuration() const
Calculates the actual duration in global edu, removing any time stretch due to independent time signa...
Definition Entries.cpp:1604
MeasCmper getMeasure() const
Get the measure cmper.
Definition Entries.cpp:560
EntryInfoPtr getNextSameVNoGrace() const
Get the next entry in the frame in the same voice, skipping grace notes.
Definition Entries.cpp:681
std::vector< size_t > findTupletInfo() const
Finds the tuplet info for tuplets that include this entry.
Definition Entries.cpp:1848
WorkaroundAwareResult asWorkaroundAwareResult() const
Returns this EntryInfoPtr in a WorkaroundAwareResult instance.
Definition Entries.cpp:774
bool calcIsFeatheredBeamStart(Evpu &outLeftY, Evpu &outRightY) const
Calculates if the entry starts a feathered beam and returns information about it if so.
Definition Entries.cpp:1709
Information an entry along with the entry.
Definition Entries.h:1218
unsigned graceIndex
Definition Entries.h:1235
ClefIndex clefIndex
the clef index in effect for the entry.
Definition Entries.h:1237
util::Fraction calcNextElapsedDuration() const
Calculates the next duration position after this entry.
Definition Entries.h:1252
util::Fraction elapsedDuration
Definition Entries.h:1231
ClefIndex clefIndexConcert
the concert clef index in effect for the entry.
Definition Entries.h:1238
util::Fraction actualDuration
Definition Entries.h:1233
MusxInstance< Entry > getEntry() const
Get the entry.
Definition Entries.h:1242
Represents an entry containing metadata and notes.
Definition Entries.h:278
std::vector< std::tuple< StaffCmper, MeasCmper, LayerIndex > > locations
The location(s) of this entry calculated by calcLocations, which is called by the factory....
Definition Entries.h:351
bool splitStem
Definition Entries.h:326
Entry(const DocumentWeakPtr &document, Cmper partId, ShareMode shareMode, EntryNumber entnum, EntryNumber prev, EntryNumber next)
Constructor function.
Definition Entries.h:284
EntryNumber getEntryNumber() const
Gets the entry number for this entry.
Definition Entries.h:354
bool articDetail
Indicates there is an articulation on the entry.
Definition Entries.h:308
bool upStemScore
Whether a stem is up or down as set in the score. (Only reliable when freezeStemScore is true....
Definition Entries.h:328
std::pair< NoteType, unsigned > calcNoteInfo() const
Calculates the NoteType and number of augmentation dots. (See calcNoteInfoFromEdu....
Definition Entries.h:369
bool isNote
If this value is false, the entry is a rest.
Definition Entries.h:301
bool noLeger
Hide ledger lines.
Definition Entries.h:333
MusxInstance< Entry > getNext() const
Gets the next entry in this list or nullptr if none.
Definition Entries.cpp:46
bool noPlayback
Indicates that the entry should not be played back.
Definition Entries.h:339
bool voice2
This is a V2 note. (xml node <v2>)
Definition Entries.h:303
bool splitRest
Indicates that rests in different layers are not combined on this entry.
Definition Entries.h:311
bool beamExt
Indicates that there is a beam extension on the entry.
Definition Entries.h:315
bool createdByHP
Indicates the entry was created by Finale's smart playback engine.
Definition Entries.h:304
static constexpr std::string_view XmlNodeName
The XML node name for this type.
Definition Entries.h:399
MusxInstance< Entry > getPrevious() const
Gets the previous entry in this list or nullptr if none.
Definition Entries.cpp:56
bool secBeam
Signifies a secondary beam break occurs on the entry.
Definition Entries.h:319
bool stemDetail
Indicates there are stem modifications.
Definition Entries.h:321
bool slashGrace
Definition Entries.h:335
bool isValid
Should always be true but otherwise appears to be used internally by Finale.
Definition Entries.h:300
bool playDisabledByHP
Used by Finale's smart playback engine.
Definition Entries.h:305
bool flipTie
Indicates the existence of a flipped tie, either in Speedy Entry or Layer Attributes.
Definition Entries.h:316
bool flatBeam
Forces any beam that starts on this entry to be flat by default.
Definition Entries.h:338
std::vector< std::shared_ptr< Note > > notes
Collection of notes that comprise the entry. These are in order from lowest to highest.
Definition Entries.h:344
void integrityCheck(const std::shared_ptr< Base > &ptrToThis) override
Allows a class to determine if it has been properly contructed by the factory and fix issues that it ...
Definition Entries.h:387
bool dummy
Definition Entries.h:330
Evpu hOffsetScore
Manual offset created with the Note Position Tool in the score. (xml node is <posi>....
Definition Entries.h:299
bool checkAccis
Used by Finale to convert pre-2014 .mus files. May never be saved in .musx.
Definition Entries.h:329
bool noteDetail
Indicates there is a note detail or EntrySize record for the entry.
Definition Entries.h:307
util::Fraction calcFraction() const
Calculates the duration as a util::Fraction of a whole note.
Definition Entries.h:374
static const xml::XmlElementArray< Entry > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool hasStem() const
Returns true if the entry's duration has a stem.
Definition Entries.h:378
bool crossStaff
Signifies that at least one note in the entry has been cross staffed.
Definition Entries.h:322
bool floatRest
Is floating rest. If false, the first note element gives the staff position of the rest.
Definition Entries.h:313
bool smartShapeDetail
Indicates this entry has a smart shape assignment.
Definition Entries.h:332
Edu duration
Duration of the entry, not taking into account tuplets.
Definition Entries.h:297
bool isHidden
Indicates the entry is hidden, (xml node is <ignore>)
Definition Entries.h:314
bool tupletStart
Indicates that a tuplet start on the entry.
Definition Entries.h:310
bool lyricDetail
Indicates there is a lyric assignment on the entry.
Definition Entries.h:309
int numNotes
Number of notes in the entry. There is an error if this is not the same as notes.size().
Definition Entries.h:298
bool sorted
Sorted flag.
Definition Entries.h:334
bool reverseDownStem
Indicates that a stem normally down is reversed.
Definition Entries.h:324
bool reverseUpStem
Indicates that a stem normally up is reversed.
Definition Entries.h:323
bool v2Launch
Indicates if this entry (which is voice1) launches a voice2 sequence. (xml node is <controller>)
Definition Entries.h:302
bool doubleStem
Creates a double stem on the entry. (Appears to be exclusive with splitStem.)
Definition Entries.h:325
bool isPossibleFullMeasureRest() const
Returns true if the entry could be a full-measure rest.
Definition Entries.h:384
bool beam
Signifies the start of a beam or singleton entry. (That is, any beam breaks at this entry....
Definition Entries.h:318
bool freezeStemScore
Freeze stem flag in the score. (upStemScore gives the direction.)
Definition Entries.h:320
bool performanceData
Indicates there is performance data on the entry.
Definition Entries.h:312
bool noSpacing
Indicates that the entry should be ignored when calculating music spacing.
Definition Entries.h:340
bool dotTieAlt
Indicates dot or tie alterations are present.
Definition Entries.h:317
bool freezeBeam
Freeze beam flag (Derived from the presence of <freezeBeam> node.)
Definition Entries.h:341
bool graceNote
Indicate the entry is a grace note.
Definition Entries.h:306
static void calcLocations(const DocumentPtr &document)
Calculates the locations for all entries in the document. This function is normally only called by th...
Definition Entries.cpp:88
KeyContext
Indicates whether to compute key signature values in concert or written pitch.
Definition CommonClasses.h:255
Provides optional per-type extension methods for MusxInstanceList.
Definition MusxInstance.h:103
Wraps an EntryInfo instance and a note index.
Definition Entries.h:1261
int calcStaffPosition() const
Calculates the staff position for this note, taking into account percussion notes.
Note::NoteProperties calcNoteProperties(const std::optional< bool > &enharmonicRespell=std::nullopt, bool alwaysUseEntryStaff=false) const
Calculates the note name, octave number, actual alteration, and staff position. This function does no...
Definition Entries.cpp:2469
EntryInfoPtr getEntryInfo() const
Gets the entry info for this note.
Definition Entries.h:1297
MusxInstance< others::PercussionNoteInfo > calcPercussionNoteInfo() const
Calculates the percussion note info for this note, if any.
Definition Entries.cpp:2511
MusxInstance< Note > operator->() const
Allows -> access to the underlying Note instance.
Definition Entries.h:1288
bool isSameNote(const NoteInfoPtr &src) const
Returns whether the input and the current instance refer to the same note.
Definition Entries.h:1279
StaffCmper calcStaff() const
Calculates the staff number, taking into account cross staffing.
Definition Entries.cpp:2455
NoteInfoPtr getPrevious() const
Gets the next note in a chord on the same entry.
Definition Entries.h:1370
Note::NoteProperties calcNotePropertiesConcert(bool alwaysUseEntryStaff=false) const
Calculates the note name, octave number, actual alteration, and staff position for the concert pitch ...
Definition Entries.cpp:2485
NoteInfoPtr calcTieFrom(bool requireTie=true) const
Calculates the note that this note could tie from.
Definition Entries.cpp:2425
bool calcIsEnharmonicRespell() const
Returns if this note is enharmonically respelled in the current part view.
Definition Entries.cpp:2537
std::pair< int, int > calcDefaultEnharmonic() const
Calculates the default enharmonic equivalent of this note. This is the value that Finale uses when de...
Definition Entries.h:1390
Note::NoteProperties calcNotePropertiesInView(bool alwaysUseEntryStaff=false) const
Calculates the note name, octave number, actual alteration, and staff position for the pitch of the n...
Definition Entries.cpp:2501
int calcCrossStaffDirection(DeferredReference< MusxInstanceList< others::StaffUsed > > staffList={}) const
Calculates if this note is cross-staffed and if so, which direction.
Definition Entries.cpp:2576
NoteInfoPtr(const EntryInfoPtr &entryInfo, size_t noteIndex)
Constructor.
Definition Entries.h:1269
NoteInfoPtr calcTieTo() const
Calculates the note that this note could tie to. Check the return value's Note::tieEnd to see if ther...
Definition Entries.cpp:2380
NoteInfoPtr findEqualPitch(const EntryInfoPtr &entry) const
Finds a note with the same pitch in the supplied entry.
Definition Entries.cpp:2357
NoteInfoPtr getNext() const
Gets the next note in a chord on the same entry.
Definition Entries.h:1360
NoteInfoPtr()
Default constructor.
Definition Entries.h:1264
std::unique_ptr< music_theory::Transposer > createTransposer() const
Creates a transposer for this Note instance.
Definition Entries.cpp:2532
Represents a single note element in an entry.
Definition Entries.h:182
bool upStemSecond
When the entry is upstem, it is drawn on the "wrong" side of the stem.
Definition Entries.h:208
bool isValid
Should always be true but otherwise appears to be used internally by Finale.
Definition Entries.h:204
bool playDisabledByHP
Used by Finale's smart playback engine.
Definition Entries.h:219
static constexpr NoteNumber RESTID
Non floating rests have a note with this noteId that defines their staff positions.
Definition Entries.h:191
int harmAlt
Chromatic alteration relative to the key signature. Never has a magnitude greater than +/-7.
Definition Entries.h:203
bool upSplitStem
Definition Entries.h:212
NoteNumber getNoteId() const
Gets the note id for this note. This value does not change, even if the notes in a chord are rearrang...
Definition Entries.h:223
bool tieEnd
Indicates a tie ends on this note.
Definition Entries.h:206
Note(const DocumentWeakPtr &document, NoteNumber noteId)
Constructor function.
Definition Entries.h:185
bool tieStart
Indicates a tie starts on this note.
Definition Entries.h:205
bool crossStaff
Signifies that the note has a details::CrossStaff note detail.
Definition Entries.h:207
std::pair< int, int > calcDefaultEnharmonic(const MusxInstance< KeySignature > &key) const
Calculates the default enharmonic equivalent of this note. This is the value that Finale uses when de...
Definition Entries.cpp:2276
int harmLev
Diatonic displacement relative to middle C or to the tonic in the middle C octave (if the key signatu...
Definition Entries.h:202
static const xml::XmlElementArray< Note > & xmlMappingArray()
Required for musx::factory::FieldPopulator.
bool downStemSecond
When the entry is downstem, it is drawn on the "wrong" side of the stem.
Definition Entries.h:210
std::tuple< music_theory::NoteName, int, int, int > NoteProperties
Note properites. A tuple containing:
Definition Entries.h:200
bool noPlayback
Indicates that this note should not be played back.
Definition Entries.h:216
bool parenAcci
True if the accidental has parentheses.
Definition Entries.h:215
bool noSpacing
Indicates that this note should ignored when calculating spacing.
Definition Entries.h:217
bool showAcci
True if the note has an accidental. (Dynamically changed by Finale unless freezeAcci is set....
Definition Entries.h:214
bool freezeAcci
True if the accidental should be forced on or off (based on showAcci.)
Definition Entries.h:218
NoteProperties calcNoteProperties(const MusxInstance< KeySignature > &key, KeySignature::KeyContext ctx, ClefIndex clefIndex, const MusxInstance< others::PercussionNoteInfo > &percNoteInfo, const MusxInstance< others::Staff > &staff=nullptr, bool respellEnharmonic=false) const
Calculates the note name, octave number, actual alteration, and staff position. This function does no...
Definition Entries.cpp:2311
A context wrapper for GFrameHold associated with a specific part and location.
Definition Entries.h:59
const GFrameHold * operator->() const
Provides const pointer-style access to the underlying GFrameHold.
Definition Entries.h:85
EntryInfoPtr calcNearestEntry(util::Fraction position, bool findExact=true, std::optional< LayerIndex > matchLayer=std::nullopt, std::optional< bool > matchVoice2=std::nullopt, util::Fraction atGraceNoteDuration=0) const
Calculates the nearest non-grace-note entry at the given position.
Definition Entries.cpp:2237
std::shared_ptr< const EntryFrame > createEntryFrame(LayerIndex layerIndex) const
Returns the EntryFrame for all entries in the given layer.
Definition Entries.cpp:2032
ClefIndex calcClefIndexAt(util::Fraction position) const
Returns the clef index in effect for at the specified util::Fraction position (as a fraction of whole...
Definition Entries.h:102
util::Fraction calcMinLegacyPickupSpacer() const
Calculates the minimum legacy pickup spacer, if any.
Definition Entries.cpp:2255
bool iterateEntries(LayerIndex layerIndex, std::function< bool(const EntryInfoPtr &)> iterator) const
iterates the entries for the specified layer in this GFrameHold from left to right
Definition Entries.cpp:2147
bool calcIsCuesOnly(bool includeVisibleInScore=false) const
Calculates if this staff in this measure contains only a cue layer and full-measure rest layers.
Definition Entries.cpp:2215
Cmper getRequestedPartId() const
Returns the requested part ID associated with this context.
Definition Entries.h:78
std::map< LayerIndex, int > calcVoices() const
Calculates the number of voices used by the GFrameHold instance.
Definition Entries.cpp:2166
ClefIndex calcClefIndexAt(Edu position) const
Returns the clef index in effect for at the specified Edu position. This function does not take into ...
Definition Entries.cpp:2189
Represents the attributes of a Finale frame holder.
Definition Details.h:1078
A class to represent fractions with integer m_numerator and m_denominator, automatically reduced to s...
Definition Fraction.h:38
static constexpr Fraction fromEdu(dom::Edu edu)
Constructs a Fraction from edu.
Definition Fraction.h:101
constexpr dom::Edu calcEduDuration() const
Calculates duration as a fraction of a whole note.
Definition Fraction.h:150
A dependency-free, header-only collection of useful functions for music theory.
NoteName
The available note names in array order.
Definition music_theory.hpp:66
int16_t MeasCmper
Enigma meas Cmper (may be negative when not applicable)
Definition Fundamentals.h:64
std::shared_ptr< const T > MusxInstance
Defines the type of a musx instance stored in a pool.
Definition MusxInstance.h:39
unsigned int LayerIndex
Layer index (valid values are 0..3)
Definition Fundamentals.h:71
int32_t Evpu
EVPU value (288 per inch)
Definition Fundamentals.h:57
uint16_t Cmper
Enigma "comperator" key type.
Definition Fundamentals.h:55
uint16_t ClefIndex
Index into options::ClefOptions::clefDefs.
Definition Fundamentals.h:68
int32_t Edu
"Enigma Durational Units" value (1024 per quarter note)
Definition Fundamentals.h:61
std::pair< NoteType, unsigned > calcNoteInfoFromEdu(Edu duration)
Calculates the NoteType and number of dots in an Edu value.
Definition Entries.cpp:66
unsigned calcNumberOfBeamsInEdu(Edu duration)
Calculates the number of beams or flags in the Edu value.
Definition Entries.cpp:1389
std::weak_ptr< Document > DocumentWeakPtr
Shared weak Document pointer.
Definition BaseClasses.h:57
int32_t EntryNumber
Entry identifier.
Definition Fundamentals.h:69
uint16_t NoteNumber
Note identifier.
Definition Fundamentals.h:70
std::shared_ptr< Document > DocumentPtr
Shared Document pointer.
Definition BaseClasses.h:55
int16_t StaffCmper
Enigma staff (staffId) Cmper (may be negative when not applicable)
Definition Fundamentals.h:65
std::weak_ptr< const T > MusxInstanceWeak
Defines a weak ptr to the type of a musx instance stored in a pool.
Definition MusxInstance.h:44
std::vector< XmlElementDescriptor< T > > XmlElementArray
an array type for XmlElementDescriptor instances.
Definition XmlInterface.h:127
object model for musx file (enigmaxml)
Definition BaseClasses.h:36
class to track tuplets in the frame
Definition Entries.h:959
size_t startIndex
the index of the first entry in the tuplet
Definition Entries.h:961
bool calcCreatesSingletonBeamRight() const
Calculates if this tuplet is being used to create a singleton beam to the right.
Definition Entries.h:1016
TupletInfo(const std::weak_ptr< const EntryFrame > &parent, const MusxInstance< details::TupletDef > &tup, size_t index, util::Fraction start, bool forVoice2)
Constructor.
Definition Entries.h:968
bool calcIsTremolo() const
Calculates if this tuplet represents a tremolo based on the following criteria.
Definition Entries.cpp:256
size_t endIndex
the index of the last entry in the tuplet
Definition Entries.h:962
bool includesEntry(const EntryInfoPtr &entryInfo) const
Return true if the entry is part of this tuplet.
Definition Entries.h:984
util::Fraction endDura
the actual duration where the tuplet ends
Definition Entries.h:964
size_t numEntries() const
Return the number of entries in the tuplet.
Definition Entries.h:974
util::Fraction startDura
the actual duration where the tuplet starts
Definition Entries.h:963
bool calcCreatesSingletonBeamLeft() const
Calculates if this tuplet is being used to create a singleton beam to the left.
Definition Entries.h:1027
MusxInstance< details::TupletDef > tuplet
the tuplet
Definition Entries.h:960
bool voice2
whether this tuplet is for voice2
Definition Entries.h:965
bool calcCreatesTimeStretch() const
Detects tuplets being used to create time stretch in an independent time signature.
Definition Entries.cpp:398
The result returned by voice iteration function that are aware of beamed rest workaround.
Definition Entries.h:921
bool effectiveHidden
True if the entry should be treated as effectively hidden.
Definition Entries.h:923
EntryInfoPtr entry
The entry found, or null if there is no usable entry.
Definition Entries.h:922