GUIDOLib  1.7.7
Guido Engine Internal Documentation
ARMusicalVoice.h
1 #ifndef ARMusicalVoice_H
2 #define ARMusicalVoice_H
3 
4 /*
5  GUIDO Library
6  Copyright (C) 2002 Holger Hoos, Juergen Kilian, Kai Renz
7  Copyright (C) 2002-2017 Grame
8 
9  This Source Code Form is subject to the terms of the Mozilla Public
10  License, v. 2.0. If a copy of the MPL was not distributed with this
11  file, You can obtain one at http://mozilla.org/MPL/2.0/.
12 
13  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
14  research@grame.fr
15 
16 */
17 
18 #include <map>
19 #include <vector>
20 
21 #include "ObjectList.h"
22 #include "ARMusicalEvent.h"
23 #include "TagList.h" // is a typedef
24 #include "kf_ilist.h" // for ObjectList
25 
27 class ARPositionTag;
28 class ARVoiceManager;
29 class ARMeter;
30 class ARBeamState;
31 class ARDisplayDuration;
32 class ARBase;
33 class ARTuplet;
34 class ARMusic;
35 class ARMusicalTag;
36 class ARChordTag;
37 class ARShareLocation;
38 class ARShareStem;
39 class ARGrace;
40 class ARNote;
41 class ARClef;
42 class ARKey;
43 class ARCluster;
44 class ARRepeatBegin;
45 
46 class GRVoiceManager;
47 class TimeUnwrap;
48 
51 
58 {
59  public:
60 
61  ARChordGroup() : dur( DURATION_0 ), startpos( 0 ), endpos( 0 ) { }
62 
64  GuidoPos startpos;
65  GuidoPos endpos;
66 };
67 
69 
70 
77 {
78  friend class GRVoiceManager;
79  friend class ARMusic;
80 
81  public:
84  // cau_natural, cau_flat, cau_sharp : cautionary accidentals
85 
87  virtual ~ARMusicalVoice();
88 
89  void MarkVoice(float from,float length, unsigned char red, unsigned char green, unsigned char blue);
90  void MarkVoice(int fromnum,int fromdenom, int lengthnum, int lengthdenom, unsigned char red, unsigned char green, unsigned char blue);
91 
92  virtual void initChordNote();
93  virtual void FinishChord(bool regular = true);
94  virtual ARChordTag *BeginChord();
95 
96  ARNote * setTrillChord(CHORD_TYPE & param_type, CHORD_ACCIDENTAL & param_accidental);
97  void finishTrilledChord();
98  void setClusterChord(ARCluster *inCurrentCluster);
99 
100  int removeTag(ARMusicalObject * obj);
101  void SplitEventAtPos(ARMusicalVoiceState & vst, const TYPE_TIMEPOSITION & tp, int tieormerge);
102  static void DispdurToTupletdur(TYPE_DURATION & dur,const TYPE_DURATION & base);
103  static void TupletdurToDispdur(TYPE_DURATION & dur,const TYPE_DURATION & base);
104  static bool DurationIsDisplayable(TYPE_DURATION & dur,int & b_punkt);
105  static bool DurationFitsBase(const TYPE_DURATION & dur,const TYPE_DURATION & base, TYPE_DURATION & newbase);
106  void ConvertToNormalForm();
107 
108  virtual GuidoPos getLastEventPosition();
109 // virtual void FreezeState(ARMusicalVoiceState * in);
110  virtual void setPositionTagEndPos(int id, ARMusicalTag * tag, ARMusicalTag * start = NULL);
111  virtual void RemovePositionTag( ARPositionTag * ptag);
112  virtual void AddPositionTag(ARPositionTag *);
114  virtual GuidoPos getPositionTagPos (const ARPositionTag *) const;
115 
116  // does Auto-Beaming ...
117  virtual void doAutoStuff1();
118  virtual void doAutoStuff2();
119 
120  virtual void doAutoCluster();
121 
122  // expensive Function!
123  GuidoPos getPosAtTimePosition( const TYPE_TIMEPOSITION & timeposition);
124  // expensive Function!
126 
127  // This adds a Musical-Object to the voice at the current time-position
128  // The musical-object gets a time (relativeTimePosition) and the duration of the voice is adjusted
129  // (+ duration of musical object).
130  GuidoPos AddTail(ARMusicalObject * newMusicalObject);
131 
132  // inserts a musical object at the tail without doing time-setting and other stuff.
133  // is called mainly from CopyChord-function.
134  GuidoPos InsertAtTail(ARMusicalObject * newMusicalObject);
135  // adjust the duration of a voice by adding a rest-event
136  void adjustDuration(const TYPE_DURATION & newDuration);
137 
138  virtual void browse(TimeUnwrap& mapper) const;
139  virtual void browse(TimeUnwrap& mapper, ARMusicalVoiceState& state) const;
140  virtual void browse(TimeUnwrap& mapper, const ARMusicalObject * start, const ARMusicalObject * end=0) const;
141 
142 // virtual void resetGRRepresentation();
143 
144  // functions for the voicestate...
145  virtual GuidoPos GetHeadPosition(ARMusicalVoiceState & vst) const;
146  virtual GuidoPos GetHeadPosition() const;
147  virtual void GetPrevEvent(GuidoPos & pos, ARMusicalVoiceState & vst) const;
148  virtual ARMusicalObject * GetNext(GuidoPos & pos, ARMusicalVoiceState & vst) const;
149  virtual ARMusicalObject * GetNextObject(GuidoPos & pos) const;
150  virtual const ARMusicalVoiceState * getVoiceState() const { return mCurVoiceState; }
151 
152  // for automatic-beaming ...
154 
155  // this enumeration deals with the readmode.
156  // CHORDMODE means that when getting the next (or previous) event, we check whether we are
157  // within a chord and then overread (and save) all other events within the chord.
159 
160  void setVoiceNum(int num) { voicenum = num; }
161  int getVoiceNum() const { return voicenum; }
162  void removeAutoTags();
163  void setReadMode(_readmode newreadmode) { readmode = newreadmode; }
164  _readmode getReadMode() const { return readmode; }
165 
166  // C.D. 22/10/2014 Perf improvement : prevent CheckBreakPosition from searching a RepeatBegin tag in all voice list
167  void addRepeatBegin(ARRepeatBegin *repeatBegin) { repeatBeginList->push_back(repeatBegin); }
168  std::vector<ARRepeatBegin *> * getRepeatBeginList() { return repeatBeginList; }
169 
170  void printName(std::ostream& os) const;
171  void printParameters(std::ostream& os) const;
172 
173  /* Visitor design pattern */
174 // void goThrough(ARVisitor *visitor);
175 // void goThroughTagsList(ARVisitor *visitor, GuidoPos& posTag, GuidoPos prevPos, bool addTag) const;
176 
177  virtual void accept (ARVisitor& visitor);
178 
179  /**************************/
180  protected:
184  GuidoPos posfirstinchord;
186  bool isInChord;
187  int sum;
188  int pitchsum;
189  int voicenum;
190 
191  void doAutoKeys();
192  void checkKeys(); // jfk
193  void doAutoDispatchLyrics();
194  void doAutoFermatas();
195  void doAutoTies();
197  void doAutoDisplayCheck();
198  void doAutoBarlines();
200  void doAutoEndBar();
201  void doAutoBeaming();
202  void doAutoGlissando();
203  void doAutoFeatheredBeam();
204  void doAutoFixOctavaStaff();
205 
206  void doMicroTonal();
207  void getOctava(int voice, std::map< int, std::vector<AROctava*> >& list);
208 
209  void CloseBase ( ARBase * curbase, ARTuplet * autotuplet, GuidoPos lastevpos, GuidoPos FLA);
210  void ReplacePositionTag ( const ARPositionTag * ptold, ARPositionTag * ptnew, ARMusicalVoiceState & vst, const char * endtagname = 0 );
211  const ARDisplayDuration* InsertDisplayDurationTag (const TYPE_DURATION & dispdur, int b_punkt, const TYPE_TIMEPOSITION & tp,
212  GuidoPos pos, ARMusicalVoiceState & vst, int setptagpos = 1);
213 
214  GuidoPos lastevposition;
216  ARMusicalVoiceState * endState; // the musicalvoice state at the very end.
217 
218  // automatic beaming.
219  int beamLookAhead(GuidoPos & pos, TYPE_DURATION & unit);
221 
223 
226 
227  private:
228  void finishChordWithOneChordGroup (TYPE_DURATION &chorddur, bool regular);
229  void finishChordWithSeveralChordGroups(TYPE_DURATION &chorddur, bool regular);
230 
231  GuidoPos CopyChord( ARMusicalVoiceState & vst, TYPE_TIMEPOSITION tp, const TYPE_DURATION & newdur);
232  ARClef* newAutoClef(ARClef* oldclef, const TYPE_TIMEPOSITION& tp);
233  ARKey * newAutoKey(ARKey * oldkey, const TYPE_TIMEPOSITION& tp);
234 
235  // the methods below are all used by the doAutoBeaming method
236  TYPE_DURATION beamBeatUnit(const TYPE_DURATION curmeter) const;
237  TYPE_DURATION beamGetBeat(const ARMeter * curmeter, const TYPE_TIMEPOSITION& pos, TYPE_DURATION curbeat) const;
238  int beamTrackBeam(const ARMusicalVoiceState& vs) const;
239  bool beamStartPos(const TYPE_TIMEPOSITION pos, const TYPE_DURATION beat) const;
240  bool beamStartEv(const ARMusicalEvent* ev, const ARMusicalVoiceState& vs, const TYPE_DURATION beat, const TYPE_TIMEPOSITION lastbartp) const;
241  void beamCreate(ARMusicalVoiceState& vst, const GuidoPos posev1, const GuidoPos posevn, const GuidoPos FLA, const GuidoPos LRA_plus, const TYPE_TIMEPOSITION tpev1, bool full);
242  bool beamOnBeat(const TYPE_TIMEPOSITION t, const TYPE_DURATION meter, const std::vector<Fraction>& numvec) const;
243  bool beamCrossBeat(const TYPE_TIMEPOSITION beamstart, const TYPE_DURATION beamdur, const TYPE_DURATION meter, const std::vector<Fraction>& numvec) const;
244  ARMusicalEvent* beamNextEv (const GuidoPos pos, const ARMusicalVoiceState) const;
245  ARShareStem * createSharedStem(ARChordGroup* group);
246 
247  // reorder tags before a possible break to put them after the break:
248  // tags handled are: octava
249  void checkpbreak();
250 
251 
252  std::vector<ARRepeatBegin *> *repeatBeginList;
253  std::vector<ARNote *> getCurrentChordNotes () const;
254 };
255 
256 #endif
257 
258 
ARMusicalVoice
The class for GUIDO sequence, list of timepositions of events of a stream.
Definition: ARMusicalVoice.h:76
ARMusicalVoice::addRepeatBegin
void addRepeatBegin(ARRepeatBegin *repeatBegin)
Definition: ARMusicalVoice.h:167
ARMusicalVoice::setVoiceNum
void setVoiceNum(int num)
Definition: ARMusicalVoice.h:160
ARMusicalVoice::BEAMSEXPLICIT
Definition: ARMusicalVoice.h:153
ARMusicalVoice::DurationIsDisplayable
static bool DurationIsDisplayable(TYPE_DURATION &dur, int &b_punkt)
ARShareStem
not yet documented
Definition: ARShareStem.h:23
ARMusicalVoice::NONE
Definition: ARMusicalVoice.h:83
ARMusicalVoice::doAutoKeys
void doAutoKeys()
ARVisitor
Definition: ARVisitor.h:22
ARMusicalVoice::doAutoDispatchLyrics
void doAutoDispatchLyrics()
ARShareLocation
not yet documented
Definition: ARShareLocation.h:23
ARMusicalVoice::NATURAL
Definition: ARMusicalVoice.h:83
ARMusicalVoice::mCurVoiceState
ARMusicalVoiceState * mCurVoiceState
Definition: ARMusicalVoice.h:215
ARMusicalVoice::browse
virtual void browse(TimeUnwrap &mapper) const
ARMusicalVoice::CHORDERROR
Definition: ARMusicalVoice.h:82
ARMusicalVoice::getPositionTagPos
virtual GuidoPos getPositionTagPos(const ARPositionTag *) const
ARMusicalVoice::CHORDMODE
Definition: ARMusicalVoice.h:158
ARMusicalVoice::AddTail
GuidoPos AddTail(ARMusicalObject *newMusicalObject)
ARMusicalVoice::DispdurToTupletdur
static void DispdurToTupletdur(TYPE_DURATION &dur, const TYPE_DURATION &base)
ARMusicalVoice::UP_SIMPLE
Definition: ARMusicalVoice.h:82
ARBeamState
not yet documented
Definition: ARBeamState.h:50
ARMusicalVoice::DOWN
Definition: ARMusicalVoice.h:82
ARMeter
not yet documented
Definition: ARMeter.h:64
ARMusicalVoice::currentChord
ARChordTag * currentChord
Definition: ARMusicalVoice.h:181
ARMusicalVoice::currentShareLocation
ARShareLocation * currentShareLocation
Definition: ARMusicalVoice.h:182
ARMusicalVoice::removeAutoTags
void removeAutoTags()
ARMusicalVoice::doAutoEndBar
void doAutoEndBar()
ARMusicalEvent
Class for musical events (events have an own duration tags not)
Definition: ARMusicalEvent.h:26
ARMusicalVoice::InsertDisplayDurationTag
const ARDisplayDuration * InsertDisplayDurationTag(const TYPE_DURATION &dispdur, int b_punkt, const TYPE_TIMEPOSITION &tp, GuidoPos pos, ARMusicalVoiceState &vst, int setptagpos=1)
ARMusicalVoice::DOWN_SIMPLE
Definition: ARMusicalVoice.h:82
Fraction
Numerator and denominator.
Definition: Fraction.h:23
ARMusicalVoice::beamstate
bmstate beamstate
Definition: ARMusicalVoice.h:220
ARMusicalVoice::doAutoStuff2
virtual void doAutoStuff2()
ARMusicalVoice::getARMusicalObjectsAtTimePosition
ObjectList * getARMusicalObjectsAtTimePosition(const TYPE_TIMEPOSITION &timeposition)
ARMusicalVoice::setTrillChord
ARNote * setTrillChord(CHORD_TYPE &param_type, CHORD_ACCIDENTAL &param_accidental)
ARMusicalVoice::printParameters
void printParameters(std::ostream &os) const
ARMusicalVoice::ReplacePositionTag
void ReplacePositionTag(const ARPositionTag *ptold, ARPositionTag *ptnew, ARMusicalVoiceState &vst, const char *endtagname=0)
ARMusicalVoice::BeginChord
virtual ARChordTag * BeginChord()
ARKey
Key signature.
Definition: ARKey.h:54
ARMusicalVoice::BEAMSOFF
Definition: ARMusicalVoice.h:153
ARMusicalVoice::setClusterChord
void setClusterChord(ARCluster *inCurrentCluster)
ARGrace
not yet documented
Definition: ARGrace.h:40
ARMusicalVoice::isInChord
bool isInChord
Definition: ARMusicalVoice.h:186
ARMusicalVoice::SHARP
Definition: ARMusicalVoice.h:83
ARMusicalVoice::ConvertToNormalForm
void ConvertToNormalForm()
ARMusicalVoice::bmstate
bmstate
Definition: ARMusicalVoice.h:153
ARMusicalVoice::DOWN_COMPLEX
Definition: ARMusicalVoice.h:82
ARMusicalVoice::AddPositionTag
virtual void AddPositionTag(ARPositionTag *)
ARMusicalVoice::FLAT
Definition: ARMusicalVoice.h:83
ARMusicalVoice::UP
Definition: ARMusicalVoice.h:82
ARMusicalVoice::doAutoGlissando
void doAutoGlissando()
ARMusicalVoice::adjustDuration
void adjustDuration(const TYPE_DURATION &newDuration)
ARMusicalVoice::GetPrevEvent
virtual void GetPrevEvent(GuidoPos &pos, ARMusicalVoiceState &vst) const
ARMusicalVoice::accept
virtual void accept(ARVisitor &visitor)
ARMusicalVoice::~ARMusicalVoice
virtual ~ARMusicalVoice()
ARTuplet
Abstract representation of a tuplet.
Definition: ARTuplet.h:61
ARMusicalVoice::doAutoCheckStaffStateTags
void doAutoCheckStaffStateTags()
ARMusicalVoice::CHORD_ACCIDENTAL
CHORD_ACCIDENTAL
Definition: ARMusicalVoice.h:83
GRVoiceManager
not yet documented
Definition: GRVoiceManager.h:60
ARMusicalVoice::lastevposition
GuidoPos lastevposition
Definition: ARMusicalVoice.h:214
ARMusicalVoice::mStartPosTagList
StartPositionTagList * mStartPosTagList
Definition: ARMusicalVoice.h:225
ARMusicalVoice::posfirstinchord
GuidoPos posfirstinchord
Definition: ARMusicalVoice.h:184
ARMusicalVoice::GetNextObject
virtual ARMusicalObject * GetNextObject(GuidoPos &pos) const
ARMusicalVoice::beamLookAhead
int beamLookAhead(GuidoPos &pos, TYPE_DURATION &unit)
ARMusicalVoice::CloseBase
void CloseBase(ARBase *curbase, ARTuplet *autotuplet, GuidoPos lastevpos, GuidoPos FLA)
ARMusicalVoice::createPositionTagList
virtual PositionTagList * createPositionTagList()
ARRepeatBegin
The right facing repeat sign.
Definition: ARRepeatBegin.h:38
ARMusicalVoice::doAutoBeaming
void doAutoBeaming()
ARChordGroup::endpos
GuidoPos endpos
Definition: ARMusicalVoice.h:65
ARMusicalVoice::ARMusicalVoice
ARMusicalVoice()
ARMusicalVoice::DurationFitsBase
static bool DurationFitsBase(const TYPE_DURATION &dur, const TYPE_DURATION &base, TYPE_DURATION &newbase)
ARMusicalVoice::checkKeys
void checkKeys()
ARMusicalVoice::CHORD_TYPE
CHORD_TYPE
Definition: ARMusicalVoice.h:82
ARChordGroup::ARChordGroup
ARChordGroup()
Definition: ARMusicalVoice.h:61
ARChordTag
not yet documented
Definition: ARChordTag.h:26
ARChordGroup::startpos
GuidoPos startpos
Definition: ARMusicalVoice.h:64
KF_IPointerList
Definition: ARMusicalVoiceState.h:33
ARMusicalVoice::readmode
_readmode readmode
Definition: ARMusicalVoice.h:222
ARMusicalVoice::UP_COMPLEX
Definition: ARMusicalVoice.h:82
ARMusicalVoice::removeTag
int removeTag(ARMusicalObject *obj)
ARMusicalVoice::_readmode
_readmode
Definition: ARMusicalVoice.h:158
ARChordGroup
The class ARChordGroup is used to find groups within chords that share a stem and also a display-dura...
Definition: ARMusicalVoice.h:57
ARMusicalVoice::doMicroTonal
void doMicroTonal()
ARMusicalVoice::doAutoFeatheredBeam
void doAutoFeatheredBeam()
ARMusicalVoice::pitchsum
int pitchsum
Definition: ARMusicalVoice.h:188
ARBase
not yet documented
Definition: ARBase.h:24
ARMusicalVoice::TupletdurToDispdur
static void TupletdurToDispdur(TYPE_DURATION &dur, const TYPE_DURATION &base)
ARMusicalVoice::SplitEventAtPos
void SplitEventAtPos(ARMusicalVoiceState &vst, const TYPE_TIMEPOSITION &tp, int tieormerge)
ARMusicalVoice::doAutoFixOctavaStaff
void doAutoFixOctavaStaff()
ARMusicalVoice::endState
ARMusicalVoiceState * endState
Definition: ARMusicalVoice.h:216
ARMusicalVoice::doAutoCluster
virtual void doAutoCluster()
ARMusicalVoice::MarkVoice
void MarkVoice(float from, float length, unsigned char red, unsigned char green, unsigned char blue)
ARMusicalVoice::doAutoStuff1
virtual void doAutoStuff1()
ARMusicalVoice::InsertAtTail
GuidoPos InsertAtTail(ARMusicalObject *newMusicalObject)
ARMusicalVoice::doAutoMeasuresNumbering
void doAutoMeasuresNumbering()
ARMusicalVoice::numchordvoice
int numchordvoice
Definition: ARMusicalVoice.h:185
ARMusicalVoice::getVoiceNum
int getVoiceNum() const
Definition: ARMusicalVoice.h:161
ARMusicalVoice::chordgrouplist
ChordGroupList * chordgrouplist
Definition: ARMusicalVoice.h:183
ARMusicalVoice::getRepeatBeginList
std::vector< ARRepeatBegin * > * getRepeatBeginList()
Definition: ARMusicalVoice.h:168
ARMusicalVoice::mPosTagList
PositionTagList * mPosTagList
Definition: ARMusicalVoice.h:224
ARMusicalVoice::getReadMode
_readmode getReadMode() const
Definition: ARMusicalVoice.h:164
ARMusicalTag
The base class for all musical tag classes.
Definition: ARMusicalTag.h:34
ARMusicalVoiceState
This class manage the state of a voice. Here additional information for voices will be stored (i....
Definition: ARMusicalVoiceState.h:39
ARMusicalVoice::GetHeadPosition
virtual GuidoPos GetHeadPosition() const
ARMusicalVoice::getLastEventPosition
virtual GuidoPos getLastEventPosition()
ARClef
Abstract representation of a staff clef.
Definition: ARClef.h:60
ARNote
Representation of a GUIDO note.
Definition: ARNote.h:30
ARPositionTag
The base class for all range tags.
Definition: ARPositionTag.h:26
ARMusicalVoice::sum
int sum
Definition: ARMusicalVoice.h:187
ARMusicalVoice::printName
void printName(std::ostream &os) const
ARMusicalVoice::getVoiceState
virtual const ARMusicalVoiceState * getVoiceState() const
Definition: ARMusicalVoice.h:150
ARMusicalVoice::FinishChord
virtual void FinishChord(bool regular=true)
ARCluster
not yet documented
Definition: ARCluster.h:47
ARMusicalVoice::finishTrilledChord
void finishTrilledChord()
ARMusicalVoice::voicenum
int voicenum
Definition: ARMusicalVoice.h:189
ARMusicalVoice::BEAMSAUTO
Definition: ARMusicalVoice.h:153
ARMusicalVoice::doAutoTies
void doAutoTies()
ARMusicalObject
The base class for all AR objects. It contains all musical information : duration and time position.
Definition: ARMusicalObject.h:33
ARMusicalVoice::GetNext
virtual ARMusicalObject * GetNext(GuidoPos &pos, ARMusicalVoiceState &vst) const
ARVoiceManager
This class is used to handle preliminary break-detection.
Definition: ARVoiceManager.h:30
ARMusicalVoice::getOctava
void getOctava(int voice, std::map< int, std::vector< AROctava * > > &list)
ARMusicalVoice::setReadMode
void setReadMode(_readmode newreadmode)
Definition: ARMusicalVoice.h:163
ARMusicalVoice::getPosAtTimePosition
GuidoPos getPosAtTimePosition(const TYPE_TIMEPOSITION &timeposition)
ARMusicalVoice::EVENTMODE
Definition: ARMusicalVoice.h:158
ARMusicalVoice::CAU_FLAT
Definition: ARMusicalVoice.h:83
ARMusicalVoice::doAutoFermatas
void doAutoFermatas()
ARMusicalVoice::setPositionTagEndPos
virtual void setPositionTagEndPos(int id, ARMusicalTag *tag, ARMusicalTag *start=NULL)
ARChordGroup::dur
TYPE_DURATION dur
Definition: ARMusicalVoice.h:63
ARMusicalVoice::RemovePositionTag
virtual void RemovePositionTag(ARPositionTag *ptag)
ARDisplayDuration
not yet documented
Definition: ARDisplayDuration.h:47
ARMusicalVoice::CAU_NATURAL
Definition: ARMusicalVoice.h:83
ARMusicalVoice::doAutoDisplayCheck
void doAutoDisplayCheck()
TimeUnwrap
Definition: TimeUnwrap.h:29
ARMusicalVoice::doAutoBarlines
void doAutoBarlines()
ARMusicalVoice::BEAMSFULL
Definition: ARMusicalVoice.h:153
ARMusicalVoice::CAU_SHARP
Definition: ARMusicalVoice.h:83
ARMusic
Translation of a GUIDO Segment into a class.
Definition: ARMusic.h:31
ARMusicalVoice::initChordNote
virtual void initChordNote()

Guido Project Copyright © 2019 Grame-CNCM