Canorus  0.0
mididevice.h
Go to the documentation of this file.
1 
8 #ifndef MIDIDEVICE_H_
9 #define MIDIDEVICE_H_
10 
11 #include <QStringList>
12 #include <QVector>
13 #include <QMap>
14 #include <QString>
15 #include <QObject>
16 
17 #include "score/diatonicpitch.h"
18 
19 class CASheet;
20 class CADiatonicKey;
21 
22 class CAMidiDevice : public QObject {
23 #ifndef SWIG
24  Q_OBJECT
25 #endif
26 
27  friend void rtMidiInCallback( double deltatime, std::vector< unsigned char > *message, void *userData );
28 public:
32  };
33 
34  CAMidiDevice();
35 
36  enum midiCommands {
37  Meta_Text = 0x01,
41  Meta_Lyric = 0x05,
42  Meta_Marker = 0x06,
43  Meta_CuePoint = 0x07,
44  Meta_Tempo = 0x51, // len=03 tt tt tt microseconds per midi quarter note
45  Meta_SMPTEOffs = 0x54, // len=05 hr mn se fr ff SMPTE Offset
46  Meta_Timesig = 0x58,
47  Meta_Keysig = 0x59,
49 
52  Midi_Ctl_Pan = 0x0a,
56  // Events with midi channel on the low nibble:
57  Midi_Note_Off = 0x80, // 3 byte
58  Midi_Note_On = 0x90,
59  Midi_Prog_Change = 0xc0, // 2 byte
60  Midi_Control_Chg = 0xb0 // 3 byte
61  };
62 
63 
64  static QStringList gmInstrumentList() { return CAMidiDevice::GM_INSTRUMENTS; }
65 
66  static QString instrumentName( int midiProgram );
67  static QStringList instrumentNames();
68 
69  static unsigned char freeMidiChannel( CASheet* );
70 
71  virtual ~CAMidiDevice() {};
72 
74 
75  bool isRealTime() { return _realTime; }
76  virtual QMap<int, QString> getOutputPorts() = 0;
77  virtual QMap<int, QString> getInputPorts() = 0;
78 
79  virtual bool openOutputPort(int port) = 0; // return true on success, false otherwise
80  virtual bool openInputPort(int port) = 0; // return true on success, false otherwise
81  virtual void closeOutputPort() = 0;
82  virtual void closeInputPort() = 0;
83  virtual void send(QVector<unsigned char> message, int time) = 0; // message and absolute canorus time (independent of tempo)
84  virtual void sendMetaEvent(int time, int event, int a, int b, int c ) = 0; // absolute time of the meta event which is meant only for midi file export
85 
86 #ifndef SWIG
87 signals:
88  void midiInEvent( QVector< unsigned char > message );
89 #endif
90 
91 protected:
92  void setRealTime( bool r ) { _realTime = r; }
95  bool _realTime; // is the device
96 
97 private:
98  static QStringList GM_INSTRUMENTS;
99 };
100 
101 #endif /* MIDIDEVICE_H_ */
QObject
CAMidiDevice::Meta_CuePoint
@ Meta_CuePoint
Definition: mididevice.h:43
CAMidiDevice::midiInEvent
void midiInEvent(QVector< unsigned char > message)
CAMidiDevice::openOutputPort
virtual bool openOutputPort(int port)=0
CAMidiDevice::_realTime
bool _realTime
Definition: mididevice.h:95
CAMidiDevice::isRealTime
bool isRealTime()
Definition: mididevice.h:75
CAMidiDevice::instrumentNames
static QStringList instrumentNames()
Definition: mididevice.cpp:184
CAMidiDevice::midiCommands
midiCommands
Definition: mididevice.h:36
CAMidiDevice::Meta_Timesig
@ Meta_Timesig
Definition: mididevice.h:46
CAMidiDevice::MidiExportDevice
@ MidiExportDevice
Definition: mididevice.h:31
CAMidiDevice::closeOutputPort
virtual void closeOutputPort()=0
CASheet::voiceList
QList< CAVoice * > voiceList()
Definition: sheet.cpp:148
CAMidiDevice::~CAMidiDevice
virtual ~CAMidiDevice()
Definition: mididevice.h:71
diatonicpitch.h
CAMidiDevice::Meta_SMPTEOffs
@ Meta_SMPTEOffs
Definition: mididevice.h:45
CAMidiDevice::_midiDeviceType
CAMidiDeviceType _midiDeviceType
Definition: mididevice.h:94
CAMidiDevice::Meta_Copyright
@ Meta_Copyright
Definition: mididevice.h:38
CAMidiDevice::freeMidiChannel
static unsigned char freeMidiChannel(CASheet *)
Definition: mididevice.cpp:199
CAMidiDevice::Meta_Tempo
@ Meta_Tempo
Definition: mididevice.h:44
CAMidiDevice::CAMidiDeviceType
CAMidiDeviceType
Definition: mididevice.h:29
CAMidiDevice::getInputPorts
virtual QMap< int, QString > getInputPorts()=0
CAMidiDevice::Midi_Ctl_Reverb
@ Midi_Ctl_Reverb
Definition: mididevice.h:50
CAMidiDevice::sendMetaEvent
virtual void sendMetaEvent(int time, int event, int a, int b, int c)=0
CADiatonicKey
Musical key.
Definition: diatonickey.h:15
CAMidiDevice::Midi_Ctl_Pan
@ Midi_Ctl_Pan
Definition: mididevice.h:52
CAMidiDevice::closeInputPort
virtual void closeInputPort()=0
CAMidiDevice::Midi_Control_Chg
@ Midi_Control_Chg
Definition: mididevice.h:60
CAMidiDevice::Meta_Marker
@ Meta_Marker
Definition: mididevice.h:42
CAMidiDevice::Midi_Note_On
@ Midi_Note_On
Definition: mididevice.h:58
CAMidiDevice::CAMidiDevice
CAMidiDevice()
Definition: mididevice.cpp:165
CAMidiDevice::Midi_Note_Off
@ Midi_Note_Off
Definition: mididevice.h:57
CAMidiDevice::Meta_Track_End
@ Meta_Track_End
Definition: mididevice.h:48
CAMidiDevice::Meta_Keysig
@ Meta_Keysig
Definition: mididevice.h:47
CAMidiDevice::Midi_Ctl_Chorus
@ Midi_Ctl_Chorus
Definition: mididevice.h:51
CAMidiDevice::Meta_InstrName
@ Meta_InstrName
Definition: mididevice.h:40
CAMidiDevice::Meta_Lyric
@ Meta_Lyric
Definition: mididevice.h:41
CAMidiDevice
Canorus<->Midi bridge.
Definition: mididevice.h:22
diatonickey.h
CAMidiDevice::Midi_Ctl_Sustain
@ Midi_Ctl_Sustain
Definition: mididevice.h:54
CAMidiDevice::Meta_SeqTrkName
@ Meta_SeqTrkName
Definition: mididevice.h:39
CAMidiDevice::RtMidiDevice
@ RtMidiDevice
Definition: mididevice.h:30
CAMidiDevice::gmInstrumentList
static QStringList gmInstrumentList()
Definition: mididevice.h:64
CAMidiDevice::Midi_Ctl_Volume
@ Midi_Ctl_Volume
Definition: mididevice.h:53
CAMidiDevice::instrumentName
static QString instrumentName(int midiProgram)
Definition: mididevice.cpp:175
sheet.h
CAMidiDevice::setRealTime
void setRealTime(bool r)
Definition: mididevice.h:92
CAMidiDevice::GM_INSTRUMENTS
static QStringList GM_INSTRUMENTS
Definition: mididevice.h:98
CAMidiDevice::Meta_Text
@ Meta_Text
Definition: mididevice.h:37
CAMidiDevice::midiDeviceType
CAMidiDeviceType midiDeviceType()
Definition: mididevice.h:73
mididevice.h
CAMidiDevice::Midi_Prog_Change
@ Midi_Prog_Change
Definition: mididevice.h:59
voice.h
CAMidiDevice::rtMidiInCallback
friend void rtMidiInCallback(double deltatime, std::vector< unsigned char > *message, void *userData)
Definition: rtmididevice.cpp:100
CASheet
Represents a single sheet of paper in the document.
Definition: sheet.h:22
CAMidiDevice::setMidiDeviceType
void setMidiDeviceType(CAMidiDeviceType t)
Definition: mididevice.h:93
CAMidiDevice::send
virtual void send(QVector< unsigned char > message, int time)=0
CAMidiDevice::openInputPort
virtual bool openInputPort(int port)=0
CAMidiDevice::getOutputPorts
virtual QMap< int, QString > getOutputPorts()=0
CAMidiDevice::Midi_Ctl_Event
@ Midi_Ctl_Event
Definition: mididevice.h:55