Canorus  0.0
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/muselementfactory.h"
15 
16 #include "score/voice.h"
17 #include "score/rest.h"
18 #include "score/keysignature.h"
19 #include "score/clef.h"
20 #include "score/timesignature.h"
21 #include "score/barline.h"
22 #include "score/lyricscontext.h"
23 #include "score/syllable.h"
24 #include "score/playablelength.h"
25 #include "score/diatonicpitch.h"
26 
27 #include "import/import.h"
28 
29 class QTextStream;
30 class CAMidiDevice;
31 class CAMidiImportEvent;
32 class CAMidiNote;
33 
34 class CAMidiImport : public CAImport {
35 public:
36  // Constructor
37  CAMidiImport( CADocument *document=0, QTextStream *in=0 );
38 
39  // Destructor
40  virtual ~CAMidiImport();
41 
42  // close midi in file after import
43  void closeFile();
44 
45  // where the real work is done
48  QList< QList<CAMidiNote*> > importMidiNotes();
49 
50  const QString readableStatus();
51  QList<int> midiProgramList() { return _midiProgramList; }
52 
53 private:
54  // Alternatives during developement
56  void importMidiEvents();
57 
58  void initMidiImport();
59 
60  static const QRegExp WHITESPACE_DELIMITERS;
61  static const QRegExp SYNTAX_DELIMITERS;
62  static const QRegExp DELIMITERS;
63 
64  // Internal time signature
65  struct CATime {
66  int beats;
67  int beat;
68  };
69 
70 private:
76  };
77 
78  inline CAVoice *curVoice() { return _curVoice; }
79  inline void setCurVoice(CAVoice *voice) { _curVoice = voice; }
80 
81  void addError(QString description, int lineError = 0, int charError = 0);
82 
83  // the next four objects should be moved to CADiatonicPitch, doubles are in CAKeybdInput
85  signed char _actualKeySignatureAccs[7];
87  CADiatonicPitch matchPitchToKey( CAVoice* voice, int midiPitch );
88 
90  // Helper functions //
92 
94  // Getter/Setter methods //
96  inline QString& in() { return *stream()->string(); }
97  inline CALilyPondDepth curDepth() { return _depth.top(); }
98  inline void pushDepth(CALilyPondDepth depth) { _depth.push(depth); }
99  inline CALilyPondDepth popDepth() { return _depth.pop(); }
100  inline int curLine() { return _curLine; }
101  inline int curChar() { return _curChar; }
102 
103  // Attributes
107  QStack<CALilyPondDepth> _depth; // which block is currently processed
109  QList<QString> _errors;
110  QList<QString> _warnings;
111  QList<int> _midiProgramList; // list of first instruments in the channel or -1, if not defined
112 
113  //inline CAVoice *templateVoice() { return _templateVoice; }
114  //CAVoice *_templateVoice; // used when importing voice to set the staff etc.
115 
117  // Helper functions //
119 
121  QVector<QList<QList<CAMidiImportEvent*>*>*> _allChannelsEvents;
122  QList<CAMidiImportEvent*> _eventsX;
124  void writeMidiChannelEventsToVoice_New( int channel, int voiceIndex, CAStaff *staff, CAVoice *voice );
126  QVector<CAClef*> _allChannelsClef;
127  QVector<CAKeySignature*> _allChannelsKeySignatures;
128  QVector<CAMidiImportEvent*> _allChannelsTimeSignatures;
129 
130  // When voices are built these functions are used to create or determine the current clef/signature
132  CAMusElement* getOrCreateClef( int time, int voiceIndex, CAStaff *staff, CAVoice *voice );
135  CAMusElement* getOrCreateKeySignature( int time, int voiceIndex, CAStaff *staff, CAVoice *voice );
137  CAMusElement* getOrCreateTimeSignature( int time, int voiceIndex, CAStaff *staff, CAVoice *voice );
139  void fixAccidentals( CASheet *s );
140 };
141 
142 #endif /* MIDIIMPORT_H_ */
Represents a single sheet of paper in the document.
Definition: sheet.h:22
void fixAccidentals(CASheet *s)
Definition: midiimport.cpp:807
CASheet * importSheetImplPmidiParser(CASheet *sheet)
Definition: midiimport.cpp:346
QList< QList< CAMidiNote * > > importMidiNotes()
Definition: midiimport.cpp:126
virtual ~CAMidiImport()
Definition: midiimport.cpp:81
CAVoice * _curVoice
Definition: midiimport.h:104
CALilyPondDepth
Definition: midiimport.h:71
int _actualKeySignatureIndex
Definition: midiimport.h:133
CAMusElement * getOrCreateClef(int time, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:476
int beat
Definition: midiimport.h:67
int getNextKeySignatureTime()
Definition: midiimport.cpp:484
Definition: midiimport.h:73
int _actualClefIndex
Definition: midiimport.h:131
void addError(QString description, int lineError=0, int charError=0)
Definition: midiimport.cpp:90
QTextStream * stream()
Definition: file.h:36
int curLine()
Definition: midiimport.h:100
int beats
Definition: midiimport.h:66
Definition: midiimport.cpp:31
QVector< QList< QList< CAMidiImportEvent * > * > * > _allChannelsEvents
Definition: midiimport.h:121
Class which represents a voice in the staff.
Definition: voice.h:23
QList< QString > _errors
Definition: midiimport.h:109
QList< CAMidiImportEvent * > _eventsX
Definition: midiimport.h:122
QVector< int > _allChannelsMediumPitch
Definition: midiimport.h:125
void writeMidiFileEventsToScore_New(CASheet *sheet)
Definition: midiimport.cpp:356
void importMidiEvents()
Definition: midiimport.cpp:161
Class which represents the current document.
Definition: document.h:19
Canorus<->Midi bridge.
Definition: mididevice.h:22
Definition: midiimport.h:75
CASheet * importSheetImpl()
Definition: midiimport.cpp:106
Base class for import filters.
Definition: import.h:20
int _actualTimeSignatureIndex
Definition: midiimport.h:136
void closeFile()
Definition: midiimport.cpp:741
int curChar()
Definition: midiimport.h:101
int _curChar
Definition: midiimport.h:108
QVector< CAClef * > _allChannelsClef
Definition: midiimport.h:126
CADocument * _document
Definition: midiimport.h:120
int _curLine
Definition: midiimport.h:108
Musical note pitch.
Definition: diatonicpitch.h:16
void initMidiImport()
Definition: midiimport.cpp:85
CASlur * _curPhrasingSlur
Definition: midiimport.h:106
CAMusElement * getOrCreateTimeSignature(int time, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:514
void setCurVoice(CAVoice *voice)
Definition: midiimport.h:79
Definition: midiimport.h:74
QList< int > midiProgramList()
Definition: midiimport.h:51
QString & in()
Definition: midiimport.h:96
CADiatonicPitch _actualKeySignature
Definition: midiimport.h:84
QList< int > _midiProgramList
Definition: midiimport.h:111
QVector< CAKeySignature * > _allChannelsKeySignatures
Definition: midiimport.h:127
CAMusElement * getOrCreateKeySignature(int time, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:495
Definition: midiimport.h:72
CADocument * importDocumentImpl()
Definition: midiimport.cpp:97
An abstract class which represents every music element in the score.
Definition: muselement.h:21
signed char _actualKeySignatureAccs[7]
Definition: midiimport.h:85
void writeMidiChannelEventsToVoice_New(int channel, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:556
static const QRegExp WHITESPACE_DELIMITERS
Definition: midiimport.h:60
QList< QString > _warnings
Definition: midiimport.h:110
CADiatonicPitch matchPitchToKey(CAVoice *voice, int midiPitch)
Definition: midiimport.cpp:777
Slur, Tie, Phrasing slur and Laissez vibrer tie This class represents any type of slur....
Definition: slur.h:18
Definition: midiimport.h:34
Definition: midiimport.h:65
const QString readableStatus()
Definition: midiimport.cpp:748
Represents a staff in the sheet.
Definition: staff.h:25
static const QRegExp DELIMITERS
Definition: midiimport.h:62
CAMidiImport(CADocument *document=0, QTextStream *in=0)
Definition: midiimport.cpp:65
void pushDepth(CALilyPondDepth depth)
Definition: midiimport.h:98
Represents a note with custom length and Midi-defined pitch.
Definition: midinote.h:15
CASlur * _curSlur
Definition: midiimport.h:105
QStack< CALilyPondDepth > _depth
Definition: midiimport.h:107
static const QRegExp SYNTAX_DELIMITERS
Definition: midiimport.h:61
CALilyPondDepth curDepth()
Definition: midiimport.h:97
CAVoice * curVoice()
Definition: midiimport.h:78
CALilyPondDepth popDepth()
Definition: midiimport.h:99
int _actualKeyAccidentalsSum
Definition: midiimport.h:86
QVector< CAMidiImportEvent * > _allChannelsTimeSignatures
Definition: midiimport.h:128
int _numberOfAllVoices
Definition: midiimport.h:138