Canorus  0.0
voice.h
Go to the documentation of this file.
1 
8 #ifndef VOICE_H_
9 #define VOICE_H_
10 
11 #include <QList> // music elements container
12 
13 #include "score/muselement.h"
14 #include "score/note.h"
15 
16 class CAKeySignature;
17 class CATimeSignature;
18 class CAClef;
19 class CALyricsContext;
20 class CARest;
21 class CATempo;
22 
23 class CAVoice {
24  friend class CAStaff; // used for insertion of music elements and updateTimes() when inserting elements and synchronizing voices
25 
26 public:
28  ~CAVoice();
29  inline CAStaff *staff() { return _staff; }
30  inline void setStaff(CAStaff *staff) { _staff = staff; }
31  void clear();
32  CAVoice *clone( CAStaff *newStaff = 0 );
33  void cloneVoiceProperties( CAVoice* v );
34 
36  // Notes, rests and signs manipulation //
38  void append( CAMusElement *elt, bool addToChord=false );
39  bool insert( CAMusElement *eltAfter, CAMusElement *elt, bool addToChord=false );
40  bool remove( CAMusElement *elt, bool updateSignsTimes=true );
43 
45  // Voice analysis and query //
47  inline const QList<CAMusElement*>& musElementList() { return _musElementList; }
48 
49  QList<CAMusElement*> getSignList();
50  QList<CANote*> getNoteList();
51  bool containsPitch( int noteName , int timeStart );
52  bool containsPitch( CADiatonicPitch p, int timeStart );
57 
58  CANote *nextNote(int timeStart);
59  CANote *previousNote(int timeStart);
60  CARest *nextRest(int timeStart);
61  CARest *previousRest(int timeStart);
62  CAPlayable *nextPlayable(int timeStart);
63  CAPlayable *previousPlayable(int timeStart);
64 
65  bool binarySearch_startTime(int time, int& position);
66 
68  QList<CAMusElement*> getEltByType(CAMusElement::CAMusElementType type, int startTime);
70  QList<CAMusElement*> getPreviousByType(CAMusElement::CAMusElementType type, int startTime);
71 
72  inline int lastTimeEnd() { return (musElementList().size()?musElementList().back()->timeEnd():0); }
73  inline int lastTimeStart() { return (musElementList().size()?musElementList().back()->timeStart():0); }
74  inline CAMusElement *lastMusElement() { return musElementList().size()?musElementList().back():0; }
75  CADiatonicPitch lastNotePitch(bool inChord=false);
77  CANote* lastNote();
81  QList<CAPlayable*> getChord( int time );
82  QList<CAMusElement*> getBar( int time );
83  CATempo *getTempo( int time );
84 
85  QList<CAMusElement*> getKeySignature(int startTime);
86  QList<CAMusElement*> getTimeSignature(int startTime);
87  QList<CAMusElement*> getClef(int startTime);
88  QList<CAMusElement*> getPreviousKeySignature(int startTime);
89  QList<CAMusElement*> getPreviousTimeSignature(int startTime);
90  QList<CAMusElement*> getPreviousClef(int startTime);
91 
93  // Properties //
95  inline int voiceNumber() { return (staff()?(staff()->voiceList().indexOf(this)+1):1); }
96  inline bool isFirstVoice() { return (voiceNumber()==1); }
97 
99  inline void setStemDirection( CANote::CAStemDirection direction ) { _stemDirection = direction; }
100 
101  inline const QString name() { return _name; }
102  inline void setName(const QString name) { _name = name; }
103 
104  inline unsigned char midiChannel() { return _midiChannel; }
105  inline void setMidiChannel(const unsigned char ch) { _midiChannel = ch; }
106 
107  inline unsigned char midiProgram() { return _midiProgram; }
108  inline void setMidiProgram(const unsigned char program) { _midiProgram = program; }
109 
110  inline char midiPitchOffset() { return _midiPitchOffset; }
112 
113  inline const QList<CALyricsContext*>& lyricsContextList() { return _lyricsContextList; }
115  inline void setLyricsContexts( QList<CALyricsContext*> list ) { _lyricsContextList = list; }
116  inline void addLyricsContexts( QList<CALyricsContext*> list ) { _lyricsContextList += list; }
117  inline bool removeLyricsContext( CALyricsContext *lc ) { return _lyricsContextList.removeAll(lc); }
118 
119 private:
120  bool addNoteToChord(CANote *note, CANote *referenceNote);
121  bool insertMusElement( CAMusElement *before, CAMusElement *elt );
122  bool updateTimes( int idx, int length, bool signsToo=false );
123 
124  // list of all the music elements
125  QList<CAMusElement *> _musElementList;
126  CAStaff *_staff; // parent staff
127 
129  QList<CALyricsContext*> _lyricsContextList;
130 
131  QString _name;
132 
134  // MIDI properties //
136  unsigned char _midiChannel;
137  unsigned char _midiProgram;
139 };
140 #endif /* VOICE_H_ */
rest.h
CAVoice::setStemDirection
void setStemDirection(CANote::CAStemDirection direction)
Definition: voice.h:99
CAMusElement::CAMusElementType
CAMusElementType
Definition: muselement.h:23
CAVoice::getPreviousTimeSignature
QList< CAMusElement * > getPreviousTimeSignature(int startTime)
Definition: voice.cpp:1111
CAStaff::voiceList
const QList< CAVoice * > & voiceList()
Definition: staff.h:35
CANote::setSlurStart
void setSlurStart(CASlur *slurStart)
Definition: note.h:59
CARest
Represents a rest in the score.
Definition: rest.h:15
CAVoice::remove
bool remove(CAMusElement *elt, bool updateSignsTimes=true)
Definition: voice.cpp:307
CAVoice::getBar
QList< CAMusElement * > getBar(int time)
Definition: voice.cpp:648
note.h
CAVoice::getPreviousClef
QList< CAMusElement * > getPreviousClef(int startTime)
Definition: voice.cpp:1132
CANote::phrasingSlurStart
CASlur * phrasingSlurStart()
Definition: note.h:51
CAVoice::insert
bool insert(CAMusElement *eltAfter, CAMusElement *elt, bool addToChord=false)
Definition: voice.cpp:154
CAClef
Definition: clef.h:18
CAVoice::previousByType
CAMusElement * previousByType(CAMusElement::CAMusElementType type, CAMusElement *elt)
Definition: voice.cpp:753
CANote::slurEnd
CASlur * slurEnd()
Definition: note.h:50
CANote
Represents a note in the score.
Definition: note.h:18
CAVoice::getKeySig
CAKeySignature * getKeySig(CAMusElement *elt)
Definition: voice.cpp:283
CAVoice::getEltByType
QList< CAMusElement * > getEltByType(CAMusElement::CAMusElementType type, int startTime)
Definition: voice.cpp:550
CAVoice::lastTimeEnd
int lastTimeEnd()
Definition: voice.h:72
playable.h
CAMusElement::Clef
@ Clef
Definition: muselement.h:29
CAMark::isCommon
bool isCommon()
Definition: mark.h:48
CANote::setPhrasingSlurEnd
void setPhrasingSlurEnd(CASlur *pSlurEnd)
Definition: note.h:62
CAVoice::previousNote
CANote * previousNote(int timeStart)
Definition: voice.cpp:803
CAVoice::_stemDirection
CANote::CAStemDirection _stemDirection
Definition: voice.h:128
CAVoice
Class which represents a voice in the staff.
Definition: voice.h:23
slur.h
CAVoice::CAVoice
CAVoice(const QString name, CAStaff *staff, CANote::CAStemDirection stemDirection=CANote::StemNeutral)
Definition: voice.cpp:37
CAMusElement::Barline
@ Barline
Definition: muselement.h:28
CATimeSignature
Represents a time signature in the staff.
Definition: timesignature.h:18
CAVoice::getKeySignature
QList< CAMusElement * > getKeySignature(int startTime)
Definition: voice.cpp:1026
CATuplet::addNote
void addNote(CAPlayable *p)
Definition: tuplet.cpp:279
CAVoice::nextPlayable
CAPlayable * nextPlayable(int timeStart)
Definition: voice.cpp:860
CAVoice::lastMusElement
CAMusElement * lastMusElement()
Definition: voice.h:74
CAPlayable::setTuplet
void setTuplet(CATuplet *t)
Definition: playable.h:29
CAVoice::getClef
CAClef * getClef(CAMusElement *elt)
Definition: voice.cpp:249
CANote::stemDirection
CAStemDirection stemDirection()
Definition: note.h:42
CAMusElement::markList
const QList< CAMark * > markList()
Definition: muselement.h:70
CAVoice::getTimeSig
CATimeSignature * getTimeSig(CAMusElement *elt)
Definition: voice.cpp:266
CAPlayable
Playable instances of music elements.
Definition: playable.h:18
CAMusElement::setTimeLength
void setTimeLength(int length)
Definition: muselement.h:54
CAMidiDevice::freeMidiChannel
static unsigned char freeMidiChannel(CASheet *)
Definition: mididevice.cpp:199
CAVoice::setMidiChannel
void setMidiChannel(const unsigned char ch)
Definition: voice.h:105
CAVoice::getPreviousKeySignature
QList< CAMusElement * > getPreviousKeySignature(int startTime)
Definition: voice.cpp:1090
CAStaff::timeSignatureRefs
QList< CAMusElement * > & timeSignatureRefs()
Definition: staff.h:61
CAVoice::lastPlayableElt
CAPlayable * lastPlayableElt()
Definition: voice.cpp:481
CATuplet::removeNote
void removeNote(CAPlayable *p)
Definition: tuplet.h:36
CAVoice::_midiPitchOffset
char _midiPitchOffset
Definition: voice.h:138
CAMark::Tempo
@ Tempo
Definition: mark.h:20
CAVoice::getChord
QList< CAPlayable * > getChord(int time)
Definition: voice.cpp:618
CAMusElement::removeMark
void removeMark(CAMark *mark)
Definition: muselement.h:73
CAPlayable::setPlayableLength
void setPlayableLength(CAPlayableLength &l)
Definition: playable.h:24
CAVoice::clear
void clear()
Definition: voice.cpp:97
CAVoice::_lyricsContextList
QList< CALyricsContext * > _lyricsContextList
Definition: voice.h:129
CAVoice::getSignList
QList< CAMusElement * > getSignList()
Definition: voice.cpp:698
CAVoice::setMidiPitchOffset
void setMidiPitchOffset(const char midiPitchOffset)
Definition: voice.h:111
CAPlayable::tuplet
CATuplet * tuplet()
Definition: playable.h:28
CAVoice::nextRest
CARest * nextRest(int timeStart)
Definition: voice.cpp:822
CAVoice::~CAVoice
~CAVoice()
Definition: voice.cpp:53
CAVoice::setName
void setName(const QString name)
Definition: voice.h:102
CAVoice::stemDirection
CANote::CAStemDirection stemDirection()
Definition: voice.h:98
CAMusElement::TimeSignature
@ TimeSignature
Definition: muselement.h:30
CAVoice::next
CAMusElement * next(CAMusElement *elt)
Definition: voice.cpp:713
CAVoice::insertMusElement
bool insertMusElement(CAMusElement *before, CAMusElement *elt)
Definition: voice.cpp:366
CAVoice::_staff
CAStaff * _staff
Definition: voice.h:126
CAVoice::midiProgram
unsigned char midiProgram()
Definition: voice.h:107
keysignature.h
CAVoice::_midiProgram
unsigned char _midiProgram
Definition: voice.h:137
CAMusElement::timeLength
virtual int timeLength() const
Definition: muselement.h:53
CAVoice::getPreviousByType
QList< CAMusElement * > getPreviousByType(CAMusElement::CAMusElementType type, int startTime)
Definition: voice.cpp:594
CAVoice::removeLyricsContext
bool removeLyricsContext(CALyricsContext *lc)
Definition: voice.h:117
CANote::phrasingSlurEnd
CASlur * phrasingSlurEnd()
Definition: note.h:52
CAStaff::removeVoice
void removeVoice(CAVoice *voice)
Definition: staff.h:39
CANote::setStemDirection
void setStemDirection(CAStemDirection direction)
Definition: note.cpp:228
CAMusElement::addMark
void addMark(CAMark *mark)
Definition: muselement.cpp:135
CAVoice::addLyricsContext
void addLyricsContext(CALyricsContext *lc)
Definition: voice.h:114
CAVoice::cloneVoiceProperties
void cloneVoiceProperties(CAVoice *v)
Definition: voice.cpp:81
CADiatonicPitch::noteName
const int noteName() const
Definition: diatonicpitch.h:50
CADiatonicPitch
Musical note pitch.
Definition: diatonicpitch.h:16
CATempo
Tempo mark.
Definition: tempo.h:14
CAVoice::midiChannel
unsigned char midiChannel()
Definition: voice.h:104
CANote::setPhrasingSlurStart
void setPhrasingSlurStart(CASlur *pSlurStart)
Definition: note.h:61
CAVoice::binarySearch_startTime
bool binarySearch_startTime(int time, int &position)
\A common binary search Algorithm with its pseudocode
Definition: voice.cpp:507
CAMusElement::KeySignature
@ KeySignature
Definition: muselement.h:31
CAVoice::setStaff
void setStaff(CAStaff *staff)
Definition: voice.h:30
CANote::isPartOfChord
bool isPartOfChord()
Definition: note.cpp:149
CAVoice::nextByType
CAMusElement * nextByType(CAMusElement::CAMusElementType type, CAMusElement *elt)
Definition: voice.cpp:739
CAVoice::musElementList
const QList< CAMusElement * > & musElementList()
Definition: voice.h:47
CATuplet
Class used for tuplets (triplets, duols etc.)
Definition: tuplet.h:17
CANote::isFirstInChord
bool isFirstInChord()
Definition: note.cpp:166
CAStaff
Represents a staff in the sheet.
Definition: staff.h:25
CAVoice::insertInTupletAndVoiceAt
CAPlayable * insertInTupletAndVoiceAt(CAPlayable *p, CAPlayable *n)
Definition: voice.cpp:204
CAMusElement
An abstract class which represents every music element in the score.
Definition: muselement.h:21
CAVoice::previousPlayable
CAPlayable * previousPlayable(int timeStart)
Definition: voice.cpp:879
CANote::slurStart
CASlur * slurStart()
Definition: note.h:49
CAVoice::_musElementList
QList< CAMusElement * > _musElementList
Definition: voice.h:125
CAMusElement::setTimeStart
void setTimeStart(int time)
Definition: muselement.h:52
CAVoice::getOneEltByType
CAMusElement * getOneEltByType(CAMusElement::CAMusElementType type, int startTime)
Definition: voice.cpp:530
CAVoice::addLyricsContexts
void addLyricsContexts(QList< CALyricsContext * > list)
Definition: voice.h:116
CAMusElement::Rest
@ Rest
Definition: muselement.h:26
CAMusElement::isPlayable
bool isPlayable()
Definition: muselement.cpp:78
CAVoice::nextNote
CANote * nextNote(int timeStart)
Definition: voice.cpp:784
CAVoice::setLyricsContexts
void setLyricsContexts(QList< CALyricsContext * > list)
Definition: voice.h:115
CAVoice::getTimeSignature
QList< CAMusElement * > getTimeSignature(int startTime)
Definition: voice.cpp:1047
CAMusElement::timeEnd
int timeEnd()
Definition: muselement.h:55
CAVoice::getTempo
CATempo * getTempo(int time)
Definition: voice.cpp:998
CAKeySignature
Represents a key signature sign in the staff.
Definition: keysignature.h:19
CANote::StemNeutral
@ StemNeutral
Definition: note.h:22
CAVoice::append
void append(CAMusElement *elt, bool addToChord=false)
Definition: voice.cpp:120
CAStaff::clefRefs
QList< CAMusElement * > & clefRefs()
Definition: staff.h:59
CANote::getChord
QList< CANote * > getChord()
Definition: note.cpp:197
CAVoice::lastTimeStart
int lastTimeStart()
Definition: voice.h:73
CATuplet::assignTimes
void assignTimes()
Definition: tuplet.cpp:159
CAVoice::setMidiProgram
void setMidiProgram(const unsigned char program)
Definition: voice.h:108
CAVoice::_name
QString _name
Definition: voice.h:131
CAMusElement::Note
@ Note
Definition: muselement.h:25
CAVoice::lastNote
CANote * lastNote()
Definition: voice.cpp:495
CAVoice::addNoteToChord
bool addNoteToChord(CANote *note, CANote *referenceNote)
Definition: voice.cpp:423
CALyricsContext
One stanza line of lyrics.
Definition: lyricscontext.h:19
timesignature.h
CANote::setSlurEnd
void setSlurEnd(CASlur *slurEnd)
Definition: note.h:60
CAMusElement::timeStart
virtual int timeStart() const
Definition: muselement.h:51
CAVoice::staff
CAStaff * staff()
Definition: voice.h:29
muselement.h
CAVoice::clone
CAVoice * clone(CAStaff *newStaff=0)
Definition: voice.cpp:70
CAVoice::getNoteList
QList< CANote * > getNoteList()
Definition: voice.cpp:683
CANote::diatonicPitch
CADiatonicPitch & diatonicPitch()
Definition: note.h:35
CAVoice::previousRest
CARest * previousRest(int timeStart)
Definition: voice.cpp:841
CAStaff::barlineRefs
QList< CAMusElement * > & barlineRefs()
Definition: staff.h:62
mididevice.h
tempo.h
CANote::CAStemDirection
CAStemDirection
Direction of the note's stem.
Definition: note.h:20
CAMark
Marks that depend on other music elements.
Definition: mark.h:15
voice.h
CAVoice::updateTimes
bool updateTimes(int idx, int length, bool signsToo=false)
Definition: voice.cpp:901
clef.h
CAVoice::name
const QString name()
Definition: voice.h:101
CAVoice::_midiChannel
unsigned char _midiChannel
Definition: voice.h:136
CAVoice::lastNotePitch
CADiatonicPitch lastNotePitch(bool inChord=false)
Definition: voice.cpp:453
CAVoice::voiceNumber
int voiceNumber()
Definition: voice.h:95
staff.h
CAVoice::lyricsContextList
const QList< CALyricsContext * > & lyricsContextList()
Definition: voice.h:113
CASlur
Slur, Tie, Phrasing slur and Laissez vibrer tie This class represents any type of slur....
Definition: slur.h:18
lyricscontext.h
CAVoice::previous
CAMusElement * previous(CAMusElement *elt)
Definition: voice.cpp:765
CAVoice::synchronizeMusElements
bool synchronizeMusElements()
Definition: voice.cpp:923
CAMusElement::musElementType
CAMusElementType musElementType()
Definition: muselement.h:46
mark.h
CAPlayable::voice
CAVoice * voice()
Definition: playable.h:31
CAContext::sheet
CASheet * sheet()
Definition: context.h:34
CAPlayable::playableLength
CAPlayableLength & playableLength()
Definition: playable.h:23
CAVoice::midiPitchOffset
char midiPitchOffset()
Definition: voice.h:110
CAVoice::isFirstVoice
bool isFirstVoice()
Definition: voice.h:96
CAVoice::containsPitch
bool containsPitch(int noteName, int timeStart)
Definition: voice.cpp:967
CAStaff::keySignatureRefs
QList< CAMusElement * > & keySignatureRefs()
Definition: staff.h:60
CAMusElement::Slur
@ Slur
Definition: muselement.h:32
CAVoice::getOnePreviousByType
CAMusElement * getOnePreviousByType(CAMusElement::CAMusElementType type, int startTime)
Definition: voice.cpp:572