LibMusicXML  3.18
msrKeys.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 ___msrKeys___
14 #define ___msrKeys___
15 
16 #include <list>
17 
18 #include "msrMeasureElements.h"
19 
20 #include "msrBasicTypes.h"
21 
22 
23 namespace MusicXML2
24 {
25 
26 //______________________________________________________________________________
27 class msrHumdrumScotKeyItem;
28 typedef SMARTP<msrHumdrumScotKeyItem> S_msrHumdrumScotKeyItem;
29 
30 //______________________________________________________________________________
32 {
33  public:
34 
35  // data types
36  // ------------------------------------------------------
37 
38  enum msrHumdrumScotKeyItemKind {
39  kTraditionalKind, kHumdrumScotKind };
40 
41  static string HumdrumScotKeyItemKindAsString (
42  msrHumdrumScotKeyItemKind HumdrumScotKeyItemKind);
43 
44  enum msrHumdrumScotKeyItemModeKind {
45  kMajorMode, kMinorMode,
46  kIonianMode, kDorianMode, kPhrygianMode, kLydianMode,
47  kMixolydianMode, kAeolianMode, kLocrianMode };
48 
49  static string HumdrumScotKeyItemModeKindAsString (
50  msrHumdrumScotKeyItemModeKind HumdrumScotKeyItemModeKind);
51 
52  // creation from MusicXML
53  // ------------------------------------------------------
54 
55  static SMARTP<msrHumdrumScotKeyItem> create (
56  int inputLineNumber);
57 
58  protected:
59 
60  // constructors/destructor
61  // ------------------------------------------------------
62 
64  int inputLineNumber);
65 
66  virtual ~msrHumdrumScotKeyItem ();
67 
68  public:
69 
70  // set and get
71  // ------------------------------------------------------
72 
73  void setKeyItemDiatonicPitchKind (
74  msrDiatonicPitchKind diatonicPitchKind);
75 
76  msrDiatonicPitchKind getKeyItemDiatonicPitchKind () const
77  { return fKeyDiatonicPitchKind; }
78 
79  void setKeyItemAlterationKind (
80  msrAlterationKind alterationKind);
81 
82  msrAlterationKind getKeyItemAlterationKind () const
83  { return fKeyAlterationKind; }
84 
85  void setKeyItemOctave (int keyOctave);
86 
87  int getKeyItemOctave () const
88  { return fKeyOctave; }
89 
90  // services
91  // ------------------------------------------------------
92 
93  bool isEqualTo (
95  otherHumdrumScotKeyItem) const;
96 
97  public:
98 
99  // visitors
100  // ------------------------------------------------------
101 
102  virtual void acceptIn (basevisitor* v);
103  virtual void acceptOut (basevisitor* v);
104 
105  virtual void browseData (basevisitor* v);
106 
107  public:
108 
109  // print
110  // ------------------------------------------------------
111 
112  string asString () const;
113 
114  virtual void print (ostream& os) const;
115 
116  private:
117 
118  // fields
119  // ------------------------------------------------------
120 
121  msrDiatonicPitchKind fKeyDiatonicPitchKind;
122  msrAlterationKind fKeyAlterationKind;
123  int fKeyOctave;
124 };
126 EXP ostream& operator<< (ostream& os, const S_msrHumdrumScotKeyItem& elt);
127 
128 //______________________________________________________________________________
129 class msrKey;
130 typedef SMARTP<msrKey> S_msrKey;
131 
132 class msrKey : public msrMeasureElement
133 {
134  public:
135 
136  // data types
137  // ------------------------------------------------------
138 
139  enum msrKeyKind {
140  kTraditionalKind, kHumdrumScotKind };
141 
142  static string keyKindAsString (
143  msrKeyKind keyKind);
144 
145  enum msrKeyModeKind {
146  kMajorMode, kMinorMode,
147  kIonianMode, kDorianMode, kPhrygianMode, kLydianMode,
148  kMixolydianMode, kAeolianMode, kLocrianMode };
149 
150  static string keyModeKindAsString (
151  msrKeyModeKind keyModeKind);
152 
153  // creation from MusicXML
154  // ------------------------------------------------------
155 
156  static SMARTP<msrKey> createTraditional (
157  int inputLineNumber,
158  msrQuarterTonesPitchKind keyTonicPitchKind,
159  msrKeyModeKind keyModeKind,
160  int keyCancel);
161 
162  static SMARTP<msrKey> createHumdrumScot (
163  int inputLineNumber);
164 
165  protected:
166 
167  // constructors/destructor
168  // ------------------------------------------------------
169 
170  msrKey ( // for traditional keys
171  int inputLineNumber,
172  msrQuarterTonesPitchKind keyTonicPitchKind,
173  msrKeyModeKind keyModeKind,
174  int keyCancel);
175 
176  msrKey ( // for Humdrum/Scot keys
177  int inputLineNumber);
178 
179  virtual ~msrKey ();
180 
181  public:
182 
183  // set and get
184  // ------------------------------------------------------
185 
186  msrKeyKind getKeyKind () const
187  { return fKeyKind; }
188 
189  // traditional keys
190 
191  msrQuarterTonesPitchKind
192  getKeyTonicQuarterTonesPitchKind () const
193  { return fKeyTonicQuarterTonesPitchKind; }
194 
195  msrKeyModeKind getKeyModeKind () const
196  { return fKeyModeKind; }
197 
198  int getKeyCancel () const
199  { return fKeyCancel; }
200 
201  // Humdrum/Scot keys
202 
203  // void setKeyItemsOctavesAreSpecified ()
204  // { fKeyItemsOctavesAreSpecified = true; }
205 
206  bool getKeyItemsOctavesAreSpecified () const
207  { return fKeyItemsOctavesAreSpecified; }
208 
209  const vector<S_msrHumdrumScotKeyItem>&
210  getHumdrumScotKeyItemsVector ()
211  { return fHumdrumScotKeyItemsVector; }
212 
213 
214  // services
215  // ------------------------------------------------------
216 
217  bool isEqualTo (S_msrKey otherKey) const;
218 
219  void appendHumdrumScotKeyItem (
221 
222  public:
223 
224  // visitors
225  // ------------------------------------------------------
226 
227  virtual void acceptIn (basevisitor* v);
228  virtual void acceptOut (basevisitor* v);
229 
230  virtual void browseData (basevisitor* v);
231 
232  public:
233 
234  // print
235  // ------------------------------------------------------
236 
237  string asString () const;
238 
239  virtual void print (ostream& os) const;
240 
241  private:
242 
243  // fields
244  // ------------------------------------------------------
245 
246  msrKeyKind fKeyKind;
247 
248  // traditional keys
249 
250  msrQuarterTonesPitchKind
251  fKeyTonicQuarterTonesPitchKind;
252  msrKeyModeKind fKeyModeKind;
253  int fKeyCancel;
254 
255  // Humdrum/Scot keys
256  vector<S_msrHumdrumScotKeyItem>
257  fHumdrumScotKeyItemsVector;
258  bool fKeyItemsOctavesAreSpecified;
259 };
260 typedef SMARTP<msrKey> S_msrKey;
261 EXP ostream& operator<< (ostream& os, const S_msrKey& elt);
262 
263 
264 } // namespace MusicXML2
265 
266 
267 #endif
MusicXML2::msrHumdrumScotKeyItem
Definition: msrKeys.h:32
MusicXML2::msrMeasureElement
Definition: msrMeasureElements.h:24
MusicXML2::msrKey
Definition: msrKeys.h:133
MusicXML2::SMARTP< msrHumdrumScotKeyItem >
MusicXML2::basevisitor
Definition: basevisitor.h:25
MusicXML2::msrElement
Definition: msrElements.h:26