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 
26 namespace MusicXML2
27 {
28 
29 //______________________________________________________________________________
30 class msrTempoNote : public msrElement
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 
47  msrTempoNote (
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 };
102 EXP 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 };
253 EXP 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 
290  virtual ~msrTempoRelationshipElements ();
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 };
337 EXP 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 };
531 EXP 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