drumstick  2.0.0
rtmidioutput.h
Go to the documentation of this file.
1 /*
2  Drumstick MIDI realtime input-output
3  Copyright (C) 2009-2020 Pedro Lopez-Cabanillas <plcl@users.sf.net>
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 #ifndef MIDIOUTPUT_H
20 #define MIDIOUTPUT_H
21 
22 #include <QObject>
23 #include <QString>
24 #include <QStringList>
25 #include <QtPlugin>
26 #include <QSettings>
27 #include "macros.h"
28 
34 namespace drumstick { namespace rt {
35 
41 const quint8 MIDI_STD_CHANNELS = 16;
42 const quint8 MIDI_GM_STD_DRUM_CHANNEL = (10-1);
43 const quint8 MIDI_CONTROL_MSB_BANK_SELECT = 0x00;
44 const quint8 MIDI_CONTROL_MSB_MAIN_VOLUME = 0x07;
45 const quint8 MIDI_CONTROL_LSB_BANK_SELECT = 0x20;
46 const quint8 MIDI_CONTROL_REVERB_SEND = 0x5b;
47 const quint8 MIDI_CONTROL_ALL_SOUNDS_OFF = 0x78;
48 const quint8 MIDI_CONTROL_ALL_NOTES_OFF = 0x7b;
49 const quint8 MIDI_CONTROL_RESET_CONTROLLERS = 0x79;
50 
51 const quint8 MIDI_STATUS_NOTEOFF = 0x80;
52 const quint8 MIDI_STATUS_NOTEON = 0x90;
53 const quint8 MIDI_STATUS_KEYPRESURE = 0xa0;
54 const quint8 MIDI_STATUS_CONTROLCHANGE = 0xb0;
55 const quint8 MIDI_STATUS_PROGRAMCHANGE = 0xc0;
56 const quint8 MIDI_STATUS_CHANNELPRESSURE = 0xd0;
57 const quint8 MIDI_STATUS_PITCHBEND = 0xe0;
58 const quint8 MIDI_STATUS_SYSEX = 0xf0;
59 const quint8 MIDI_STATUS_ENDSYSEX = 0xf7;
60 const quint8 MIDI_STATUS_REALTIME = 0xf8;
61 
62 const quint8 MIDI_STATUS_MASK = 0xf0;
63 const quint8 MIDI_CHANNEL_MASK = 0x0f;
64 
65 const quint8 MIDI_COMMON_QTRFRAME = 0xF1;
66 const quint8 MIDI_COMMON_SONGPP = 0xF2;
67 const quint8 MIDI_COMMON_SONGSELECT = 0xF3;
68 const quint8 MIDI_COMMON_TUNEREQ = 0xF6;
69 
70 const quint8 MIDI_REALTIME_CLOCK = 0xF8;
71 const quint8 MIDI_REALTIME_START = 0xFA;
72 const quint8 MIDI_REALTIME_CONTINUE = 0xFB;
73 const quint8 MIDI_REALTIME_STOP = 0xFC;
74 const quint8 MIDI_REALTIME_SENSING = 0xFE;
75 const quint8 MIDI_REALTIME_RESET = 0xFF;
76 
82 inline int MIDI_LSB(int x)
83 {
84  return (x % 0x80);
85 }
86 
92 inline int MIDI_MSB(int x)
93 {
94  return (x / 0x80);
95 }
96 
106  typedef QPair<QString,QVariant> MIDIConnection;
107 
111  class DRUMSTICK_EXPORT MIDIOutput : public QObject
112  {
113  Q_OBJECT
114 
115  public:
120  explicit MIDIOutput(QObject *parent = nullptr) : QObject(parent) {}
124  virtual ~MIDIOutput() = default;
129  virtual void initialize(QSettings* settings) = 0;
134  virtual QString backendName() = 0;
139  virtual QString publicName() = 0;
144  virtual void setPublicName(QString name) = 0;
150  virtual QList<MIDIConnection> connections(bool advanced = false) = 0;
155  virtual void setExcludedConnections(QStringList conns) = 0;
160  virtual void open(const MIDIConnection& conn) = 0;
164  virtual void close() = 0;
170 
171  public Q_SLOTS:
178  virtual void sendNoteOff(int chan, int note, int vel) = 0;
179 
186  virtual void sendNoteOn(int chan, int note, int vel) = 0;
187 
194  virtual void sendKeyPressure(int chan, int note, int value) = 0;
195 
202  virtual void sendController(int chan, int control, int value) = 0;
203 
209  virtual void sendProgram(int chan, int program) = 0;
210 
216  virtual void sendChannelPressure(int chan, int value) = 0;
217 
223  virtual void sendPitchBend(int chan, int value) = 0;
224 
229  virtual void sendSysex(const QByteArray& data) = 0;
230 
235  virtual void sendSystemMsg(const int status) = 0;
236  };
237 
240 }} // namespace drumstick::rt
241 
242 Q_DECLARE_INTERFACE(drumstick::rt::MIDIOutput, "net.sourceforge.drumstick.rt.MIDIOutput/2.0")
243 Q_DECLARE_METATYPE(drumstick::rt::MIDIConnection);
244 
245 #endif /* MIDIOUTPUT_H */
The QObject class is the base class of all Qt objects.
The QSettings class provides persistent platform-independent application settings.
MIDI OUT interface.
Definition: rtmidioutput.h:112
virtual ~MIDIOutput()=default
~MIDIOutput destructor
virtual void setExcludedConnections(QStringList conns)=0
setExcludedConnections
MIDIOutput(QObject *parent=nullptr)
MIDIOutput constructor.
Definition: rtmidioutput.h:120
virtual void initialize(QSettings *settings)=0
initialize
virtual QString backendName()=0
backendName
virtual MIDIConnection currentConnection()=0
currentConnection
virtual void sendPitchBend(int chan, int value)=0
sendPitchBend 0xE
virtual void sendNoteOn(int chan, int note, int vel)=0
sendNoteOn 0x9
virtual void sendChannelPressure(int chan, int value)=0
sendChannelPressure 0xD
virtual void sendKeyPressure(int chan, int note, int value)=0
sendKeyPressure 0xA
virtual QString publicName()=0
publicName
virtual void sendController(int chan, int control, int value)=0
sendController 0xB
virtual void open(const MIDIConnection &conn)=0
open the MIDI port by name
virtual void sendProgram(int chan, int program)=0
sendProgram 0xC
virtual void sendNoteOff(int chan, int note, int vel)=0
sendNoteOff 0x8
virtual void close()=0
close the MIDI port
virtual void sendSystemMsg(const int status)=0
sendSystemMsg
virtual void sendSysex(const QByteArray &data)=0
sendSysex
virtual QList< MIDIConnection > connections(bool advanced=false)=0
connections
virtual void setPublicName(QString name)=0
setPublicName
const quint8 MIDI_STATUS_CONTROLCHANGE
MIDI status byte for CONTROL change messages.
Definition: rtmidioutput.h:54
const quint8 MIDI_COMMON_SONGPP
MIDI Song Position status message.
Definition: rtmidioutput.h:66
const quint8 MIDI_GM_STD_DRUM_CHANNEL
Number of the GM percussion channel.
Definition: rtmidioutput.h:42
const quint8 MIDI_COMMON_SONGSELECT
MIDI Song Select status message.
Definition: rtmidioutput.h:67
const quint8 MIDI_CONTROL_ALL_SOUNDS_OFF
MIDI Controller number for All sounds off.
Definition: rtmidioutput.h:47
const quint8 MIDI_REALTIME_CONTINUE
MIDI Continue status message.
Definition: rtmidioutput.h:72
QPair< QString, QVariant > MIDIConnection
MIDIConnection represents a connection identifier.
Definition: rtmidioutput.h:106
const quint8 MIDI_REALTIME_RESET
MIDI Reset status message.
Definition: rtmidioutput.h:75
int MIDI_LSB(int x)
MIDI_LSB is a function to extract the least significative byte of a MIDI value.
Definition: rtmidioutput.h:82
const quint8 MIDI_STATUS_PROGRAMCHANGE
MIDI status byte for PROGRAM change messages.
Definition: rtmidioutput.h:55
const quint8 MIDI_STATUS_SYSEX
MIDI status byte for System Exclusive START messages.
Definition: rtmidioutput.h:58
const quint8 MIDI_STATUS_KEYPRESURE
MIDI status byte for KEY pressure messages.
Definition: rtmidioutput.h:53
const quint8 MIDI_STATUS_NOTEON
MIDI status byte for NOTE ON messages.
Definition: rtmidioutput.h:52
const quint8 MIDI_STD_CHANNELS
Standard number of MIDI channels.
Definition: rtmidioutput.h:41
int MIDI_MSB(int x)
MIDI_MSB is a function to extract the most significative byte of a MIDI value.
Definition: rtmidioutput.h:92
const quint8 MIDI_CONTROL_LSB_BANK_SELECT
MIDI Controller number for LSB Bank number.
Definition: rtmidioutput.h:45
const quint8 MIDI_REALTIME_CLOCK
MIDI Clock status message.
Definition: rtmidioutput.h:70
const quint8 MIDI_CONTROL_MSB_MAIN_VOLUME
MIDI Controller number for MSB volume.
Definition: rtmidioutput.h:44
const quint8 MIDI_STATUS_NOTEOFF
MIDI status byte for NOTE OFF messages.
Definition: rtmidioutput.h:51
const quint8 MIDI_COMMON_TUNEREQ
MIDI Tune Request status message.
Definition: rtmidioutput.h:68
const quint8 MIDI_CONTROL_RESET_CONTROLLERS
MIDI Controller number for Reset all controllers.
Definition: rtmidioutput.h:49
const quint8 MIDI_COMMON_QTRFRAME
MIDI Quarter frame status message.
Definition: rtmidioutput.h:65
const quint8 MIDI_STATUS_CHANNELPRESSURE
MIDI status byte for CHANNEL PRESSURE messages.
Definition: rtmidioutput.h:56
const quint8 MIDI_CONTROL_REVERB_SEND
MIDI Controller number for Reverb send.
Definition: rtmidioutput.h:46
const quint8 MIDI_STATUS_REALTIME
Minimum value for MIDI Realtime messages status.
Definition: rtmidioutput.h:60
const quint8 MIDI_CHANNEL_MASK
Mask to extract the MIDI channel byte from a MIDI message.
Definition: rtmidioutput.h:63
const quint8 MIDI_STATUS_PITCHBEND
MIDI status byte for PITCH bend messages.
Definition: rtmidioutput.h:57
const quint8 MIDI_CONTROL_ALL_NOTES_OFF
MIDI Controller number for All notes off.
Definition: rtmidioutput.h:48
const quint8 MIDI_CONTROL_MSB_BANK_SELECT
MIDI Controller number for MSB Bank number.
Definition: rtmidioutput.h:43
const quint8 MIDI_REALTIME_STOP
MIDI Stop status message.
Definition: rtmidioutput.h:73
const quint8 MIDI_REALTIME_SENSING
MIDI Active Sensing status message.
Definition: rtmidioutput.h:74
const quint8 MIDI_STATUS_ENDSYSEX
MIDI status byte for System Exclusive END messages.
Definition: rtmidioutput.h:59
const quint8 MIDI_STATUS_MASK
Mask to extract the MIDI status byte from a MIDI message.
Definition: rtmidioutput.h:62
const quint8 MIDI_REALTIME_START
MIDI Start status message.
Definition: rtmidioutput.h:71
Drumstick visibility macros.
Drumstick common.
Definition: alsaclient.cpp:68