LibMusicXML  3.18
msrTablatures.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 ___msrTablatures___
14 #define ___msrTablatures___
15 
16 #include <list>
17 
18 #include "msrElements.h"
19 
20 #include "msrBasicTypes.h"
21 
22 
23 namespace MusicXML2
24 {
25 
26 //______________________________________________________________________________
27 class msrFrameNote : public msrElement
28 {
29  public:
30 
31  // data types
32  // ------------------------------------------------------
33 
34  enum msrBarreTypeKind {
35  kBarreTypeNone,
36  kBarreTypeStart, kBarreTypeStop };
37 
38  static string barreTypeKindAsString (
39  msrBarreTypeKind barreTypeKind);
40 
41 /*
42  <frame-note>
43  <string>6</string>
44  <fret>0</fret>
45  </frame-note>
46 */
47 
48  // creation from MusicXML
49  // ------------------------------------------------------
50 
51  static SMARTP<msrFrameNote> create (
52  int inputLineNumber,
53  int frameNoteStringNumber,
54  int frameNoteFretNumber,
55  int frameNoteFingering,
56  msrBarreTypeKind frameNoteBarreTypeKind);
57 
58  protected:
59 
60  // constructors/destructor
61  // ------------------------------------------------------
62 
63  msrFrameNote (
64  int inputLineNumber,
65  int frameNoteStringNumber,
66  int frameNoteFretNumber,
67  int frameNoteFingering,
68  msrBarreTypeKind frameNoteBarreTypeKind);
69 
70  virtual ~msrFrameNote ();
71 
72  public:
73 
74  // set and get
75  // ------------------------------------------------------
76 
77  int getFrameNoteStringNumber () const
78  { return fFrameNoteStringNumber; }
79 
80  int getFrameNoteFretNumber () const
81  { return fFrameNoteFretNumber; }
82 
83  int getFrameNoteFingering () const
84  { return fFrameNoteFingering; }
85 
86  msrBarreTypeKind getFrameNoteBarreTypeKind () const
87  { return fFrameNoteBarreTypeKind; }
88 
89  // services
90  // ------------------------------------------------------
91 
92  public:
93 
94  // visitors
95  // ------------------------------------------------------
96 
97  virtual void acceptIn (basevisitor* v);
98  virtual void acceptOut (basevisitor* v);
99 
100  virtual void browseData (basevisitor* v);
101 
102  public:
103 
104  // print
105  // ------------------------------------------------------
106 
107  string asString () const;
108 
109  virtual void print (ostream& os) const;
110 
111  private:
112 
113  // fields
114  // ------------------------------------------------------
115 
116  int fFrameNoteStringNumber;
117  int fFrameNoteFretNumber;
118 
119  int fFrameNoteFingering;
120 
121  msrBarreTypeKind fFrameNoteBarreTypeKind;
122 };
124 EXP ostream& operator<< (ostream& os, const S_msrFrameNote& elt);
125 
126 //______________________________________________________________________________
127 struct msrBarre {
128  public:
129 
130  // constructors/destructor
131  // ------------------------------------------------------
132 
133  msrBarre (
134  int barreStartString,
135  int barreStopString,
136  int barreFretNumber)
137  {
138  fBarreStartString = barreStartString;
139  fBarreStopString = barreStopString;
140  fBarreFretNumber = barreFretNumber;
141  }
142 
143  // fields
144  // ------------------------------------------------------
145 
146  int fBarreStartString;
147  int fBarreStopString;
148  int fBarreFretNumber;
149 };
150 
151 //______________________________________________________________________________
152 class msrFrame : public msrElement
153 {
154  public:
155 
156  // creation from MusicXML
157  // ------------------------------------------------------
158 
159  static SMARTP<msrFrame> create (
160  int inputLineNumber,
161  int frameStringsNumber,
162  int frameFretsNumber,
163  int frameFirstFretNumber);
164 
165  protected:
166 
167  // constructors/destructor
168  // ------------------------------------------------------
169 
170  msrFrame (
171  int inputLineNumber,
172  int frameStringsNumber,
173  int frameFretsNumber,
174  int frameFirstFretNumber);
175 
176  virtual ~msrFrame ();
177 
178  public:
179 
180  // set and get
181  // ------------------------------------------------------
182 
183 
184  int getFrameStringsNumber () const
185  { return fFrameStringsNumber; }
186 
187  int getFrameFretsNumber () const
188  { return fFrameFretsNumber; }
189 
190  int getFrameFirstFretNumber () const
191  { return fFrameFirstFretNumber; }
192 
193  const list<S_msrFrameNote>&
194  getFrameFrameNotesList ()
195  { return fFrameFrameNotesList; }
196 
197  const list<msrBarre>& getFrameBarresList ()
198  { return fFrameBarresList; }
199 
200  bool getFrameContainsFingerings () const
201  { return fFrameContainsFingerings; }
202 
203  public:
204 
205  // public services
206  // ------------------------------------------------------
207 
208  void appendFrameNoteToFrame (
209  S_msrFrameNote frameNote);
210 
211  private:
212 
213  // private services
214  // ------------------------------------------------------
215 
216  void appendBarreToFrame ( // JMI
217  msrBarre barre)
218  {
219  fFrameBarresList.push_back (barre);
220  }
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  int fFrameStringsNumber;
247  int fFrameFretsNumber;
248  int fFrameFirstFretNumber;
249 
250  list<S_msrFrameNote> fFrameFrameNotesList;
251 
252  list<msrBarre > fFrameBarresList;
253 
254  // a barre start remains pending
255  // until the matching stop is appended to the frame
256  stack<S_msrFrameNote> fPendingBarreStartFrameNotes;
257 
258  // optimizing computation
259  bool fFrameContainsFingerings;
260 };
262 EXP ostream& operator<< (ostream& os, const S_msrFrame& elt);
263 
264 
265 } // namespace MusicXML2
266 
267 
268 #endif
the smart pointer implementation
Definition: smartpointer.h:58
Definition: basevisitor.h:25
Definition: msrElements.h:26
Definition: msrTablatures.h:28
Definition: msrTablatures.h:153
Definition: msrTablatures.h:127