LibMusicXML 3.18
msrTimes.h
1/*
2 MusicXML Library
3 Copyright (C) Grame 2006-2013
4
5 This Source Code Form is subject to the terms of the Mozilla Public
6 License, v. 2.0. If a copy of the MPL was not distributed with this
7 file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
9 Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
10 research@grame.fr
11*/
12
13#ifndef ___msrTimes___
14#define ___msrTimes___
15
16#include "msrMeasureElements.h"
17
18#include "msrBasicTypes.h"
19
20
21namespace MusicXML2
22{
23
24//______________________________________________________________________________
25class msrTimeItem;
26typedef SMARTP<msrTimeItem> S_msrTimeItem;
27
28class msrTime;
29typedef SMARTP<msrTime> S_msrTime;
30
31//______________________________________________________________________________
32class msrTimeItem : public msrElement
33{
34 public:
35
36 // creation from MusicXML
37 // ------------------------------------------------------
38
39 static SMARTP<msrTimeItem> create (
40 int inputLineNumber);
41
42 protected:
43
44 // constructors/destructor
45 // ------------------------------------------------------
46
48 int inputLineNumber);
49
50 virtual ~msrTimeItem ();
51
52 public:
53
54 // set and get
55 // ------------------------------------------------------
56
57 const vector<int>& getTimeBeatsNumbersVector () const
58 { return fTimeBeatsNumbersVector; }
59
60 void setTimeBeatValue (int timeBeatValue);
61
62 int getTimeBeatValue () const
63 { return fTimeBeatValue; }
64
65 // services
66 // ------------------------------------------------------
67
68 bool isEqualTo (S_msrTimeItem otherTimeItem) const;
69
70 void appendBeatsNumber (int beatsNumber);
71
72 int getTimeBeatsNumber () const;
73
74 public:
75
76 // visitors
77 // ------------------------------------------------------
78
79 virtual void acceptIn (basevisitor* v);
80 virtual void acceptOut (basevisitor* v);
81
82 virtual void browseData (basevisitor* v);
83
84 public:
85
86 // print
87 // ------------------------------------------------------
88
89 string asString () const;
90
91 virtual void print (ostream& os) const;
92
93 private:
94
95 // fields
96 // ------------------------------------------------------
97
98 vector<int> fTimeBeatsNumbersVector; // 5+3+1 is possible
99 int fTimeBeatValue;
100};
102EXP ostream& operator<< (ostream& os, const S_msrTimeItem& elt);
103
104//______________________________________________________________________________
106{
107 public:
108
109 // data types
110 // ------------------------------------------------------
111
112 enum msrTimeSymbolKind {
113 kTimeSymbolNone,
114 kTimeSymbolCommon,
115 kTimeSymbolCut,
116 kTimeSymbolNote,
117 kTimeSymbolDottedNote,
118 kTimeSymbolSingleNumber,
119 kTimeSymbolSenzaMisura };
120
121 static string timeSymbolKindAsString (
122 msrTimeSymbolKind timeSymbolKind);
123
124 enum msrTimeSeparatorKind {
125 kTimeSeparatorNone,
126 kTimeSeparatorHorizontal,
127 kTimeSeparatorDiagonal,
128 kTimeSeparatorVertical,
129 kTimeSeparatorAdjacent };
130
131 static string timeSeparatorKindAsString (
132 msrTimeSeparatorKind timeSeparatorKind);
133
134 enum msrTimeRelationKind {
135 kTimeRelationNone,
136 kTimeRelationParentheses,
137 kTimeRelationBracket,
138 kTimeRelationEquals,
139 kTimeRelationSlash,
140 kTimeRelationSpace,
141 kTimeRelationHyphen };
142
143 static string timeRelationKindAsString (
144 msrTimeRelationKind timeRelationKind);
145
146 // creation from MusicXML
147 // ------------------------------------------------------
148
149 static SMARTP<msrTime> create (
150 int inputLineNumber,
151 msrTimeSymbolKind timeSymbolKind);
152
153 static SMARTP<msrTime> createFourQuartersTime (
154 int inputLineNumber);
155
156 protected:
157
158 // constructors/destructor
159 // ------------------------------------------------------
160
161 msrTime (
162 int inputLineNumber,
163 msrTimeSymbolKind timeSymbolKind);
164
165 virtual ~msrTime ();
166
167 public:
168
169 // set and get
170 // ------------------------------------------------------
171
172 msrTimeSymbolKind getTimeSymbolKind () const
173 { return fTimeSymbolKind; }
174
175 bool getTimeIsCompound () const
176 { return fTimeIsCompound; }
177
178 const vector<S_msrTimeItem>&
179 getTimeItemsVector ()
180 { return fTimeItemsVector; }
181
182 // services
183 // ------------------------------------------------------
184
185 bool isEqualTo (S_msrTime otherTime) const;
186
187 void appendTimeItem (
188 S_msrTimeItem timeItem);
189
190 rational wholeNotesPerMeasure () const;
191
192 public:
193
194 // visitors
195 // ------------------------------------------------------
196
197 virtual void acceptIn (basevisitor* v);
198 virtual void acceptOut (basevisitor* v);
199
200 virtual void browseData (basevisitor* v);
201
202 public:
203
204 // print
205 // ------------------------------------------------------
206
207 string asString () const;
208
209 string asShortString () const;
210
211 virtual void print (ostream& os) const;
212
213 private:
214
215 // fields
216 // ------------------------------------------------------
217
218 msrTimeSymbolKind fTimeSymbolKind;
219
220 vector<S_msrTimeItem> fTimeItemsVector;
221
222 // a time is compound if it contains several items
223 // or if the only one has several beats numbers
224 // i.e. 3/4 is not, (3+4)/8 is, and 2/4+3/4 is too
225 bool fTimeIsCompound;
226};
228EXP ostream& operator<< (ostream& os, const S_msrTime& elt);
229
230
231} // namespace MusicXML2
232
233
234#endif
the smart pointer implementation
Definition: smartpointer.h:58
Definition: basevisitor.h:25
Definition: msrElements.h:26
Definition: msrMeasureElements.h:24
Definition: msrTimes.h:33
Definition: msrTimes.h:106
Rational number representation.
Definition: rational.h:25