GUIDOLib  1.7.7
Guido Engine Internal Documentation
PianoRoll.h
1 /*
2  GUIDO Library
3  Copyright (C) 2015 Grame
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 
14 #ifndef __GuidoPianoRoll__
15 #define __GuidoPianoRoll__
16 
17 #include <stack>
18 #include <map>
19 
20 #include "ARMusicalVoice.h"
21 #include "ARNoteFormat.h"
22 #include "ARMusic.h"
23 #include "VGColor.h"
24 #include "math.h"
25 #include "PianoRoll.h"
26 #include "GUIDOScoreMap.h"
27 
28 #ifdef MIDIEXPORT
29 #include "MidiShareLight.h"
30 #endif
31 
32 #include "GUIDOEngine.h"
33 
34 #define kDefaultWidth 1024 // the default canvas width
35 #define kDefaultHeight 512 // the default canvas height
36 #define kDefaultLowPitch -1 // the default min pitch
37 #define kDefaultHighPitch -1 // the default max pitch
38 #define kDefaultStartDateNum 0 // the default start date num
39 #define kDefaultStartDateDenom 1 // the default start date num
40 #define kDefaultEndDateNum 0 // the default start date num
41 #define kDefaultEndDateDenom 0 // the default start date num
42 
43 /* \brief a class to create and configure a piano roll
44 */
45 class PianoRoll {
46  void initAutoVoiceColors ();
47 
48 public:
49  PianoRoll(ARMusic *arMusic);
50  PianoRoll(const char *midiFileName);
51  virtual ~PianoRoll() {}
52 
53  virtual void setLimitDates(GuidoDate start, GuidoDate end);
54  virtual void setPitchRange(int minPitch, int maxPitch);
55  virtual void enableKeyboard(bool enabled) { fKeyboardEnabled = enabled; }
56  float getKeyboardWidth(int height) const;
57  virtual void enableRandomVoicesColor(bool enabled) { fVoicesAutoColored = enabled; }
58  virtual void setColorToVoice(int voiceNum, int r, int g, int b, int a);
59  virtual bool removeColorToVoice(int voiceNum);
60  virtual void enableMeasureBars(bool enabled) { fMeasureBarsEnabled = enabled; }
61  virtual void setPitchLinesDisplayMode(int mode);
62  virtual void getMap(int w, int h, Time2GraphicMap &outmap) const;
63 
64  virtual void onDraw(int width, int height, VGDevice *dev);
65 
66 protected:
67  struct DrawParams {
68  DrawParams(int inWidth, int inHeight, float inNoteHeight, float inUntimedLeftElementWidth, VGDevice *inDev) {
69  width = inWidth;
70  height = inHeight;
71  noteHeight = inNoteHeight;
72  untimedLeftElementWidth = inUntimedLeftElementWidth;
73  dev = inDev;
74  colorHue = 0.5;
75  }
76 
77  int width;
78  int height;
79  float noteHeight;
81  double colorHue;
83  };
84 
85  void init();
86 
87  DrawParams createDrawParamsStructure(int width, int height, VGDevice *dev) const;
88 
89  virtual void DrawFromAR(const DrawParams& drawParams);
90 
91  float computeKeyboardWidth(float noteHeight) const;
92  virtual float computeNoteHeight (int height) const;
93  virtual void initRendering (DrawParams &drawParams) const;
94  virtual void endRendering (DrawParams &drawParams) const;
95 
96  virtual void DrawGrid (DrawParams &drawParams) const;
97  void DrawOctavesGrid (DrawParams &drawParams) const;
98  void DrawTwoLinesGrid (DrawParams &drawParams) const;
99  void DrawDiatonicGrid (DrawParams &drawParams) const;
100  void DrawChromaticGrid (DrawParams &drawParams, bool isUserDefined = false) const;
101 
102  virtual void DrawKeyboard (DrawParams &drawParams) const;
103  virtual void DrawVoice (ARMusicalVoice* v, const DrawParams& drawParams);
104  virtual void DrawMusicalObject (ARMusicalObject *e, TYPE_TIMEPOSITION date, TYPE_DURATION dur, const DrawParams& drawParams);
105  virtual void DrawNote (int pitch, double date, double dur, const DrawParams& drawParams) const;
106  virtual void DrawRect (float x, float y, double dur, const DrawParams& drawParams) const;
107  virtual void DrawMeasureBar (double date, const DrawParams& drawParams) const;
108 
109  virtual float pitch2ypos (int midipitch, const DrawParams& drawParams) const;
110  virtual void handleColor (const ARNoteFormat *e, const DrawParams& drawParams);
111  virtual void setColor (VGDevice* dev, const VGColor& color);
112  virtual void popColor (VGDevice* dev);
113 
114  int detectARExtremePitch (bool detectLowerPitch);
115  void autoAdjustPitchRange (int &lowerPitch, int &higherPitch); // in the case of pitch range lower than 12
116 
117 #ifdef MIDIEXPORT
118  virtual void DrawFromMidi (const DrawParams& drawParams);
119  virtual void DrawMidiSeq (MidiSeqPtr seq, int tpqn, const DrawParams& drawParams) const;
121  int detectMidiExtremePitch(bool detectLowerPitch);
122 #else
124  int detectMidiExtremePitch(bool) { return 0; }
125 #endif
126 
127  virtual float date2xpos (double pos, int width, float untimedLeftElementWidth) const;
128  virtual float duration2width (double dur, int width, float untimedLeftElementWidth) const;
129  virtual int pitchRange () const { return fHighPitch - fLowPitch + 1; }
130  virtual float stepheight (int height) const { return (float) height / (float) pitchRange(); }
131  bool getVoiceColor (unsigned int index, VGColor& color) const;
132 
133 
134  float roundFloat(float numberToRound) const { return floor(numberToRound + 0.5f); }
135 
137  const char *fMidiFileName;
138 
139  TYPE_TIMEPOSITION fStartDate; // the score start date
140  TYPE_TIMEPOSITION fEndDate; // the score end date
141  double fDuration; // the time zone duration
142 
143  int fLowPitch; // the lower score pitch
144  int fHighPitch; // the higher score pitch
145 
146  bool fVoicesAutoColored; // does the user wants voices to be auto colored ?
147 
148  std::map<int, VGColor> fVoicesColors; // voices colors that the user set himself
149  std::vector<VGColor> fAutoVoicesColors; // auto voices colors
150 
151  int fNoteColor; // a flag to count the number of colors set by noteFormat tags
152 
153  bool fChord; // a flag to indicate that next note (or rest) is in a chord
154  TYPE_DURATION fChordDuration; // the chord duration (notes in a chord have a null duration)
155 
156  bool fKeyboardEnabled; // does the keyboard will be displayed ?
159  bool fBytes[12];
160 };
161 
162 #endif
PianoRoll::fEndDate
TYPE_TIMEPOSITION fEndDate
Definition: PianoRoll.h:140
ARMusicalVoice
The class for GUIDO sequence, list of timepositions of events of a stream.
Definition: ARMusicalVoice.h:76
PianoRoll::DrawOctavesGrid
void DrawOctavesGrid(DrawParams &drawParams) const
PianoRoll::onDraw
virtual void onDraw(int width, int height, VGDevice *dev)
PianoRoll::fNoteColor
int fNoteColor
Definition: PianoRoll.h:151
PianoRoll::autoAdjustPitchRange
void autoAdjustPitchRange(int &lowerPitch, int &higherPitch)
PianoRoll::fVoicesAutoColored
bool fVoicesAutoColored
Definition: PianoRoll.h:146
PianoRoll::DrawNote
virtual void DrawNote(int pitch, double date, double dur, const DrawParams &drawParams) const
PianoRoll::PianoRoll
PianoRoll(ARMusic *arMusic)
PianoRoll::fARMusic
ARMusic * fARMusic
Definition: PianoRoll.h:136
PianoRoll::fChordDuration
TYPE_DURATION fChordDuration
Definition: PianoRoll.h:154
PianoRoll::date2xpos
virtual float date2xpos(double pos, int width, float untimedLeftElementWidth) const
PianoRoll::DrawParams::height
int height
Definition: PianoRoll.h:78
PianoRoll::DrawRect
virtual void DrawRect(float x, float y, double dur, const DrawParams &drawParams) const
PianoRoll::getKeyboardWidth
float getKeyboardWidth(int height) const
PianoRoll::DrawParams::width
int width
Definition: PianoRoll.h:77
Fraction
Numerator and denominator.
Definition: Fraction.h:23
PianoRoll::enableKeyboard
virtual void enableKeyboard(bool enabled)
Definition: PianoRoll.h:55
PianoRoll::DrawParams::colorHue
double colorHue
Definition: PianoRoll.h:81
PianoRoll::setColor
virtual void setColor(VGDevice *dev, const VGColor &color)
PianoRoll::fChord
bool fChord
Definition: PianoRoll.h:153
PianoRoll::fLowPitch
int fLowPitch
Definition: PianoRoll.h:143
PianoRoll::createDrawParamsStructure
DrawParams createDrawParamsStructure(int width, int height, VGDevice *dev) const
PianoRoll::pitch2ypos
virtual float pitch2ypos(int midipitch, const DrawParams &drawParams) const
PianoRoll::fDuration
double fDuration
Definition: PianoRoll.h:141
PianoRoll::fBytes
bool fBytes[12]
Definition: PianoRoll.h:159
PianoRoll::DrawParams::DrawParams
DrawParams(int inWidth, int inHeight, float inNoteHeight, float inUntimedLeftElementWidth, VGDevice *inDev)
Definition: PianoRoll.h:68
PianoRoll::stepheight
virtual float stepheight(int height) const
Definition: PianoRoll.h:130
PianoRoll::DrawParams::dev
VGDevice * dev
Definition: PianoRoll.h:82
PianoRoll::handleColor
virtual void handleColor(const ARNoteFormat *e, const DrawParams &drawParams)
PianoRoll::setPitchRange
virtual void setPitchRange(int minPitch, int maxPitch)
PianoRoll::setColorToVoice
virtual void setColorToVoice(int voiceNum, int r, int g, int b, int a)
PianoRoll::DrawMeasureBar
virtual void DrawMeasureBar(double date, const DrawParams &drawParams) const
PianoRoll::DrawParams::noteHeight
float noteHeight
Definition: PianoRoll.h:79
PianoRoll::getVoiceColor
bool getVoiceColor(unsigned int index, VGColor &color) const
PianoRoll::enableRandomVoicesColor
virtual void enableRandomVoicesColor(bool enabled)
Definition: PianoRoll.h:57
PianoRoll::DrawMusicalObject
virtual void DrawMusicalObject(ARMusicalObject *e, TYPE_TIMEPOSITION date, TYPE_DURATION dur, const DrawParams &drawParams)
PianoRoll::DrawParams
Definition: PianoRoll.h:67
Time2GraphicMap
std::vector< TMapSegments > Time2GraphicMap
Definition: GUIDOScoreMap.h:89
PianoRoll::DrawVoice
virtual void DrawVoice(ARMusicalVoice *v, const DrawParams &drawParams)
ARNoteFormat
not yet documented
Definition: ARNoteFormat.h:51
PianoRoll::fStartDate
TYPE_TIMEPOSITION fStartDate
Definition: PianoRoll.h:139
GuidoDate
Representation of a date as a rational value.
Definition: GUIDOEngine.h:83
PianoRoll::enableMeasureBars
virtual void enableMeasureBars(bool enabled)
Definition: PianoRoll.h:60
VGDevice
Generic platform independant drawing device.
Definition: VGDevice.h:68
VGColor
Generic class to manipulate device independant colors.
Definition: VGColor.h:34
PianoRoll::DrawParams::untimedLeftElementWidth
float untimedLeftElementWidth
Definition: PianoRoll.h:80
PianoRoll::fMidiFileName
const char * fMidiFileName
Definition: PianoRoll.h:137
PianoRoll::fHighPitch
int fHighPitch
Definition: PianoRoll.h:144
PianoRoll::init
void init()
PianoRoll::initRendering
virtual void initRendering(DrawParams &drawParams) const
PianoRoll::getMidiEndDate
TYPE_TIMEPOSITION getMidiEndDate() const
Definition: PianoRoll.h:123
PianoRoll::getMap
virtual void getMap(int w, int h, Time2GraphicMap &outmap) const
PianoRoll::computeKeyboardWidth
float computeKeyboardWidth(float noteHeight) const
PianoRoll::DrawTwoLinesGrid
void DrawTwoLinesGrid(DrawParams &drawParams) const
PianoRoll::detectARExtremePitch
int detectARExtremePitch(bool detectLowerPitch)
PianoRoll::duration2width
virtual float duration2width(double dur, int width, float untimedLeftElementWidth) const
PianoRoll::detectMidiExtremePitch
int detectMidiExtremePitch(bool)
Definition: PianoRoll.h:124
PianoRoll::DrawGrid
virtual void DrawGrid(DrawParams &drawParams) const
PianoRoll::~PianoRoll
virtual ~PianoRoll()
Definition: PianoRoll.h:51
PianoRoll::fAutoVoicesColors
std::vector< VGColor > fAutoVoicesColors
Definition: PianoRoll.h:149
PianoRoll::DrawDiatonicGrid
void DrawDiatonicGrid(DrawParams &drawParams) const
PianoRoll
Definition: PianoRoll.h:45
PianoRoll::fPitchLinesDisplayMode
int fPitchLinesDisplayMode
Definition: PianoRoll.h:158
ARMusicalObject
The base class for all AR objects. It contains all musical information : duration and time position.
Definition: ARMusicalObject.h:33
PianoRoll::endRendering
virtual void endRendering(DrawParams &drawParams) const
PianoRoll::DrawKeyboard
virtual void DrawKeyboard(DrawParams &drawParams) const
PianoRoll::popColor
virtual void popColor(VGDevice *dev)
PianoRoll::setLimitDates
virtual void setLimitDates(GuidoDate start, GuidoDate end)
PianoRoll::setPitchLinesDisplayMode
virtual void setPitchLinesDisplayMode(int mode)
PianoRoll::fKeyboardEnabled
bool fKeyboardEnabled
Definition: PianoRoll.h:156
PianoRoll::computeNoteHeight
virtual float computeNoteHeight(int height) const
PianoRoll::DrawChromaticGrid
void DrawChromaticGrid(DrawParams &drawParams, bool isUserDefined=false) const
PianoRoll::fMeasureBarsEnabled
bool fMeasureBarsEnabled
Definition: PianoRoll.h:157
PianoRoll::fVoicesColors
std::map< int, VGColor > fVoicesColors
Definition: PianoRoll.h:148
PianoRoll::pitchRange
virtual int pitchRange() const
Definition: PianoRoll.h:129
ARMusic
Translation of a GUIDO Segment into a class.
Definition: ARMusic.h:31
PianoRoll::DrawFromAR
virtual void DrawFromAR(const DrawParams &drawParams)
PianoRoll::removeColorToVoice
virtual bool removeColorToVoice(int voiceNum)
PianoRoll::roundFloat
float roundFloat(float numberToRound) const
Definition: PianoRoll.h:134

Guido Project Copyright © 2019 Grame-CNCM