LMMS
Loading...
Searching...
No Matches
MidiPort.h
Go to the documentation of this file.
1/*
2 * MidiPort.h - abstraction of MIDI ports which are part of LMMS' MIDI
3 * sequencing system
4 *
5 * Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
6 *
7 * This file is part of LMMS - https://lmms.io
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public
11 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public
20 * License along with this program (see COPYING); if not, write to the
21 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 * Boston, MA 02110-1301 USA.
23 *
24 */
25
26#ifndef LMMS_MIDI_PORT_H
27#define LMMS_MIDI_PORT_H
28
29#include <QString>
30#include <QList>
31#include <QMap>
32
33#include "Midi.h"
34#include "TimePos.h"
35#include "AutomatableModel.h"
36
37namespace lmms
38{
39
40class MidiClient;
41class MidiEvent;
43
44namespace gui
45{
46
47class MidiPortMenu;
50
51}
52
53
54// class for abstraction of MIDI-port
55class MidiPort : public Model, public SerializingObject
56{
57 Q_OBJECT
58 mapPropertyFromModel(int,inputChannel,setInputChannel,m_inputChannelModel);
59 mapPropertyFromModel(int,outputChannel,setOutputChannel,m_outputChannelModel);
60 mapPropertyFromModel(int,inputController,setInputController,m_inputControllerModel);
61 mapPropertyFromModel(int,outputController,setOutputController,m_outputControllerModel);
62 mapPropertyFromModel(int,fixedInputVelocity,setFixedInputVelocity,m_fixedInputVelocityModel);
63 mapPropertyFromModel(int,fixedOutputVelocity,setFixedOutputVelocity,m_fixedOutputVelocityModel);
64 mapPropertyFromModel(int,fixedOutputNote,setFixedOutputNote,m_fixedOutputNoteModel);
65 mapPropertyFromModel(int,outputProgram,setOutputProgram,m_outputProgramModel);
66 mapPropertyFromModel(int,baseVelocity,setBaseVelocity,m_baseVelocityModel);
67 mapPropertyFromModel(bool,isReadable,setReadable,m_readableModel);
68 mapPropertyFromModel(bool,isWritable,setWritable,m_writableModel);
69public:
70 using Map = QMap<QString, bool>;
71
72 enum class Mode
73 {
74 Disabled, // don't route any MIDI-events (default)
75 Input, // from MIDI-client to MIDI-event-processor
76 Output, // from MIDI-event-processor to MIDI-client
77 Duplex // both directions
78 } ;
79
80 MidiPort( const QString& name,
81 MidiClient* client,
82 MidiEventProcessor* eventProcessor,
83 Model* parent = nullptr,
85 ~MidiPort() override;
86
87 void setName( const QString& name );
88
89 Mode mode() const
90 {
91 return m_mode;
92 }
93
94 void setMode( Mode mode );
95
96 bool isInputEnabled() const
97 {
98 return mode() == Mode::Input || mode() == Mode::Duplex;
99 }
100
101 bool isOutputEnabled() const
102 {
103 return mode() == Mode::Output || mode() == Mode::Duplex;
104 }
105
107 {
108 // There's a possibility of outputChannel being 0 ("--"), which is used to keep all
109 // midi channels when forwarding. In that case, realOutputChannel will return the
110 // default channel 1 (whose value is 0).
111 return outputChannel() ? outputChannel() - 1 : 0;
112 }
113
114 void processInEvent( const MidiEvent& event, const TimePos& time = TimePos() );
115 void processOutEvent( const MidiEvent& event, const TimePos& time = TimePos() );
116
117
118 void saveSettings( QDomDocument& doc, QDomElement& thisElement ) override;
119 void loadSettings( const QDomElement& thisElement ) override;
120
121 QString nodeName() const override
122 {
123 return "midiport";
124 }
125
126 void subscribeReadablePort( const QString& port, bool subscribe = true );
127 void subscribeWritablePort( const QString& port, bool subscribe = true );
128
129 const Map& readablePorts() const
130 {
131 return m_readablePorts;
132 }
133
134 const Map& writablePorts() const
135 {
136 return m_writablePorts;
137 }
138
139 void invalidateCilent();
140
143
144
145public slots:
146 void updateMidiPortMode();
147
148
149private slots:
150 void updateReadablePorts();
151 void updateWritablePorts();
152 void updateOutputProgram();
153
154
155private:
158
160
172
175
176
179
180
181signals:
185
186} ;
187
188using MidiPortList = QList<MidiPort*>;
189
190} // namespace lmms
191
192#endif // LMMS_MIDI_PORT_H
Definition AutomatableModel.h:497
Definition AutomatableModel.h:481
Definition MidiClient.h:46
Definition MidiEvent.h:37
Definition MidiEventProcessor.h:36
mapPropertyFromModel(int, inputChannel, setInputChannel, m_inputChannelModel)
mapPropertyFromModel(int, inputController, setInputController, m_inputControllerModel)
IntModel m_fixedOutputNoteModel
Definition MidiPort.h:167
IntModel m_fixedInputVelocityModel
Definition MidiPort.h:165
~MidiPort() override
Definition MidiPort.cpp:99
void updateWritablePorts()
Definition MidiPort.cpp:400
IntModel m_inputControllerModel
Definition MidiPort.h:163
void loadSettings(const QDomElement &thisElement) override
Definition MidiPort.cpp:240
IntModel m_fixedOutputVelocityModel
Definition MidiPort.h:166
IntModel m_inputChannelModel
Definition MidiPort.h:161
Map m_readablePorts
Definition MidiPort.h:173
mapPropertyFromModel(int, fixedOutputVelocity, setFixedOutputVelocity, m_fixedOutputVelocityModel)
int realOutputChannel() const
Definition MidiPort.h:106
IntModel m_outputProgramModel
Definition MidiPort.h:168
void invalidateCilent()
Definition MidiPort.cpp:434
MidiEventProcessor * m_midiEventProcessor
Definition MidiPort.h:157
mapPropertyFromModel(int, baseVelocity, setBaseVelocity, m_baseVelocityModel)
Mode m_mode
Definition MidiPort.h:159
IntModel m_baseVelocityModel
Definition MidiPort.h:169
void subscribeWritablePort(const QString &port, bool subscribe=true)
Definition MidiPort.cpp:311
const Map & readablePorts() const
Definition MidiPort.h:129
Mode
Definition MidiPort.h:73
@ Output
Definition MidiPort.h:76
@ Input
Definition MidiPort.h:75
@ Disabled
Definition MidiPort.h:74
@ Duplex
Definition MidiPort.h:77
void saveSettings(QDomDocument &doc, QDomElement &thisElement) override
Definition MidiPort.cpp:186
BoolModel m_readableModel
Definition MidiPort.h:170
void subscribeReadablePort(const QString &port, bool subscribe=true)
Definition MidiPort.cpp:295
mapPropertyFromModel(int, outputController, setOutputController, m_outputControllerModel)
void processInEvent(const MidiEvent &event, const TimePos &time=TimePos())
Definition MidiPort.cpp:130
void updateMidiPortMode()
Definition MidiPort.cpp:326
IntModel m_outputChannelModel
Definition MidiPort.h:162
void setName(const QString &name)
Definition MidiPort.cpp:112
BoolModel m_writableModel
Definition MidiPort.h:171
void modeChanged()
MidiClient * m_midiClient
Definition MidiPort.h:156
Mode mode() const
Definition MidiPort.h:89
void updateReadablePorts()
Definition MidiPort.cpp:374
MidiPort(const QString &name, MidiClient *client, MidiEventProcessor *eventProcessor, Model *parent=nullptr, Mode mode=Mode::Disabled)
Definition MidiPort.cpp:45
mapPropertyFromModel(bool, isWritable, setWritable, m_writableModel)
QString nodeName() const override
Definition MidiPort.h:121
gui::MidiPortMenu * m_writablePortsMenu
Definition MidiPort.h:142
mapPropertyFromModel(bool, isReadable, setReadable, m_readableModel)
const Map & writablePorts() const
Definition MidiPort.h:134
mapPropertyFromModel(int, fixedOutputNote, setFixedOutputNote, m_fixedOutputNoteModel)
bool isInputEnabled() const
Definition MidiPort.h:96
void updateOutputProgram()
Definition MidiPort.cpp:426
void writablePortsChanged()
mapPropertyFromModel(int, outputChannel, setOutputChannel, m_outputChannelModel)
mapPropertyFromModel(int, fixedInputVelocity, setFixedInputVelocity, m_fixedInputVelocityModel)
mapPropertyFromModel(int, outputProgram, setOutputProgram, m_outputProgramModel)
void processOutEvent(const MidiEvent &event, const TimePos &time=TimePos())
Definition MidiPort.cpp:159
void readablePortsChanged()
Map m_writablePorts
Definition MidiPort.h:174
void setMode(Mode mode)
Definition MidiPort.cpp:121
gui::MidiPortMenu * m_readablePortsMenu
Definition MidiPort.h:141
IntModel m_outputControllerModel
Definition MidiPort.h:164
QMap< QString, bool > Map
Definition MidiPort.h:70
bool isOutputEnabled() const
Definition MidiPort.h:101
Definition Model.h:37
Model(Model *parent, QString displayName=QString(), bool defaultConstructed=false)
Definition Model.cpp:30
SerializingObject()
Definition SerializingObject.cpp:32
Definition TimePos.h:68
Definition ControllerConnectionDialog.h:58
Definition InstrumentMidiIOView.h:49
Definition MidiPortMenu.h:40
static const char * name
Definition pugl.h:1582
static uintptr_t parent
Definition pugl.h:1644
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
QList< MidiPort * > MidiPortList
Definition MidiPort.h:188
png_structrp int mode
Definition png.h:1139