-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathARFactory.h
More file actions
188 lines (147 loc) · 4.87 KB
/
ARFactory.h
File metadata and controls
188 lines (147 loc) · 4.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#ifndef ARFactory_H
#define ARFactory_H
/*
GUIDO Library
Copyright (C) 2002 Holger Hoos, Juergen Kilian, Kai Renz
Copyright (C) 2003-2017 Grame
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
research@grame.fr
*/
#include <stack>
#include "kf_ilist.h" // required
#include "ARDefine.h"
#include "ARMusicalTag.h"
#include "ARMusicalVoice.h"
#include "ARAuto.h"
class ARAlter;
class ARChordTag;
class ARCluster;
class ARCrescendo;
class ARCue;
class ARDiminuendo;
class ARDotFormat;
class ARGlissando;
class ARGrace;
class ARKey;
class ARMeter;
class ARMusic;
class ARMusicalEvent;
class ARMusicalObject;
class ARMusicalVoice;
class ARNote;
class ARNoteFormat;
class AROctava;
class ARRepeatBegin;
class ARRestFormat;
class ARStaff;
class ARTHead;
class ARTremolo;
class ARTrill;
class ARTStem;
class ARTuplet;
typedef KF_IPointerList<ARMusicalTag> TagPointerList; // todo: replace by stl container (easy)
/** \brief Class used in order to build the abstract representation (AR) structure
of music.
*/
class ARFactory
{
public:
ARFactory();
virtual ~ARFactory();
virtual void createMusic();
virtual ARMusic * getMusic();
virtual void createVoice();
virtual void addVoice();
virtual void createChord();
virtual void addChord();
virtual void initChordNote();
virtual void createEvent( const char * name );
virtual void createTab( int string, const char * disp );
virtual void addEvent();
virtual void addSharp();
virtual void addFlat();
virtual void setPoints( int pointCount );
virtual void setAccidentals( TYPE_ACCIDENTALS accidentals );
virtual void setRegister(TYPE_REGISTER newRegister);
virtual void setNumerator(int newNumerator);
virtual void setDenominator(int newDenominator);
virtual void createTag( TYPE_TAG_NAME_CONST name, int no = -1) ;
// manages the tag-range. will be called if the tag has a range
virtual void tagRange();
// for the closing bracket ")"
// the last tag will be popped from the stack and added
// to the current voice
virtual void endTag();
virtual void addTag();
virtual void addTagParameter( TagParameter * parameter );
virtual void addTagParameter( const char * parameter );
virtual void addTagParameter( TYPE_TAGPARAMETER_INT parameter );
virtual void addTagParameter( TYPE_TAGPARAMETER_REAL parameter );
virtual float UndoTransform( const float val );
virtual void setParameterName( const char * name );
virtual void setUnit( const char * s );
virtual void setFilePath(const char* inFilePath) { mFilePath = inFilePath; }
private:
enum { kNoBeam = -99999999 };
ARMusicalVoice * mCurrentVoice = NULL;
ARMusic * mCurrentMusic = NULL;
ARMusicalEvent * mCurrentEvent = NULL;
ARRepeatBegin * mCurrentRepeatBegin = NULL;
ARMusicalEvent * mLastEvent = NULL;
TagPointerList mTags; // todo: replace by stl container
TagParametersList mTagParameters;
TagParameter* mLastTagParameter = 0;
int mCurrentRegister; // (octave)
int mCurrentNumerator;
int mCurrentDenominator;
int mCurrentIntensity;
int mCurrentBeamID;
void checkTagEnd ( ARMusicalTag* tag);
void checkRange ( const ARMusicalTag* tag, const std::string& ) const;
void endTremolo ( ARMusicalTag * tag );
void endCue ( ARMusicalTag * tag );
template <typename T> T* endStateTag (T * tag ) {
T * tmp = dynamic_cast<T *>(tag->getEndTag());
mCurrentVoice->AddTail(tmp);
return tmp;
}
static long sMaxTagId;
protected:
ARMusicalVoice * mSaveCurrentVoice = NULL;
ARCluster * mCurrentCluster = NULL;
ARTremolo * mCurrentTremolo = NULL;
ARTrill * mCurrentTrill = NULL;
const AROctava * mCurrentOctava = NULL;
const ARGrace * mCurrentGrace = NULL;
const ARCue * mCurrentCue = NULL;
const ARTStem * mCurrentStem = NULL;
const ARTHead * mCurrentHead = NULL;
const ARNoteFormat* mCurrentNoteFormat = NULL;
std::stack<const ARNoteFormat*> fNoteFormats;
const ARRestFormat* mCurrentRestFormat = NULL;
const ARDotFormat * mCurrentDotFormat = NULL;
const ARAlter * mCurrentAlter = NULL;
const ARStaff * mCurrentStaff = NULL;
const ARChordTag * mCurrentChordTag = NULL;
const ARTuplet * mCurrentTuplet = NULL;
const ARKey * mCurrentKey = NULL;
const ARMeter * mCurrentMeter = NULL;
int mVoiceNum;
int mCurrentTags;
bool mTagRanged;
bool mVoiceAdded;
bool mAutoLyricsPos;
bool mAutoInstrPos;
bool mAutoIntensPos;
bool mAutoHideTiedAccidentals;
ARAuto::position mFingeringPos;
ARAuto::position mHarmonyPos;
float mFingeringSize;
private:
int mChordNotesCount;
NVstring mFilePath;
};
#endif