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
22namespace 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
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
Definition: utilities.h:213
Definition: msrVoice2MasterVoiceCreator.h:111
Definition: visitor.h:27