LibMusicXML  3.18
msrVoice2MasterVoiceCreator.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 ___msrVoice2MasterVoiceCreator___
14 #define ___msrVoice2MasterVoiceCreator___
15 
16 #include <map>
17 #include <vector>
18 
19 #include "msr.h"
20 
21 
22 namespace MusicXML2
23 {
24 
25 //________________________________________________________________________
27 
28  public visitor<S_msrVoice>,
29 
30  // keys
31 
32  public visitor<S_msrKey>,
33 
34  // times
35 
36  public visitor<S_msrTime>,
37 
38  // tempo
39 
40  public visitor<S_msrTempo>,
41 
42  public visitor<S_msrSegment>,
43 
44  // rehearsal
45 
46  public visitor<S_msrRehearsal>,
47 
48  // harmonies
49 
50  public visitor<S_msrHarmony>,
51  public visitor<S_msrHarmonyDegree>,
52 
53  // frames
54 
55  public visitor<S_msrFrame>,
56 
57  // figured bass
58 
59  public visitor<S_msrFiguredBass>,
60  public visitor<S_msrFigure>,
61 
62  // measures
63 
64  public visitor<S_msrMeasure>,
65 
66  // fermatas
67 
68  public visitor<S_msrFermata>,
69 
70  // notes
71 
72  public visitor<S_msrNote>,
73 
74  // chords
75 
76  public visitor<S_msrChord>,
77 
78  // tuplets
79 
80  public visitor<S_msrTuplet>,
81 
82  // ?
83 
84  public visitor<S_msrBarline>,
85 
86  public visitor<S_msrSegno>,
87  public visitor<S_msrCoda>,
88 
89  public visitor<S_msrScordatura>,
90 
91  public visitor<S_msrBarCheck>,
92  public visitor<S_msrBarNumberCheck>,
93 
94  public visitor<S_msrLineBreak>,
95 
96  public visitor<S_msrPageBreak>,
97 
98  // repeats
99 
100  public visitor<S_msrRepeat>,
101  public visitor<S_msrRepeatCommonPart>,
102  public visitor<S_msrRepeatEnding>,
103 
104  public visitor<S_msrMeasuresRepeat>,
105  public visitor<S_msrMeasuresRepeatPattern>,
106  public visitor<S_msrMeasuresRepeatReplicas>,
107 
108  public visitor<S_msrRestMeasures>,
109  public visitor<S_msrRestMeasuresContents>
110 
111 {
112  public:
113 
115  indentedOstream& ios,
116  S_msrVoice mVoice);
117 
118  virtual ~msrVoice2MasterVoiceCreator ();
119 
120  void buildMsrMasterFromMsrVoice ();
121 
122  S_msrVoice getMasterVoice () const
123  { return fMasterVoice; }
124 
125  protected:
126 
127  virtual void visitStart (S_msrVoice& elt);
128  virtual void visitEnd (S_msrVoice& elt);
129 
130  virtual void visitStart (S_msrKey& elt);
131  virtual void visitEnd (S_msrKey& elt);
132 
133  virtual void visitStart (S_msrTime& elt);
134  virtual void visitEnd (S_msrTime& elt);
135 
136  virtual void visitStart (S_msrTempo& elt);
137  virtual void visitEnd (S_msrTempo& elt);
138 
139  virtual void visitStart (S_msrRehearsal& elt);
140  virtual void visitEnd (S_msrRehearsal& elt);
141 
142  virtual void visitStart (S_msrSegment& elt);
143  virtual void visitEnd (S_msrSegment& elt);
144 
145  virtual void visitStart (S_msrHarmony& elt);
146  virtual void visitEnd (S_msrHarmony& elt);
147  virtual void visitStart (S_msrHarmonyDegree& elt);
148 
149  virtual void visitStart (S_msrFrame& elt);
150 
151  virtual void visitStart (S_msrFiguredBass& elt);
152  virtual void visitEnd (S_msrFiguredBass& elt);
153  virtual void visitStart (S_msrFigure& elt);
154 
155  virtual void visitStart (S_msrMeasure& elt);
156  virtual void visitEnd (S_msrMeasure& elt);
157 
158  virtual void visitStart (S_msrFermata& elt);
159 
160  virtual void visitStart (S_msrSlash& elt);
161 
162  virtual void visitStart (S_msrNote& elt);
163  virtual void visitEnd (S_msrNote& elt);
164 
165  virtual void visitStart (S_msrChord& elt);
166  virtual void visitEnd (S_msrChord& elt);
167 
168  virtual void visitStart (S_msrTuplet& elt);
169  virtual void visitEnd (S_msrTuplet& elt);
170 
171  virtual void visitStart (S_msrBarline& elt);
172  virtual void visitEnd (S_msrBarline& elt);
173 
174  virtual void visitStart (S_msrSegno& elt);
175  virtual void visitStart (S_msrCoda& elt);
176 
177  virtual void visitStart (S_msrScordatura& elt);
178 
179  virtual void visitStart (S_msrBarCheck& elt);
180  virtual void visitEnd (S_msrBarCheck& elt);
181  virtual void visitStart (S_msrBarNumberCheck& elt);
182  virtual void visitEnd (S_msrBarNumberCheck& elt);
183 
184  virtual void visitStart (S_msrLineBreak& elt);
185  virtual void visitEnd (S_msrLineBreak& elt);
186 
187  virtual void visitStart (S_msrPageBreak& elt);
188  virtual void visitEnd (S_msrPageBreak& elt);
189 
190  virtual void visitStart (S_msrRepeat& elt);
191  virtual void visitEnd (S_msrRepeat& elt);
192  virtual void visitStart (S_msrRepeatCommonPart& elt);
193  virtual void visitEnd (S_msrRepeatCommonPart& elt);
194  virtual void visitStart (S_msrRepeatEnding& elt);
195  virtual void visitEnd (S_msrRepeatEnding& elt);
196 
197  virtual void visitStart (S_msrMeasuresRepeat& elt);
198  virtual void visitEnd (S_msrMeasuresRepeat& elt);
199  virtual void visitStart (S_msrMeasuresRepeatPattern& elt);
200  virtual void visitEnd (S_msrMeasuresRepeatPattern& elt);
201  virtual void visitStart (S_msrMeasuresRepeatReplicas& elt);
202  virtual void visitEnd (S_msrMeasuresRepeatReplicas& elt);
203 
204  virtual void visitStart (S_msrRestMeasures& elt);
205  virtual void visitEnd (S_msrRestMeasures& elt);
206  virtual void visitStart (S_msrRestMeasuresContents& elt);
207  virtual void visitEnd (S_msrRestMeasuresContents& elt);
208 
209  private:
210 
211  indentedOstream& fLogOutputStream;
212 
213 
214  // the MSR voice we're visiting
215  // ------------------------------------------------------
216  S_msrVoice fVisitedMsrVoice;
217 
218 
219  // the MSR master voice we're building
220  // ------------------------------------------------------
221  S_msrVoice fMasterVoice;
222 
223 
224  // harmonies
225  // ------------------------------------------------------
226  bool fOnGoingHarmonyVoice;
227 
228  S_msrHarmony fCurrentHarmonyClone;
229 
230  list<S_msrHarmony> fPendingHarmoniesList;
231 
232 
233  // figured bass
234  // ------------------------------------------------------
235  bool fOnGoingFiguredBassVoice;
236  S_msrFiguredBass fCurrentFiguredBassClone;
237 
238 
239  // segments
240  // ------------------------------------------------------
241  // the current segment clone is the one at the top of the stack
242  S_msrSegment fCurrentSegmentClone;
243 
244 
245  // measures
246  // ------------------------------------------------------
247  S_msrMeasure fCurrentMeasureClone;
248 
249  // full measure rests compression
250  S_msrMeasure fCurrentRestMeasure;
251  S_msrRestMeasures fCurrentRestMeasures;
252 
253 
254  // bar checks
255  // ------------------------------------------------------
256  S_msrBarCheck fLastBarCheck;
257 
258 
259  // notes
260  // ------------------------------------------------------
261  bool fOnGoingNote;
262 
263  // fCurrentNonGraceNoteClone is not used for grace notes,
264  // which are visited while the note they're attached to
265  // is being visited too
266  S_msrNote fCurrentNonGraceNoteClone;
267 
268  // to help workaround LilyPond issue 34
269  S_msrNote fFirstNoteCloneInVoice;
270 
271  S_msrGraceNotesGroup fCurrentSkipGraceNotesGroup;
272 
273 
274  // chords
275  // ------------------------------------------------------
276  bool fOnGoingChord;
277  S_msrChord fCurrentChordClone;
278 
279  // tuplets
280  // ------------------------------------------------------
281 // S_msrTuplet fCurrentTupletClone;
282  // bool fOnGoingTuplet;
283  stack<S_msrTuplet> fTupletClonesStack;
284 };
285 
286 
287 }
288 
289 
290 #endif
MusicXML2::SMARTP< msrVoice >
MusicXML2::visitor
Definition: visitor.h:27
MusicXML2::indentedOstream
Definition: utilities.h:213
MusicXML2::msrVoice2MasterVoiceCreator
Definition: msrVoice2MasterVoiceCreator.h:111