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:
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
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_ */
CASlur::SlurPreferred
@ SlurPreferred
Definition: slur.h:24
rest.h
CAMidiImport::_allChannelsEvents
QVector< QList< QList< CAMidiImportEvent * > * > * > _allChannelsEvents
Definition: midiimport.h:121
CAMidiImport::_errors
QList< QString > _errors
Definition: midiimport.h:109
CAMidiImportEvent::_bottom
int _bottom
Definition: midiimport.cpp:44
CAStaff::voiceList
const QList< CAVoice * > & voiceList()
Definition: staff.h:35
CAMidiImport::_allChannelsTimeSignatures
QVector< CAMidiImportEvent * > _allChannelsTimeSignatures
Definition: midiimport.h:128
CAMidiImport::curLine
int curLine()
Definition: midiimport.h:100
CAMidiImport::writeMidiFileEventsToScore_New
void writeMidiFileEventsToScore_New(CASheet *sheet)
Definition: midiimport.cpp:356
CAMidiImport::curVoice
CAVoice * curVoice()
Definition: midiimport.h:78
CARest
Represents a rest in the score.
Definition: rest.h:15
pmidi_outs::time
int time
Definition: wrapper.h:40
CAMidiImport::importMidiEvents
void importMidiEvents()
Definition: midiimport.cpp:161
pmidi_outs::time_base
int time_base
Definition: wrapper.h:36
CAMidiImportEvent::CAMidiImportEvent
CAMidiImportEvent(bool on, int channel, int pitch, int velocity, int time, int length, int tempo, int program)
Definition: midiimport.cpp:48
CADiatonicPitch::diatonicPitchFromMidiPitch
static CADiatonicPitch diatonicPitchFromMidiPitch(int midiPitch, CAMidiPitchMode m=PreferAuto)
Definition: diatonicpitch.cpp:192
note.h
CAClef::Treble
@ Treble
Definition: clef.h:22
CAMidiImport::_allChannelsMediumPitch
QVector< int > _allChannelsMediumPitch
Definition: midiimport.h:125
CAClef
Definition: clef.h:18
CAVoice::previousByType
CAMusElement * previousByType(CAMusElement::CAMusElementType type, CAMusElement *elt)
Definition: voice.cpp:753
CAMidiImport::importSheetImpl
CASheet * importSheetImpl()
Definition: midiimport.cpp:106
CANote
Represents a note in the score.
Definition: note.h:18
CADiatonicPitch::diatonicPitchFromMidiPitchKey
static CADiatonicPitch diatonicPitchFromMidiPitchKey(int midiPitch, CADiatonicKey k, CAMidiPitchMode m=PreferAuto)
Definition: diatonicpitch.cpp:206
CAVoice::lastTimeEnd
int lastTimeEnd()
Definition: voice.h:72
CADocument
Class which represents the current document.
Definition: document.h:19
playable.h
CASheet::addContext
void addContext(CAContext *c)
Definition: sheet.h:33
CAMidiImport::_actualTimeSignatureIndex
int _actualTimeSignatureIndex
Definition: midiimport.h:136
pmidi_outs::program
int program
Definition: wrapper.h:53
PMIDI_STATUS_VERSION
#define PMIDI_STATUS_VERSION
Definition: wrapper.h:17
CASlur::TieType
@ TieType
Definition: slur.h:34
CAVoice
Class which represents a voice in the staff.
Definition: voice.h:23
slur.h
document.h
CAMusElement::Barline
@ Barline
Definition: muselement.h:28
CATimeSignature
Represents a time signature in the staff.
Definition: timesignature.h:18
pmidi_out
struct pmidi_outs pmidi_out
wrapper.h
CAPlayableLength::matchToBars
static QList< CAPlayableLength > matchToBars(CAPlayableLength len, int timeStart, CABarline *lastBarline, CATimeSignature *ts, int dotsLimit=4)
Definition: playablelength.cpp:242
CAMidiImport::fixAccidentals
void fixAccidentals(CASheet *s)
Definition: midiimport.cpp:807
CASheet::voiceList
QList< CAVoice * > voiceList()
Definition: sheet.cpp:148
PMIDI_STATUS_PITCH
#define PMIDI_STATUS_PITCH
Definition: wrapper.h:27
CAVoice::lastMusElement
CAMusElement * lastMusElement()
Definition: voice.h:74
PMIDI_STATUS_DUMMY
#define PMIDI_STATUS_DUMMY
Definition: wrapper.h:23
CAMidiImport::_curChar
int _curChar
Definition: midiimport.h:108
PMIDI_STATUS_NOTE
#define PMIDI_STATUS_NOTE
Definition: wrapper.h:22
CAStaff::getOneEltByType
CAMusElement * getOneEltByType(CAMusElement::CAMusElementType type, int startTime)
Definition: staff.cpp:289
diatonicpitch.h
CAMidiImport::_curLine
int _curLine
Definition: midiimport.h:108
CAMidiImport::closeFile
void closeFile()
Definition: midiimport.cpp:741
pmidi_outs::minor
int minor
Definition: wrapper.h:46
CAVoice::setMidiChannel
void setMidiChannel(const unsigned char ch)
Definition: voice.h:105
CAStaff::timeSignatureRefs
QList< CAMusElement * > & timeSignatureRefs()
Definition: staff.h:61
CAMidiImport::getOrCreateClef
CAMusElement * getOrCreateClef(int time, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:476
CARest::Normal
@ Normal
Definition: rest.h:19
CAMidiImport::initMidiImport
void initMidiImport()
Definition: midiimport.cpp:85
midinote.h
CAMidiImport::CATime::beats
int beats
Definition: midiimport.h:66
pmidi_outs::vel
int vel
Definition: wrapper.h:57
CADiatonicKey
Musical key.
Definition: diatonickey.h:15
PMIDI_STATUS_KEYTOUCH
#define PMIDI_STATUS_KEYTOUCH
Definition: wrapper.h:29
CAMidiImport::getOrCreateTimeSignature
CAMusElement * getOrCreateTimeSignature(int time, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:514
CAInterval
Music interval expressed with diatonical quality and quantity.
Definition: interval.h:15
CAMidiImport::_actualKeySignature
CADiatonicPitch _actualKeySignature
Definition: midiimport.h:84
CANote::StemPreferred
@ StemPreferred
Definition: note.h:25
pmidi_outs::top
int top
Definition: wrapper.h:48
midiimport.h
CAMidiImportEvent::_channel
int _channel
Definition: midiimport.cpp:36
CAMidiImport::importDocumentImpl
CADocument * importDocumentImpl()
Definition: midiimport.cpp:97
CAMidiImport::_midiProgramList
QList< int > _midiProgramList
Definition: midiimport.h:111
CAMidiImport::addError
void addError(QString description, int lineError=0, int charError=0)
Definition: midiimport.cpp:90
CAFile::stream
QTextStream * stream()
Definition: file.h:36
pmidi_outs::micro_tempo
int micro_tempo
Definition: wrapper.h:38
PMIDI_STATUS_END
#define PMIDI_STATUS_END
Definition: wrapper.h:16
CAMidiImport::_eventsX
QList< CAMidiImportEvent * > _eventsX
Definition: midiimport.h:122
CAMidiImport::Voice
@ Voice
Definition: midiimport.h:74
CAMidiImportEvent::_pitchList
QList< int > _pitchList
Definition: midiimport.cpp:37
keysignature.h
CAVoice::getPreviousByType
QList< CAMusElement * > getPreviousByType(CAMusElement::CAMusElementType type, int startTime)
Definition: voice.cpp:594
CAMidiImport::Score
@ Score
Definition: midiimport.h:72
pmidi_outs::chan
int chan
Definition: wrapper.h:54
CAPlayableLength::Quarter
@ Quarter
Definition: playablelength.h:23
CAMidiImport::writeMidiChannelEventsToVoice_New
void writeMidiChannelEventsToVoice_New(int channel, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:556
syllable.h
CAMusElement::addMark
void addMark(CAMark *mark)
Definition: muselement.cpp:135
pmidi_outs::note
int note
Definition: wrapper.h:56
CAImport::fileName
QString fileName()
Definition: import.cpp:96
CAMidiImport::_warnings
QList< QString > _warnings
Definition: midiimport.h:110
CAPlayableLength::HundredTwentyEighth
@ HundredTwentyEighth
Definition: playablelength.h:28
CADiatonicPitch
Musical note pitch.
Definition: diatonicpitch.h:16
CATempo
Tempo mark.
Definition: tempo.h:14
CAMidiImportEvent
Definition: midiimport.cpp:31
CAFile::status
const int status()
Definition: file.h:21
CAClef::Bass
@ Bass
Definition: clef.h:23
CAMusElement::KeySignature
@ KeySignature
Definition: muselement.h:31
CADiatonicKey::Minor
@ Minor
Definition: diatonickey.h:19
CAMidiDevice
Canorus<->Midi bridge.
Definition: mididevice.h:22
CAStaff::placeAutoBar
static bool placeAutoBar(CAPlayable *elt)
Definition: staff.cpp:501
CAMidiImportEvent::~CAMidiImportEvent
~CAMidiImportEvent()
Definition: midiimport.cpp:61
CAMidiImport::DELIMITERS
static const QRegExp DELIMITERS
Definition: midiimport.h:62
CAMidiImport::_allChannelsClef
QVector< CAClef * > _allChannelsClef
Definition: midiimport.h:126
CAStaff
Represents a staff in the sheet.
Definition: staff.h:25
CASheet::setName
void setName(const QString name)
Definition: sheet.h:47
pmidi_parse_midi_file
int pmidi_parse_midi_file(void)
CAMusElement
An abstract class which represents every music element in the score.
Definition: muselement.h:21
CAMidiImportEvent::_tempo
int _tempo
Definition: midiimport.cpp:42
CAMidiImport::curChar
int curChar()
Definition: midiimport.h:101
CAMidiImport::Chord
@ Chord
Definition: midiimport.h:75
CAMidiImport::_curPhrasingSlur
CASlur * _curPhrasingSlur
Definition: midiimport.h:106
CAMidiImport::_document
CADocument * _document
Definition: midiimport.h:120
CAMidiImport::CATime
Definition: midiimport.h:65
CAMidiImportEvent::_velocity
int _velocity
Definition: midiimport.cpp:38
CAMidiImport::_actualKeyAccidentalsSum
int _actualKeyAccidentalsSum
Definition: midiimport.h:86
CAPlayableLength::playableLengthToTimeLength
static const int playableLengthToTimeLength(CAPlayableLength length)
Definition: playablelength.cpp:107
playablelength.h
CAMusElement::timeEnd
int timeEnd()
Definition: muselement.h:55
CAMidiImport::curDepth
CALilyPondDepth curDepth()
Definition: midiimport.h:97
CAKeySignature
Represents a key signature sign in the staff.
Definition: keysignature.h:19
CAMidiImport::in
QString & in()
Definition: midiimport.h:96
CANote::StemNeutral
@ StemNeutral
Definition: note.h:22
CAMidiImport
Definition: midiimport.h:34
CAMidiImport::popDepth
CALilyPondDepth popDepth()
Definition: midiimport.h:99
CAVoice::append
void append(CAMusElement *elt, bool addToChord=false)
Definition: voice.cpp:120
CASheet::staffList
QList< CAStaff * > staffList()
Definition: sheet.cpp:157
CAFile::setStatus
void setStatus(const int status)
Definition: file.h:33
PMIDI_STATUS_SMPTEOFFS
#define PMIDI_STATUS_SMPTEOFFS
Definition: wrapper.h:31
CAMidiImport::getOrCreateKeySignature
CAMusElement * getOrCreateKeySignature(int time, int voiceIndex, CAStaff *staff, CAVoice *voice)
Definition: midiimport.cpp:495
PMIDI_STATUS_TEMPO
#define PMIDI_STATUS_TEMPO
Definition: wrapper.h:21
CAMidiImport::_numberOfAllVoices
int _numberOfAllVoices
Definition: midiimport.h:138
CAMidiImport::setCurVoice
void setCurVoice(CAVoice *voice)
Definition: midiimport.h:79
CAMidiImport::midiProgramList
QList< int > midiProgramList()
Definition: midiimport.h:51
CAVoice::setMidiProgram
void setMidiProgram(const unsigned char program)
Definition: voice.h:108
PMIDI_STATUS_CONTROL
#define PMIDI_STATUS_CONTROL
Definition: wrapper.h:25
CAMidiImportEvent::_length
int _length
Definition: midiimport.cpp:40
sheet.h
CAMidiImport::_actualKeySignatureAccs
signed char _actualKeySignatureAccs[7]
Definition: midiimport.h:85
pmidi_outs::key
int key
Definition: wrapper.h:45
CAMidiImport::_allChannelsKeySignatures
QVector< CAKeySignature * > _allChannelsKeySignatures
Definition: midiimport.h:127
timesignature.h
barline.h
CAMidiImport::WHITESPACE_DELIMITERS
static const QRegExp WHITESPACE_DELIMITERS
Definition: midiimport.h:60
CAKeySignature::diatonicKey
CADiatonicKey diatonicKey()
Definition: keysignature.h:50
CADiatonicKey::Major
@ Major
Definition: diatonickey.h:18
CAMidiImport::matchPitchToKey
CADiatonicPitch matchPitchToKey(CAVoice *voice, int midiPitch)
Definition: midiimport.cpp:777
CAStaff::addVoice
void addVoice(CAVoice *voice)
Definition: staff.h:36
PMIDI_STATUS_SYSEX
#define PMIDI_STATUS_SYSEX
Definition: wrapper.h:30
mididevice.h
PMIDI_STATUS_TIMESIG
#define PMIDI_STATUS_TIMESIG
Definition: wrapper.h:20
CAMidiImportEvent::_on
bool _on
Definition: midiimport.cpp:35
tempo.h
CAFile::setProgress
void setProgress(const int progress)
Definition: file.h:34
CABarline
Music element which represents a barline in the score.
Definition: barline.h:17
CAMark
Marks that depend on other music elements.
Definition: mark.h:15
CAMidiImport::importSheetImplPmidiParser
CASheet * importSheetImplPmidiParser(CASheet *sheet)
Definition: midiimport.cpp:346
CAMidiImport::importMidiNotes
QList< QList< CAMidiNote * > > importMidiNotes()
Definition: midiimport.cpp:126
voice.h
CADocument::addSheet
void addSheet(CASheet *sheet)
Definition: document.h:28
CAMidiImport::Layout
@ Layout
Definition: midiimport.h:73
CAMidiImport::~CAMidiImport
virtual ~CAMidiImport()
Definition: midiimport.cpp:81
clef.h
PMIDI_STATUS_TEXT
#define PMIDI_STATUS_TEXT
Definition: wrapper.h:18
CASheet
Represents a single sheet of paper in the document.
Definition: sheet.h:22
CAMidiImport::CAMidiImport
CAMidiImport(CADocument *document=0, QTextStream *in=0)
Definition: midiimport.cpp:65
CAMidiImport::pushDepth
void pushDepth(CALilyPondDepth depth)
Definition: midiimport.h:98
PMIDI_STATUS_KEYSIG
#define PMIDI_STATUS_KEYSIG
Definition: wrapper.h:19
CAImport
Base class for import filters.
Definition: import.h:20
CAMidiImport::_actualKeySignatureIndex
int _actualKeySignatureIndex
Definition: midiimport.h:133
PMIDI_STATUS_ROOT
#define PMIDI_STATUS_ROOT
Definition: wrapper.h:24
CAMidiImport::readableStatus
const QString readableStatus()
Definition: midiimport.cpp:748
CAMidiImportEvent::_nextTime
int _nextTime
Definition: midiimport.cpp:41
CAMidiImportEvent::_time
int _time
Definition: midiimport.cpp:39
CAMidiNote
Represents a note with custom length and Midi-defined pitch.
Definition: midinote.h:15
CAMidiImport::_curVoice
CAVoice * _curVoice
Definition: midiimport.h:104
CAMidiImport::CALilyPondDepth
CALilyPondDepth
Definition: midiimport.h:71
CASlur
Slur, Tie, Phrasing slur and Laissez vibrer tie This class represents any type of slur....
Definition: slur.h:18
PMIDI_STATUS_PROGRAM
#define PMIDI_STATUS_PROGRAM
Definition: wrapper.h:26
lyricscontext.h
pmidi_open_midi_file
int pmidi_open_midi_file(const char *fileName)
CAFile::file
QFile * file()
Definition: file.h:39
CAMidiImport::getNextKeySignatureTime
int getNextKeySignatureTime()
Definition: midiimport.cpp:484
PMIDI_STATUS_PRESSURE
#define PMIDI_STATUS_PRESSURE
Definition: wrapper.h:28
CAMidiImport::_curSlur
CASlur * _curSlur
Definition: midiimport.h:105
pmidi_outs::length
int length
Definition: wrapper.h:58
CAMidiImportEvent::_program
int _program
Definition: midiimport.cpp:45
CAMidiImportEvent::_top
int _top
Definition: midiimport.cpp:43
pmidi_outs::bottom
int bottom
Definition: wrapper.h:49
CAStaff::synchronizeVoices
bool synchronizeVoices()
Definition: staff.cpp:346
CAMidiImport::_depth
QStack< CALilyPondDepth > _depth
Definition: midiimport.h:107
CAMidiImport::SYNTAX_DELIMITERS
static const QRegExp SYNTAX_DELIMITERS
Definition: midiimport.h:61
CAMidiImport::CATime::beat
int beat
Definition: midiimport.h:67
import.h
CADiatonicPitch::C
@ C
Definition: diatonicpitch.h:20
CAStaff::keySignatureRefs
QList< CAMusElement * > & keySignatureRefs()
Definition: staff.h:60
CAMidiImport::_actualClefIndex
int _actualClefIndex
Definition: midiimport.h:131
CAVoice::getOnePreviousByType
CAMusElement * getOnePreviousByType(CAMusElement::CAMusElementType type, int startTime)
Definition: voice.cpp:572