drumstick 2.7.2
rtmidioutput.h
Go to the documentation of this file.
1/*
2 Drumstick MIDI realtime input-output
3 Copyright (C) 2009-2022 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
34namespace drumstick { namespace rt {
35
41const quint8 MIDI_STD_CHANNELS = 16;
42const quint8 MIDI_GM_STD_DRUM_CHANNEL = (10-1);
43const quint8 MIDI_CONTROL_MSB_BANK_SELECT = 0x00;
44const quint8 MIDI_CONTROL_MSB_MAIN_VOLUME = 0x07;
45const quint8 MIDI_CONTROL_LSB_BANK_SELECT = 0x20;
46const quint8 MIDI_CONTROL_REVERB_SEND = 0x5b;
47const quint8 MIDI_CONTROL_ALL_SOUNDS_OFF = 0x78;
48const quint8 MIDI_CONTROL_ALL_NOTES_OFF = 0x7b;
49const quint8 MIDI_CONTROL_RESET_CONTROLLERS = 0x79;
50
51const quint8 MIDI_STATUS_NOTEOFF = 0x80;
52const quint8 MIDI_STATUS_NOTEON = 0x90;
53const quint8 MIDI_STATUS_KEYPRESURE = 0xa0;
54const quint8 MIDI_STATUS_CONTROLCHANGE = 0xb0;
55const quint8 MIDI_STATUS_PROGRAMCHANGE = 0xc0;
56const quint8 MIDI_STATUS_CHANNELPRESSURE = 0xd0;
57const quint8 MIDI_STATUS_PITCHBEND = 0xe0;
58const quint8 MIDI_STATUS_SYSEX = 0xf0;
59const quint8 MIDI_STATUS_ENDSYSEX = 0xf7;
60const quint8 MIDI_STATUS_REALTIME = 0xf8;
61
62const quint8 MIDI_STATUS_MASK = 0xf0;
63const quint8 MIDI_CHANNEL_MASK = 0x0f;
64
65const quint8 MIDI_COMMON_QTRFRAME = 0xF1;
66const quint8 MIDI_COMMON_SONGPP = 0xF2;
67const quint8 MIDI_COMMON_SONGSELECT = 0xF3;
68const quint8 MIDI_COMMON_TUNEREQ = 0xF6;
69
70const quint8 MIDI_REALTIME_CLOCK = 0xF8;
71const quint8 MIDI_REALTIME_START = 0xFA;
72const quint8 MIDI_REALTIME_CONTINUE = 0xFB;
73const quint8 MIDI_REALTIME_STOP = 0xFC;
74const quint8 MIDI_REALTIME_SENSING = 0xFE;
75const quint8 MIDI_REALTIME_RESET = 0xFF;
76
82inline int MIDI_LSB(int x)
83{
84 return (x % 0x80);
85}
86
92inline 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
242Q_DECLARE_INTERFACE(drumstick::rt::MIDIOutput, "net.sourceforge.drumstick.rt.MIDIOutput/2.0")
243Q_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 QList< MIDIConnection > connections(bool advanced=false)=0
connections
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 void setPublicName(QString name)=0
setPublicName
const quint8 MIDI_STATUS_CONTROLCHANGE
MIDI status byte for CONTROL change messages.
Definition: rtmidioutput.h:54
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_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
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
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
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_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