LibMusicXML 3.18
msrTempos.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 ___msrTempos___
14#define ___msrTempos___
15
16#include <list>
17
18#include "msrMeasureElements.h"
19
20#include "msrBasicTypes.h"
21
22#include "msrBeams.h"
23#include "msrWords.h"
24
25
26namespace MusicXML2
27{
28
29//______________________________________________________________________________
31{
32 public:
33
34 // creation from MusicXML
35 // ------------------------------------------------------
36
37 static SMARTP<msrTempoNote> create (
38 int inputLineNumber,
39 rational tempoNoteWholeNotes,
40 bool tempoNoteBelongsToATuplet);
41
42 protected:
43
44 // constructors/destructor
45 // ------------------------------------------------------
46
48 int inputLineNumber,
49 rational tempoNoteWholeNotes,
50 bool tempoNoteBelongsToATuplet);
51
52 virtual ~msrTempoNote ();
53
54 public:
55
56 // set and get
57 // ------------------------------------------------------
58
59 rational getTempoNoteWholeNotes () const
60 { return fTempoNoteWholeNotes; }
61
62 const list<S_msrBeam>&
63 getTempoNoteBeams () const
64 { return fTempoNoteBeams; }
65
66 // services
67 // ------------------------------------------------------
68
69 void appendBeamToTempoNote (S_msrBeam beam);
70
71 public:
72
73 // visitors
74 // ------------------------------------------------------
75
76 virtual void acceptIn (basevisitor* v);
77 virtual void acceptOut (basevisitor* v);
78
79 virtual void browseData (basevisitor* v);
80
81 public:
82
83 // print
84 // ------------------------------------------------------
85
86 string asString () const;
87
88 virtual void print (ostream& os) const;
89
90 private:
91
92 // fields
93 // ------------------------------------------------------
94
95 rational fTempoNoteWholeNotes;
96
97 list<S_msrBeam> fTempoNoteBeams;
98
99 bool fTempoNoteBelongsToATuplet;
100};
102EXP ostream& operator<< (ostream& os, const S_msrTempoNote& elt);
103
104//______________________________________________________________________________
106{
107 public:
108
109 // data types
110 // ------------------------------------------------------
111
112 enum msrTempoTupletTypeKind {
113 kTempoTupletTypeNone,
114 kTempoTupletTypeStart, kTempoTupletTypeStop };
115
116 static string tempoTupletTypeKindAsString (
117 msrTempoTupletTypeKind tempoTupletTypeKind);
118
119 enum msrTempoTupletBracketKind {
120 kTempoTupletBracketYes, kTempoTupletBracketNo};
121
122 static string tempoTupletBracketKindAsString (
123 msrTempoTupletBracketKind tempoTupletBracketKind);
124
125 enum msrTempoTupletShowNumberKind {
126 kTempoTupletShowNumberActual, kTempoTupletShowNumberBoth, kTempoTupletShowNumberNone };
127
128 static string tempoTupletShowNumberKindAsString (
129 msrTempoTupletShowNumberKind tempoTupletShowNumberKind);
130
131 // creation from MusicXML
132 // ------------------------------------------------------
133
134 static SMARTP<msrTempoTuplet> create (
135 int inputLineNumber,
136 int tempoTupletNumber,
137 msrTempoTupletBracketKind tempoTupletBracketKind,
138 msrTempoTupletShowNumberKind tempoTupletShowNumberKind,
139 int tempoTupletActualNotes,
140 int tempoTupletNormalNotes,
141 rational memberNotesDisplayWholeNotes);
142
143 protected:
144
145 // constructors/destructor
146 // ------------------------------------------------------
147
149 int inputLineNumber,
150 int tempoTupletNumber,
151 msrTempoTupletBracketKind tempoTupletBracketKind,
152 msrTempoTupletShowNumberKind tempoTupletShowNumberKind,
153 int tempoTupletActualNotes,
154 int tempoTupletNormalNotes,
155 rational memberNotesDisplayWholeNotes);
156
157 virtual ~msrTempoTuplet ();
158
159 public:
160
161 // set and get
162 // ------------------------------------------------------
163
164 int getTempoTupletNumber () const
165 { return fTempoTupletNumber; }
166
167 msrTempoTupletBracketKind getTempoTupletBracketKind () const
168 { return fTempoTupletBracketKind; }
169
170 msrTempoTupletShowNumberKind
171 getTempoTupletShowNumberKind () const
172 { return fTempoTupletShowNumberKind; }
173
174 int getTempoTupletActualNotes () const
175 { return fTempoTupletActualNotes; }
176 int getTempoTupletNormalNotes () const
177 { return fTempoTupletNormalNotes; }
178
179 rational getMemberNotesDisplayWholeNotes () const
180 { return fMemberNotesDisplayWholeNotes; }
181
182 const list<S_msrElement>&
183 getTempoTupletElements () const
184 { return fTempoTupletElements; }
185
186 rational getTempoTupletDisplayWholeNotes () const
187 { return fTempoTupletDisplayWholeNotes; }
188
189 // services
190 // ------------------------------------------------------
191
192 void addTempoNoteToTempoTuplet (S_msrTempoNote tempoNote);
193 /*
194 void addTempoTupletToTempoTuplet (S_msrTempoTuplet tempoTuplet);
195
196 void addTempoTupletToTempoTupletClone (S_msrTempoTuplet tempoTuplet);
197
198 void removeFirstNoteFromTempoTuplet (
199 int inputLineNumber,
200 S_msrTempoNote tempoNote);
201 */
202
203 // JMI void applyDisplayFactorToTempoTupletMembers ();
204
205 /*
206 void unapplySoundingFactorToTempoTupletMembers (
207 int containingTempoTupletActualNotes,
208 int containingTempoTupletNormalNotes);
209*/
210
211 public:
212
213 // visitors
214 // ------------------------------------------------------
215
216 virtual void acceptIn (basevisitor* v);
217 virtual void acceptOut (basevisitor* v);
218
219 virtual void browseData (basevisitor* v);
220
221 public:
222
223 // print
224 // ------------------------------------------------------
225
226 string asString () const;
227
228 virtual void print (ostream& os) const;
229
230 private:
231
232 // fields
233 // ------------------------------------------------------
234
235 int fTempoTupletNumber;
236
237 msrTempoTupletBracketKind
238 fTempoTupletBracketKind;
239
240 msrTempoTupletShowNumberKind
241 fTempoTupletShowNumberKind;
242
243 int fTempoTupletActualNotes;
244 int fTempoTupletNormalNotes;
245
246 rational fMemberNotesDisplayWholeNotes;
247
248 rational fTempoTupletDisplayWholeNotes;
249
250 list<S_msrElement> fTempoTupletElements;
251};
253EXP ostream& operator<< (ostream& os, const S_msrTempoTuplet& elt);
254
255//______________________________________________________________________________
257{
258 public:
259
260 // data types
261 // ------------------------------------------------------
262
263 enum msrTempoRelationshipElementsKind {
264 kTempoRelationshipElementsLeft,
265 kTempoRelationshipElementsRight };
266
267 static string tempoRelationshipElementsKindAsString (
268 msrTempoRelationshipElementsKind tempoRelationshipElementsKind);
269
270 public:
271
272 // creation from MusicXML
273 // ------------------------------------------------------
274
276 int inputLineNumber,
277 msrTempoRelationshipElementsKind
278 tempoRelationshipElementsKind);
279
280 protected:
281
282 // constructors/destructor
283 // ------------------------------------------------------
284
286 int inputLineNumber,
287 msrTempoRelationshipElementsKind
288 tempoRelationshipElementsKind);
289
291
292 public:
293
294 // set and get
295 // ------------------------------------------------------
296
297 rational getTempoRelationshipElementsKind () const
298 { return fTempoRelationshipElementsKind; }
299
300 const list<S_msrElement>&
301 getTempoRelationshipElementsList () const
302 { return fTempoRelationshipElementsList; }
303
304 // services
305 // ------------------------------------------------------
306
307 string asString () const;
308
309 void addElementToTempoRelationshipElements (
310 S_msrElement element);
311
312 public:
313
314 // visitors
315 // ------------------------------------------------------
316
317 virtual void acceptIn (basevisitor* v);
318 virtual void acceptOut (basevisitor* v);
319
320 virtual void browseData (basevisitor* v);
321
322 public:
323
324 // print
325 // ------------------------------------------------------
326
327 virtual void print (ostream& os) const;
328
329 private:
330
331 msrTempoRelationshipElementsKind
332 fTempoRelationshipElementsKind;
333
334 list<S_msrElement> fTempoRelationshipElementsList;
335};
337EXP ostream& operator<< (ostream& os, const S_msrTempoRelationshipElements& elt);
338
339//______________________________________________________________________________
341{
342 public:
343
344 // data types
345 // ------------------------------------------------------
346
347 enum msrTempoKind {
348 k_NoTempoKind,
349 kTempoBeatUnitsWordsOnly,
350 kTempoBeatUnitsPerMinute,
351 kTempoBeatUnitsEquivalence,
352 kTempoNotesRelationShip };
353
354 static string tempoKindAsString (
355 msrTempoKind tempoKind);
356
357 enum msrTempoParenthesizedKind {
358 kTempoParenthesizedYes, kTempoParenthesizedNo };
359
360 static string tempoParenthesizedKindAsString (
361 msrTempoParenthesizedKind tempoParenthesizedKind);
362
363 enum msrTempoRelationKind {
364 kTempoRelationNone, kTempoRelationEquals };
365
366 static string tempoRelationKindAsString (
367 msrTempoRelationKind tempoRelationKind);
368
369 // creation from MusicXML
370 // ------------------------------------------------------
371
372 static SMARTP<msrTempo> create (
373 int inputLineNumber,
374 S_msrWords tempoWords);
375
376 static SMARTP<msrTempo> create (
377 int inputLineNumber,
378 msrDottedDuration tempoBeatUnit,
379 string tempoPerMinute,
380 msrTempoParenthesizedKind
381 tempoParenthesizedKind,
382 msrPlacementKind tempoPlacementKind);
383
384 static SMARTP<msrTempo> create (
385 int inputLineNumber,
386 msrDottedDuration tempoBeatUnit,
387 msrDottedDuration tempoEquivalentBeatUnit,
388 msrTempoParenthesizedKind
389 tempoParenthesizedKind,
390 msrPlacementKind tempoPlacementKind);
391
392 static SMARTP<msrTempo> create (
393 int inputLineNumber,
395 tempoRelationLeftElements,
397 tempoRelationRightElements,
398 msrTempoParenthesizedKind
399 tempoParenthesizedKind,
400 msrPlacementKind tempoPlacementKind);
401
402 protected:
403
404 // constructors/destructor
405 // ------------------------------------------------------
406
407 msrTempo (
408 int inputLineNumber,
409 S_msrWords tempoWords);
410
411 msrTempo (
412 int inputLineNumber,
413 msrDottedDuration tempoBeatUnit,
414 string tempoPerMinute,
415 msrTempoParenthesizedKind
416 tempoParenthesizedKind,
417 msrPlacementKind tempoPlacementKind);
418
419 msrTempo (
420 int inputLineNumber,
421 msrDottedDuration tempoBeatUnit,
422 msrDottedDuration tempoEquivalentBeatUnit,
423 msrTempoParenthesizedKind
424 tempoParenthesizedKind,
425 msrPlacementKind tempoPlacementKind);
426
427 msrTempo (
428 int inputLineNumber,
430 tempoRelationLeftElements,
432 tempoRelationRightElements,
433 msrTempoParenthesizedKind
434 tempoParenthesizedKind,
435 msrPlacementKind tempoPlacementKind);
436
437 virtual ~msrTempo ();
438
439 public:
440
441 // set and get
442 // ------------------------------------------------------
443
444 msrTempoKind getTempoKind () const
445 { return fTempoKind; }
446
447 const list<S_msrWords>&
448 getTempoWordsList () const
449 { return fTempoWordsList; }
450
451 msrDottedDuration getTempoBeatUnit () const
452 { return fTempoBeatUnit; }
453
454 string getTempoPerMinute () const
455 { return fTempoPerMinute; }
456
457 msrDottedDuration getTempoEquivalentBeatUnit () const
458 { return fTempoEquivalentBeatUnit; }
459
461 getTempoRelationLeftElements () const
462 { return fTempoRelationLeftElements; }
463 msrTempoRelationKind getTempoRelationKind () const
464 { return fTempoRelationKind; }
466 getTempoRelationRightElements () const
467 { return fTempoRelationRightElements; }
468
469 msrTempoParenthesizedKind
470 getTempoParenthesizedKind () const
471 { return fTempoParenthesizedKind; }
472
473 msrPlacementKind getTempoPlacementKind () const
474 { return fTempoPlacementKind; }
475
476 // services
477 // ------------------------------------------------------
478
479 void appendWordsToTempo (S_msrWords tempoWords)
480 {
481 fTempoWordsList.push_back (tempoWords);
482 }
483
484 string tempoWordsListAsString (string separator) const;
485
486 public:
487
488 // visitors
489 // ------------------------------------------------------
490
491 virtual void acceptIn (basevisitor* v);
492 virtual void acceptOut (basevisitor* v);
493
494 virtual void browseData (basevisitor* v);
495
496 public:
497
498 // print
499 // ------------------------------------------------------
500
501 string asString () const;
502
503 virtual void print (ostream& os) const;
504
505 private:
506
507 // fields
508 // ------------------------------------------------------
509
510 msrTempoKind fTempoKind;
511
512 list<S_msrWords> fTempoWordsList;
513
514 msrDottedDuration fTempoBeatUnit;
515
516 string fTempoPerMinute; // '90' or '132-156' for example
517 msrDottedDuration fTempoEquivalentBeatUnit;
518
520 fTempoRelationLeftElements;
521 msrTempoRelationKind fTempoRelationKind;
523 fTempoRelationRightElements;
524
525 msrTempoParenthesizedKind
526 fTempoParenthesizedKind;
527
528 msrPlacementKind fTempoPlacementKind;
529};
531EXP ostream& operator<< (ostream& os, const S_msrTempo& elt);
532
533
534} // namespace MusicXML2
535
536
537#endif
the smart pointer implementation
Definition: smartpointer.h:58
Definition: basevisitor.h:25
Definition: msrBasicTypes.h:435
Definition: msrElements.h:26
Definition: msrMeasureElements.h:24
Definition: msrTempos.h:31
Definition: msrTempos.h:257
Definition: msrTempos.h:106
Definition: msrTempos.h:341
Rational number representation.
Definition: rational.h:25