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"
25#include "score/diatonicpitch.h"
26
27#include "import/import.h"
28
29class QTextStream;
30class CAMidiDevice;
32class CAMidiNote;
33
34class CAMidiImport : public CAImport {
35public:
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
53private:
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
70private:
75 Chord
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
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_ */
Musical note pitch.
Definition: diatonicpitch.h:16
Class which represents the current document.
Definition: document.h:19
QTextStream * stream()
Definition: file.h:36
Base class for import filters.
Definition: import.h:20
Canorus<->Midi bridge.
Definition: mididevice.h:22
Definition: midiimport.cpp:31
Definition: midiimport.h:34
CADiatonicPitch matchPitchToKey(CAVoice *voice, int midiPitch)
Definition: midiimport.cpp:777
void writeMidiChannelEventsToVoice_New(int channel, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:556
CAMidiImport(CADocument *document=0, QTextStream *in=0)
Definition: midiimport.cpp:65
CASlur * _curSlur
Definition: midiimport.h:105
QList< QString > _warnings
Definition: midiimport.h:110
CADocument * importDocumentImpl()
Definition: midiimport.cpp:97
static const QRegExp DELIMITERS
Definition: midiimport.h:62
CALilyPondDepth
Definition: midiimport.h:71
@ Layout
Definition: midiimport.h:73
@ Voice
Definition: midiimport.h:74
@ Chord
Definition: midiimport.h:75
@ Score
Definition: midiimport.h:72
virtual ~CAMidiImport()
Definition: midiimport.cpp:81
void setCurVoice(CAVoice *voice)
Definition: midiimport.h:79
QString & in()
Definition: midiimport.h:96
void pushDepth(CALilyPondDepth depth)
Definition: midiimport.h:98
const QString readableStatus()
Definition: midiimport.cpp:748
CADiatonicPitch _actualKeySignature
Definition: midiimport.h:84
CAVoice * curVoice()
Definition: midiimport.h:78
void addError(QString description, int lineError=0, int charError=0)
Definition: midiimport.cpp:90
int _curLine
Definition: midiimport.h:108
QVector< QList< QList< CAMidiImportEvent * > * > * > _allChannelsEvents
Definition: midiimport.h:121
QVector< int > _allChannelsMediumPitch
Definition: midiimport.h:125
int _curChar
Definition: midiimport.h:108
static const QRegExp WHITESPACE_DELIMITERS
Definition: midiimport.h:60
int curChar()
Definition: midiimport.h:101
QList< int > _midiProgramList
Definition: midiimport.h:111
QList< CAMidiImportEvent * > _eventsX
Definition: midiimport.h:122
CAVoice * _curVoice
Definition: midiimport.h:104
CASheet * importSheetImpl()
Definition: midiimport.cpp:106
QList< QList< CAMidiNote * > > importMidiNotes()
Definition: midiimport.cpp:126
int curLine()
Definition: midiimport.h:100
void importMidiEvents()
Definition: midiimport.cpp:161
QVector< CAClef * > _allChannelsClef
Definition: midiimport.h:126
void initMidiImport()
Definition: midiimport.cpp:85
CALilyPondDepth curDepth()
Definition: midiimport.h:97
CASlur * _curPhrasingSlur
Definition: midiimport.h:106
CAMusElement * getOrCreateKeySignature(int time, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:495
QList< QString > _errors
Definition: midiimport.h:109
void closeFile()
Definition: midiimport.cpp:741
signed char _actualKeySignatureAccs[7]
Definition: midiimport.h:85
CAMusElement * getOrCreateTimeSignature(int time, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:514
int getNextKeySignatureTime()
Definition: midiimport.cpp:484
void fixAccidentals(CASheet *s)
Definition: midiimport.cpp:807
QStack< CALilyPondDepth > _depth
Definition: midiimport.h:107
QVector< CAKeySignature * > _allChannelsKeySignatures
Definition: midiimport.h:127
CADocument * _document
Definition: midiimport.h:120
int _actualTimeSignatureIndex
Definition: midiimport.h:136
int _actualKeyAccidentalsSum
Definition: midiimport.h:86
static const QRegExp SYNTAX_DELIMITERS
Definition: midiimport.h:61
CASheet * importSheetImplPmidiParser(CASheet *sheet)
Definition: midiimport.cpp:346
CALilyPondDepth popDepth()
Definition: midiimport.h:99
void writeMidiFileEventsToScore_New(CASheet *sheet)
Definition: midiimport.cpp:356
QVector< CAMidiImportEvent * > _allChannelsTimeSignatures
Definition: midiimport.h:128
int _actualKeySignatureIndex
Definition: midiimport.h:133
QList< int > midiProgramList()
Definition: midiimport.h:51
CAMusElement * getOrCreateClef(int time, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:476
int _actualClefIndex
Definition: midiimport.h:131
int _numberOfAllVoices
Definition: midiimport.h:138
Represents a note with custom length and Midi-defined pitch.
Definition: midinote.h:15
An abstract class which represents every music element in the score.
Definition: muselement.h:21
Represents a single sheet of paper in the document.
Definition: sheet.h:22
Slur, Tie, Phrasing slur and Laissez vibrer tie This class represents any type of slur....
Definition: slur.h:18
Represents a staff in the sheet.
Definition: staff.h:25
Class which represents a voice in the staff.
Definition: voice.h:23
Definition: midiimport.h:65
int beat
Definition: midiimport.h:67
int beats
Definition: midiimport.h:66