GUIDOLib  1.7.7
Guido Engine Internal Documentation
GRMusic.h
1 #ifndef GRMusic_H
2 #define GRMusic_H
3 
4 /*
5  GUIDO Library
6  Copyright (C) 2002 Holger Hoos, Juergen Kilian, Kai Renz
7  Copyright (C) 2004 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 <vector>
19 
20 #include "GREvent.h"
21 #include "GUIDOEngine.h" // for GuidoOnDrawDesc
22 #include "TCollisions.h"
23 #include "GRVisitor.h"
24 
25 class ARMusic;
26 class ARPageFormat;
27 class ARMusicalVoice;
28 
29 class GRVoice;
30 class GRSystem;
31 class GRPage;
32 class GRMusic;
33 class TCollisions;
34 
35 typedef std::vector<GRPage *> PageList;
36 typedef std::vector<GRVoice *> VoiceList;
37 
41 class GRMusic : public GREvent
42 {
43  public:
44  using GObject::GetMap;
45 
46  GRMusic(const ARMusic * inARMusic, const ARPageFormat * inFormat, const GuidoLayoutSettings *settings, bool ownsAR );
47  virtual ~GRMusic();
48 
49  void startNewSystem( GRSystem * grsystem );
50  void setName( const char * in ) { mName = in; }
51  const NVstring & getName();
52 
53  void createGR (const ARPageFormat * inPageFormat = 0 , const GuidoLayoutSettings *settings = 0);
54 
55  const ARMusic * getARMusic() const;
56  const ARMusic * getconstARMusic() const;
57 
58  // - Page related
59  virtual const GRPage * getPage( int inPageNum ) const;
60  virtual GRPage * getPage( int inPageNum );
61  virtual int getPageIndex( const GRPage * inPage ) const;
62  virtual bool getRTPofPage( int inPageNum, int * num, int * denom ) const;
63  virtual int getPageNum( int num, int denom ) const; // must match an existing element
64  virtual int getPageNumForTimePos( int num, int denom ) const;
65 
66  virtual int getNumPages() const;
67  virtual int getNumSystems(int page) const;
68 
69  // - Voice related
70  void MarkVoice(int voicenum,int numfrom,int denomfrom,
71  int numlength,int denomlength, unsigned char red, unsigned char green, unsigned char blue);
72  virtual void rememberVoiceNLinePosition (const ARMusicalVoice * arv, const TYPE_TIMEPOSITION & tp);
73  virtual void setPossibleVoiceNLinePosition (const ARMusicalVoice * arv, const TYPE_TIMEPOSITION & tp);
74 
76  int getNumVoices() const;
77  void setSpringParameter(float npar);
78 
79  GRVoice * getVoice( int num );
80  GRVoice * getVoice( const ARMusicalVoice * arv );
81 
82  void addVoiceElement( int num, GRNotationElement * el );
83  void addVoiceElement( const ARMusicalVoice * arv, GRNotationElement * el );
84 
85  // - Graphic and sizes
86  virtual void updateBoundingBox();
87  void adjustPageSize();
88  virtual float getPageWidth( int inPageNum ) const;
89  virtual float getPageHeight( int inPageNum ) const;
90 
91  virtual void DrawMusic( VGDevice & hdc, const GuidoOnDrawDesc & inDrawInfos );
92  virtual void GetMap( int inPage, float w, float h, GuidoElementSelector sel, MapCollector& f ) const;
93 
94  virtual void print(std::ostream& os) const;
95  virtual void trace(VGDevice & hdc);
96  virtual void pagetrace(VGDevice & hdc);
97  virtual void voicetrace(VGDevice & hdc);
98 
99  int getVoiceNum( ARMusicalVoice * arvoice ) const;
100  void addPage( GRPage * newPage );
101 
102  void setAR2GRTime(long time) { mAR2GRTime = time; }
103  long getAR2GRTime() { return mAR2GRTime; }
104  void setDrawTime(long time) { mDrawTime = time; }
105  long getDrawTime() { return mDrawTime; }
106 
107  float getNotesDensity () const;
108  bool checkLyricsCollisions (); // checks lyrics collisions and resolves the collisions if any
109  bool collides () const { return !fCollisions.list().empty(); }
110  bool lyricsChecked () const { return fLyricsChecked; }
111  void removeAutoSpace (ARMusic * arm);// removes space tags inserted by checkLyricsCollisions()
112 
113  void printVoices (std::ostream& os) const;
114 
115  void setStaffSize(int staffNum, float size);
116  float getStaffSize(int staffNum);
117 
118  std::vector<TCollisionInfo> getCollisions() const { return fCollisions.list(); }
119 
120  virtual void accept (GRVisitor& visitor);
121 
122  protected:
123  void addVoiceElement( GRVoice * voice, GRNotationElement * el );
124 
126  VoiceList mVoiceList;
127 
129  long mDrawTime;
130 
131  private:
132  size_t checkCollisions (bool lyrics);
133  void resolveCollisions (std::vector<TCollisionInfo> list);
134 
135  ARMusicalVoice* getARVoice (int n);
136  std::vector<TCollisionInfo> strip (const std::vector<TCollisionInfo>& list) const;
137 
138  PageList mPages;
139  ARPageFormat * fInFormat;
140  std::map<int,float> fStaffSizes;
141  GuidoLayoutSettings fSettings;
142  TCollisions fCollisions;
143  bool fLyricsChecked; // true when lyrics collisions have been solved
144 };
145 
146 
147 #endif
148 
149 
ARMusicalVoice
The class for GUIDO sequence, list of timepositions of events of a stream.
Definition: ARMusicalVoice.h:76
GRMusic::getStaffSize
float getStaffSize(int staffNum)
GRVisitor
Definition: GRVisitor.h:39
GRMusic::startNewSystem
void startNewSystem(GRSystem *grsystem)
GRMusic::setPossibleVoiceNLinePosition
virtual void setPossibleVoiceNLinePosition(const ARMusicalVoice *arv, const TYPE_TIMEPOSITION &tp)
GRMusic::getVoiceNum
int getVoiceNum(ARMusicalVoice *arvoice) const
GRMusic::setAR2GRTime
void setAR2GRTime(long time)
Definition: GRMusic.h:102
GRMusic::mVoiceList
VoiceList mVoiceList
Definition: GRMusic.h:126
MapCollector
an abstract class to be provided by clients to collect mappings
Definition: GUIDOScoreMap.h:109
GRMusic::checkLyricsCollisions
bool checkLyricsCollisions()
GRMusic::pagetrace
virtual void pagetrace(VGDevice &hdc)
GuidoOnDrawDesc
Contains all graphic-related information required by GuidoOnDraw()
Definition: GUIDOEngine.h:152
GRMusic::setStaffSize
void setStaffSize(int staffNum, float size)
GRMusic::~GRMusic
virtual ~GRMusic()
GRMusic::updateBoundingBox
virtual void updateBoundingBox()
GRPage
Graphical representation of a score page. Contains one or more instances of class GRSystem.
Definition: GRPage.h:40
GRMusic::getPageIndex
virtual int getPageIndex(const GRPage *inPage) const
GRMusic::getNumSystems
virtual int getNumSystems(int page) const
TCollisions
Definition: TCollisions.h:53
GRMusic::getPageNum
virtual int getPageNum(int num, int denom) const
GRMusic::getPageWidth
virtual float getPageWidth(int inPageNum) const
GRMusic::setDrawTime
void setDrawTime(long time)
Definition: GRMusic.h:104
GRMusic::rememberVoiceNLinePosition
virtual void rememberVoiceNLinePosition(const ARMusicalVoice *arv, const TYPE_TIMEPOSITION &tp)
Fraction
Numerator and denominator.
Definition: Fraction.h:23
GRMusic::printVoices
void printVoices(std::ostream &os) const
TCollisions::list
const std::vector< TCollisionInfo > & list() const
Definition: TCollisions.h:65
GRNotationElement
parent class for all notation elements.
Definition: GRNotationElement.h:54
GRMusic
Graphical representation of the music. It handles a list of voices and a list of pages.
Definition: GRMusic.h:41
GRMusic::trace
virtual void trace(VGDevice &hdc)
GREvent
Graphical representation for an event (= has duration).
Definition: GREvent.h:61
GRMusic::adjustPageSize
void adjustPageSize()
GRMusic::voicetrace
virtual void voicetrace(VGDevice &hdc)
GRMusic::getNumPages
virtual int getNumPages() const
GRMusic::addPage
void addPage(GRPage *newPage)
GRMusic::lyricsChecked
bool lyricsChecked() const
Definition: GRMusic.h:110
GRMusic::DrawMusic
virtual void DrawMusic(VGDevice &hdc, const GuidoOnDrawDesc &inDrawInfos)
GRMusic::getPageHeight
virtual float getPageHeight(int inPageNum) const
GRMusic::GRMusic
GRMusic(const ARMusic *inARMusic, const ARPageFormat *inFormat, const GuidoLayoutSettings *settings, bool ownsAR)
GRMusic::getconstARMusic
const ARMusic * getconstARMusic() const
GRMusic::MarkVoice
void MarkVoice(int voicenum, int numfrom, int denomfrom, int numlength, int denomlength, unsigned char red, unsigned char green, unsigned char blue)
GRMusic::addVoiceElement
void addVoiceElement(int num, GRNotationElement *el)
GRMusic::getARMusic
const ARMusic * getARMusic() const
GRMusic::GetMap
virtual void GetMap(int inPage, float w, float h, GuidoElementSelector sel, MapCollector &f) const
GRMusic::removeAutoSpace
void removeAutoSpace(ARMusic *arm)
GRVoice
Graphical representation of a voice.
Definition: GRVoice.h:49
GRMusic::getNotesDensity
float getNotesDensity() const
VGDevice
Generic platform independant drawing device.
Definition: VGDevice.h:68
GRMusic::mAR2GRTime
long mAR2GRTime
Definition: GRMusic.h:128
GRMusic::print
virtual void print(std::ostream &os) const
GRMusic::getPage
virtual const GRPage * getPage(int inPageNum) const
GRMusic::getPageNumForTimePos
virtual int getPageNumForTimePos(int num, int denom) const
GRMusic::collides
bool collides() const
Definition: GRMusic.h:109
GuidoLayoutSettings
Engine settings for the graphic score layout.
Definition: GUIDOEngine.h:255
GRMusic::setName
void setName(const char *in)
Definition: GRMusic.h:50
ARPageFormat
not yet documented
Definition: ARPageFormat.h:52
GRMusic::getDrawTime
long getDrawTime()
Definition: GRMusic.h:105
NVstring
Definition: nvstring.h:21
GRMusic::getCollisions
std::vector< TCollisionInfo > getCollisions() const
Definition: GRMusic.h:118
GRMusic::getRTPofPage
virtual bool getRTPofPage(int inPageNum, int *num, int *denom) const
GuidoElementSelector
GuidoElementSelector
Definition: GUIDOScoreMap.h:40
GRMusic::removeVoiceElement
void removeVoiceElement(ARMusicalVoice *arv, GRNotationElement *el)
GRMusic::mName
NVstring mName
Definition: GRMusic.h:125
GRMusic::getName
const NVstring & getName()
GRMusic::mDrawTime
long mDrawTime
Definition: GRMusic.h:129
GRSystem
Manages a number of staffs and has a given start and end timeposition. GRSystem is the grafical repre...
Definition: GRSystem.h:52
GRMusic::setSpringParameter
void setSpringParameter(float npar)
GRMusic::getVoice
GRVoice * getVoice(int num)
GRMusic::accept
virtual void accept(GRVisitor &visitor)
GRMusic::createGR
void createGR(const ARPageFormat *inPageFormat=0, const GuidoLayoutSettings *settings=0)
GRMusic::getAR2GRTime
long getAR2GRTime()
Definition: GRMusic.h:103
ARMusic
Translation of a GUIDO Segment into a class.
Definition: ARMusic.h:31
GObject::GetMap
virtual void GetMap(GuidoElementSelector sel, MapCollector &f, MapInfos &infos) const
Definition: GObject.h:95
GRMusic::getNumVoices
int getNumVoices() const

Guido Project Copyright © 2019 Grame-CNCM