Canorus  0.7
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
midiimport.h
Go to the documentation of this file.
1 
8 #ifndef MIDIIMPORT_H_
9 #define MIDIIMPORT_H_
10 
11 #include <QString>
12 #include <QStack>
13 
14 #include "core/voice.h"
15 #include "core/rest.h"
16 #include "core/keysignature.h"
17 #include "core/clef.h"
18 #include "core/timesignature.h"
19 #include "core/barline.h"
20 #include "core/lyricscontext.h"
21 #include "core/syllable.h"
22 #include "core/playablelength.h"
23 #include "core/diatonicpitch.h"
24 
25 #include "import/import.h"
26 
27 class QTextStream;
28 class CAMidiDevice;
29 class CAMidiImportEvent;
30 
31 class CAMidiImport : public CAImport {
32 public:
33  // Constructor
34  CAMidiImport( QTextStream *in=0 );
35 
36  // Destructor
37  virtual ~CAMidiImport();
38 
39  // close midi in file after import
40  void closeFile();
41 
42  // where the real work is done
45 
46  const QString readableStatus();
47 
48 private:
49  void initMidiImport();
50 
51  static const QRegExp WHITESPACE_DELIMITERS;
52  static const QRegExp SYNTAX_DELIMITERS;
53  static const QRegExp DELIMITERS;
54 
55  // Internal time signature
56  struct CATime {
57  int beats;
58  int beat;
59  };
60 
66  };
67 
68  inline CAVoice *curVoice() { return _curVoice; }
69  inline void setCurVoice(CAVoice *voice) { _curVoice = voice; }
70 
71  const QString parseNextElement();
72  const QString peekNextElement();
73  void addError(QString description, int lineError = 0, int charError = 0);
74 
76  // Helper functions //
78  CAPlayableLength playableLengthFromLilyPond( QString &playableElt, bool parse=false );
79 
80  bool isNote(const QString elt);
81  CADiatonicPitch relativePitchFromLilyPond(QString &note, CADiatonicPitch prevPitch, bool parse=false);
82  bool isRest(const QString elt);
83  CARest::CARestType restTypeFromLilyPond(QString& rest, bool parse=false);
85  int clefOffsetFromLilyPond( const QString clef );
88  CATime timeSigFromLilyPond(QString time);
89 
91 
93  // Getter/Setter methods //
95  inline QString& in() { return *stream()->string(); }
96  inline CALilyPondDepth curDepth() { return _depth.top(); }
97  inline void pushDepth(CALilyPondDepth depth) { _depth.push(depth); }
98  inline CALilyPondDepth popDepth() { return _depth.pop(); }
99  inline int curLine() { return _curLine; }
100  inline int curChar() { return _curChar; }
101 
102  // Attributes
106  QStack<CALilyPondDepth> _depth; // which block is currently processed
108  QList<QString> _errors;
109  QList<QString> _warnings;
110 
111  //inline CAVoice *templateVoice() { return _templateVoice; }
112  //CAVoice *_templateVoice; // used when importing voice to set the staff etc.
113 
115  // Helper functions //
117  int getVariableLength(QByteArray *x );
118  QByteArray getHead(QByteArray *x);
119  int getByte(QByteArray *x);
120  int getWord16(QByteArray *x);
121  int getWord24(QByteArray *x);
122  int getWord32(QByteArray *x);
123  QByteArray getString(QByteArray *x, int len);
124  void printQByteArray( QByteArray x ); // debugging only
128  void noteOn( bool on, int channel, int pitch, int velocity, int time );
129 
131  hr, min, se, fr, ff, next
132  };
135 
137  QVector<QList<QList<CAMidiImportEvent*>*>*> _allChannelsEvents;
138  QList<CAMidiImportEvent*> _eventsX;
139  void combineMidiFileEvents();
140  void quantizeMidiFileEvents();
142  void writeMidiFileEventsToScore( CASheet *sheet );
143  void writeMidiChannelEventsToVoice( int channel, CAStaff *staff, CAVoice *voice );
144 };
145 
146 #endif /* MIDIIMPORT_H_ */
Represents a single sheet of paper in the document.
Definition: sheet.h:20
bool _parseError
Definition: midiimport.h:127
void exportNonChordsToOtherVoices()
Definition: midiimport.cpp:505
int getVariableLength(QByteArray *x)
Definition: midiimport.cpp:912
Definition: midiimport.h:131
virtual ~CAMidiImport()
Definition: midiimport.cpp:84
bool isRest(const QString elt)
Definition: midiimport.cpp:648
CAVoice * _curVoice
Definition: midiimport.h:103
CALilyPondDepth
Definition: midiimport.h:61
int beat
Definition: midiimport.h:58
Definition: midiimport.h:131
void combineMidiFileEvents()
Definition: midiimport.cpp:420
void writeMidiFileEventsToScore(CASheet *sheet)
Definition: midiimport.cpp:328
Definition: midiimport.h:63
smtpOffsComponents
Definition: midiimport.h:130
void addError(QString description, int lineError=0, int charError=0)
Definition: midiimport.cpp:94
QTextStream * stream()
Definition: file.h:33
int curLine()
Definition: midiimport.h:99
Definition: midiimport.h:131
int beats
Definition: midiimport.h:57
Definition: midiimport.cpp:22
QVector< QList< QList< CAMidiImportEvent * > * > * > _allChannelsEvents
Definition: midiimport.h:137
Class which represents a voice in the staff.
Definition: voice.h:22
QList< QString > _errors
Definition: midiimport.h:108
QList< CAMidiImportEvent * > _eventsX
Definition: midiimport.h:138
int _smtpOffset[next]
Definition: midiimport.h:133
CARestType
Definition: rest.h:17
Class which represents the current document.
Definition: document.h:19
Canorus&lt;-&gt;Midi bridge.
Definition: mididevice.h:22
Definition: midiimport.h:65
CASheet * importSheetImpl()
Definition: midiimport.cpp:109
int getWord32(QByteArray *x)
Definition: midiimport.cpp:874
Base class for import filters.
Definition: import.h:20
CAPlayableLength playableLengthFromLilyPond(QString &playableElt, bool parse=false)
Definition: midiimport.cpp:709
CAPredefinedClefType
Definition: clef.h:20
Definition: midiimport.h:131
void closeFile()
Definition: midiimport.cpp:538
Definition: midiimport.h:131
int curChar()
Definition: midiimport.h:100
CAMidiImport(QTextStream *in=0)
Definition: midiimport.cpp:74
int _curChar
Definition: midiimport.h:107
int getWord24(QByteArray *x)
Definition: midiimport.cpp:881
CADocument * _document
Definition: midiimport.h:136
int _curLine
Definition: midiimport.h:107
Musical note pitch.
Definition: diatonicpitch.h:14
Musical length of notes and rests.
Definition: playablelength.h:16
void noteOn(bool on, int channel, int pitch, int velocity, int time)
Definition: midiimport.cpp:542
void initMidiImport()
Definition: midiimport.cpp:87
CASlur * _curPhrasingSlur
Definition: midiimport.h:105
const QString peekNextElement()
Definition: midiimport.cpp:583
bool isNote(const QString elt)
Definition: midiimport.cpp:639
void setCurVoice(CAVoice *voice)
Definition: midiimport.h:69
Definition: midiimport.h:64
QString & in()
Definition: midiimport.h:95
Definition: midiimport.h:131
Definition: midiimport.h:62
CAClef::CAPredefinedClefType predefinedClefTypeFromLilyPond(const QString clef)
Definition: midiimport.cpp:758
CADocument * importDocumentImpl()
Definition: midiimport.cpp:101
An abstract class which represents every music element in the score.
Definition: muselement.h:20
void writeMidiChannelEventsToVoice(int channel, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:365
CATime timeSigFromLilyPond(QString time)
Definition: midiimport.cpp:814
static const QRegExp WHITESPACE_DELIMITERS
Definition: midiimport.h:51
QList< QString > _warnings
Definition: midiimport.h:109
int getWord16(QByteArray *x)
Definition: midiimport.cpp:888
Slur, Tie, Phrasing slur and Laissez vibrer tie This class represents any type of slur...
Definition: slur.h:18
Definition: midiimport.h:31
Definition: midiimport.h:56
CABarlineType
Definition: barline.h:19
const QString parseNextElement()
Definition: midiimport.cpp:554
int _dataIndex
Definition: midiimport.h:125
const QString readableStatus()
Definition: midiimport.cpp:842
Represents a staff in the sheet.
Definition: staff.h:24
CAMusElement * findSharedElement(CAMusElement *elt)
Definition: midiimport.cpp:618
static const QRegExp DELIMITERS
Definition: midiimport.h:53
void pushDepth(CALilyPondDepth depth)
Definition: midiimport.h:97
CABarline::CABarlineType barlineTypeFromLilyPond(const QString bar)
Definition: midiimport.cpp:827
CASlur * _curSlur
Definition: midiimport.h:104
int getByte(QByteArray *x)
Definition: midiimport.cpp:900
QByteArray getHead(QByteArray *x)
Definition: midiimport.cpp:863
QStack< CALilyPondDepth > _depth
Definition: midiimport.h:106
static const QRegExp SYNTAX_DELIMITERS
Definition: midiimport.h:52
CALilyPondDepth curDepth()
Definition: midiimport.h:96
CAVoice * curVoice()
Definition: midiimport.h:68
CALilyPondDepth popDepth()
Definition: midiimport.h:98
CADiatonicPitch relativePitchFromLilyPond(QString &note, CADiatonicPitch prevPitch, bool parse=false)
Definition: midiimport.cpp:657
CARest::CARestType restTypeFromLilyPond(QString &rest, bool parse=false)
Definition: midiimport.cpp:741
int clefOffsetFromLilyPond(const QString clef)
Definition: midiimport.cpp:782
void printQByteArray(QByteArray x)
Definition: midiimport.cpp:854
int _nextTrackIndex
Definition: midiimport.h:126
void quantizeMidiFileEvents()
Definition: midiimport.cpp:455
QByteArray getString(QByteArray *x, int len)
Definition: midiimport.cpp:930
int _microSecondsPerMidiQuarternote
Definition: midiimport.h:134
CAGender
Definition: diatonickey.h:17
CADiatonicKey::CAGender diatonicKeyGenderFromLilyPond(QString gender)
Definition: midiimport.cpp:804