MuseScore  3.4
Music composition and notation
durationtype.h
Go to the documentation of this file.
1 //=============================================================================
2 // MuseScore
3 // Music Composition & Notation
4 //
5 // Copyright (C) 2008-2011 Werner Schweer
6 //
7 // This program is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License version 2
9 // as published by the Free Software Foundation and appearing in
10 // the file LICENCE.GPL
11 //=============================================================================
12 
13 #ifndef __DURATIONTYPE_H__
14 #define __DURATIONTYPE_H__
15 
16 #include "fraction.h"
17 #include "note.h"
18 
19 namespace Ms {
20 
21 class TimeSigFrac;
22 enum class BeatType : char;
23 
24 //---------------------------------------------------------
25 // TDuration
26 //---------------------------------------------------------
27 
28 class TDuration {
29  public:
30  enum class DurationType : signed char {
31  V_LONG, V_BREVE, V_WHOLE, V_HALF, V_QUARTER, V_EIGHTH, V_16TH,
32  V_32ND, V_64TH, V_128TH, V_256TH, V_512TH, V_1024TH,
33  V_ZERO, V_MEASURE, V_INVALID
34  };
35  private:
37  char _dots;
38  void shiftType(int nSteps, bool stepDotted = false);
39  void truncateToFraction(const Fraction& l, int maxDots);
40  bool setDotsToFitFraction(const Fraction& l, int maxDots);
41 
42  public:
43  TDuration() : _val(DurationType::V_INVALID), _dots(0) {}
44  TDuration(const Fraction& l, bool truncate = false, int maxDots = 4, DurationType maxType = DurationType::V_LONG);
45  TDuration(const QString&);
46  TDuration(DurationType t) : _val(t), _dots(0) {}
47 
48  DurationType type() const { return _val; }
49  bool isValid() const { return _val != DurationType::V_INVALID; }
50  bool isZero() const { return _val == DurationType::V_ZERO; }
51  bool isMeasure() const { return _val == DurationType::V_MEASURE; }
52  void setVal(int tick);
53  void setType(DurationType t);
54  void setType(const QString&);
55 
56  Fraction ticks() const;
57  bool operator==(const TDuration& t) const { return t._val == _val && t._dots == _dots; }
58  bool operator==(const DurationType& t) const { return t == _val; }
59  bool operator!=(const TDuration& t) const { return t._val != _val || t._dots != _dots; }
60  bool operator<(const TDuration& t) const;
61  bool operator>(const TDuration& t) const;
62  bool operator>=(const TDuration& t) const;
63  bool operator<=(const TDuration& t) const;
64  TDuration& operator-=(const TDuration& t);
65  TDuration operator-(const TDuration& t) const { return TDuration(*this) -= t; }
66  TDuration& operator+=(const TDuration& t);
67  TDuration operator+(const TDuration& t) const { return TDuration(*this) += t; }
68 
69  QString name() const;
70  NoteHead::Type headType() const;
71  int hooks() const;
72  bool hasStem() const;
73  TDuration shift(int nSteps) const { TDuration d(type()); d.shiftType(nSteps); return d; } // dots are not retained
74  TDuration shiftRetainDots(int nSteps, bool stepDotted = false) {
75  TDuration d(type());
76  d.setDots(_dots);
77  d.shiftType(nSteps, stepDotted);
78  return d;
79  }
80  int dots() const { return _dots; }
81  void setDots(int v);
82  Fraction fraction() const;
83  QString durationTypeUserName() const;
84  static bool isValid(Fraction f);
85  };
86 
87 std::vector<TDuration> toDurationList(Fraction l, bool useDots, int maxDots = 4, bool printRestRemains = true);
88 std::vector<TDuration> toRhythmicDurationList(const Fraction& l, bool isRest, Fraction rtickStart, const TimeSigFrac& nominal, Measure* msr, int maxDots);
89 
90 bool forceRhythmicSplit(bool isRest, BeatType startBeat, BeatType endBeat, int beatsCrossed, BeatType strongestBeatCrossed, const TimeSigFrac& nominal);
91 bool forceRhythmicSplitSimple(bool isRest, BeatType startBeat, BeatType endBeat, int beatsCrossed, BeatType strongestBeatCrossed);
92 bool forceRhythmicSplitCompound(bool isRest, BeatType startBeat, BeatType endBeat, int beatsCrossed, BeatType strongestBeatCrossed);
93 
94 void populateRhythmicList(std::vector<TDuration>* dList, const Fraction& l, bool isRest, const Fraction& rtickStart, const TimeSigFrac& nominal, int maxDots);
95 void splitCompoundBeatsForList(std::vector<TDuration>* dList, const Fraction& l, bool isRest, const Fraction& rtickStart, const TimeSigFrac& nominal, int maxDots);
96 } // namespace Ms
97 
98 Q_DECLARE_METATYPE(Ms::TDuration);
99 
100 #endif
101 
bool forceRhythmicSplit(bool isRest, BeatType startBeat, BeatType endBeat, int dUnitsCrossed, BeatType strongestBeatCrossed, const TimeSigFrac &nominal)
Definition: durationtype.cpp:690
Definition: durationtype.h:28
std::vector< TDuration > toDurationList(Fraction l, bool useDots, int maxDots, bool printRestRemains)
Definition: durationtype.cpp:505
bool operator!=(const TDuration &t) const
Definition: durationtype.h:59
DurationType type() const
Definition: durationtype.h:48
one measure in a system
Definition: measure.h:65
DurationType
Definition: durationtype.h:30
DurationType _val
Definition: durationtype.h:36
void shiftType(int nSteps, bool stepDotted=false)
Definition: durationtype.cpp:301
bool isValid() const
Definition: durationtype.h:49
TDuration operator-(const TDuration &t) const
Definition: durationtype.h:65
Definition: sig.h:43
char _dots
Definition: durationtype.h:37
int dots() const
Definition: durationtype.h:80
void setDots(int v)
Definition: durationtype.cpp:55
TDuration shiftRetainDots(int nSteps, bool stepDotted=false)
Definition: durationtype.h:74
TDuration operator+(const TDuration &t) const
Definition: durationtype.h:67
bool isZero() const
Definition: durationtype.h:50
bool operator==(const DurationType &t) const
Definition: durationtype.h:58
Definition: aeolus.cpp:26
bool forceRhythmicSplitSimple(bool isRest, BeatType startBeat, BeatType endBeat, int beatsCrossed, BeatType strongestBeatCrossed)
Definition: durationtype.cpp:761
void splitCompoundBeatsForList(std::vector< TDuration > *dList, const Fraction &l, bool isRest, const Fraction &rtickStart, const TimeSigFrac &nominal, int maxDots)
Definition: durationtype.cpp:627
BeatType
Definition: sig.h:29
bool forceRhythmicSplitCompound(bool isRest, BeatType startBeat, BeatType endBeat, int dUnitsCrossed, BeatType strongestBeatCrossed)
Definition: durationtype.cpp:727
void populateRhythmicList(std::vector< TDuration > *dList, const Fraction &l, bool isRest, const Fraction &rtickStart, const TimeSigFrac &nominal, int maxDots)
Definition: durationtype.cpp:553
Definition of classes Note and NoteHead.
bool operator==(const TDuration &t) const
Definition: durationtype.h:57
bool isMeasure() const
Definition: durationtype.h:51
TDuration()
Definition: durationtype.h:43
Type
Definition: note.h:129
Definition: fraction.h:46
std::vector< TDuration > toRhythmicDurationList(const Fraction &l, bool isRest, Fraction rtickStart, const TimeSigFrac &nominal, Measure *msr, int maxDots)
Definition: durationtype.cpp:528
TDuration shift(int nSteps) const
Definition: durationtype.h:73
TDuration(DurationType t)
Definition: durationtype.h:46