Adds support for MIDI CC events inside LMMS (#5581)
This commit is contained in:
@@ -50,6 +50,7 @@ public:
|
||||
}
|
||||
|
||||
void setModel( Model* model, bool isOldModelValid = true ) override;
|
||||
void unsetModel() override;
|
||||
|
||||
template<typename T>
|
||||
inline T value() const
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
#include "GroupBox.h"
|
||||
#include "InstrumentFunctions.h"
|
||||
#include "InstrumentSoundShaping.h"
|
||||
#include "Midi.h"
|
||||
#include "MidiCCRackView.h"
|
||||
#include "MidiEventProcessor.h"
|
||||
#include "MidiPort.h"
|
||||
#include "NotePlayHandle.h"
|
||||
@@ -228,7 +230,6 @@ signals:
|
||||
void newNote();
|
||||
void endNote();
|
||||
|
||||
|
||||
protected:
|
||||
QString nodeName() const override
|
||||
{
|
||||
@@ -247,6 +248,8 @@ protected slots:
|
||||
|
||||
|
||||
private:
|
||||
void processCCEvent(int controller);
|
||||
|
||||
MidiPort m_midiPort;
|
||||
|
||||
NotePlayHandle* m_notes[NumKeys];
|
||||
@@ -286,11 +289,14 @@ private:
|
||||
|
||||
Piano m_piano;
|
||||
|
||||
std::unique_ptr<BoolModel> m_midiCCEnable;
|
||||
std::unique_ptr<FloatModel> m_midiCCModel[MidiControllerCount];
|
||||
|
||||
friend class InstrumentTrackView;
|
||||
friend class InstrumentTrackWindow;
|
||||
friend class NotePlayHandle;
|
||||
friend class InstrumentMiscView;
|
||||
friend class MidiCCRackView;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -334,6 +340,7 @@ protected:
|
||||
|
||||
private slots:
|
||||
void toggleInstrumentWindow( bool _on );
|
||||
void toggleMidiCCRack();
|
||||
void activityIndicatorPressed();
|
||||
void activityIndicatorReleased();
|
||||
|
||||
@@ -361,6 +368,8 @@ private:
|
||||
QAction * m_midiInputAction;
|
||||
QAction * m_midiOutputAction;
|
||||
|
||||
std::unique_ptr<MidiCCRackView> m_midiCCRackView;
|
||||
|
||||
QPoint m_lastPos;
|
||||
|
||||
FadeButton * getActivityIndicator() override
|
||||
|
||||
40
include/MidiCCRackView.h
Normal file
40
include/MidiCCRackView.h
Normal file
@@ -0,0 +1,40 @@
|
||||
#ifndef MIDI_CC_RACK_VIEW_H
|
||||
#define MIDI_CC_RACK_VIEW_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
#include "GroupBox.h"
|
||||
#include "Knob.h"
|
||||
#include "Midi.h"
|
||||
#include "SerializingObject.h"
|
||||
|
||||
class InstrumentTrack;
|
||||
|
||||
class MidiCCRackView : public QWidget, public SerializingObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MidiCCRackView(InstrumentTrack * track);
|
||||
~MidiCCRackView() override;
|
||||
|
||||
void saveSettings(QDomDocument & doc, QDomElement & parent) override;
|
||||
void loadSettings(const QDomElement &) override;
|
||||
|
||||
inline QString nodeName() const override
|
||||
{
|
||||
return "MidiCCRackView";
|
||||
}
|
||||
|
||||
private slots:
|
||||
void renameWindow();
|
||||
|
||||
private:
|
||||
InstrumentTrack *m_track;
|
||||
|
||||
GroupBox *m_midiCCGroupBox; // MIDI CC GroupBox (used to enable disable MIDI CC)
|
||||
|
||||
Knob *m_controllerKnob[MidiControllerCount]; // Holds the knob widgets for each controller
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -33,27 +33,30 @@
|
||||
class MidiEvent
|
||||
{
|
||||
public:
|
||||
MidiEvent( MidiEventTypes type = MidiActiveSensing,
|
||||
MidiEvent(MidiEventTypes type = MidiActiveSensing,
|
||||
int8_t channel = 0,
|
||||
int16_t param1 = 0,
|
||||
int16_t param2 = 0,
|
||||
const void* sourcePort = NULL ) :
|
||||
const void* sourcePort = nullptr,
|
||||
bool ignoreOnExport = true) :
|
||||
m_type( type ),
|
||||
m_metaEvent( MidiMetaInvalid ),
|
||||
m_channel( channel ),
|
||||
m_sysExData( NULL ),
|
||||
m_sourcePort( sourcePort )
|
||||
m_sourcePort(sourcePort),
|
||||
m_ignoreOnExport(ignoreOnExport)
|
||||
{
|
||||
m_data.m_param[0] = param1;
|
||||
m_data.m_param[1] = param2;
|
||||
}
|
||||
|
||||
MidiEvent( MidiEventTypes type, const char* sysExData, int dataLen ) :
|
||||
MidiEvent(MidiEventTypes type, const char* sysExData, int dataLen, bool ignoreOnExport = true) :
|
||||
m_type( type ),
|
||||
m_metaEvent( MidiMetaInvalid ),
|
||||
m_channel( 0 ),
|
||||
m_sysExData( sysExData ),
|
||||
m_sourcePort( NULL )
|
||||
m_sourcePort(nullptr),
|
||||
m_ignoreOnExport(ignoreOnExport)
|
||||
{
|
||||
m_data.m_sysExDataLen = dataLen;
|
||||
}
|
||||
@@ -64,7 +67,8 @@ public:
|
||||
m_channel( other.m_channel ),
|
||||
m_data( other.m_data ),
|
||||
m_sysExData( other.m_sysExData ),
|
||||
m_sourcePort( other.m_sourcePort )
|
||||
m_sourcePort(other.m_sourcePort),
|
||||
m_ignoreOnExport(other.m_ignoreOnExport)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -190,6 +194,16 @@ public:
|
||||
setParam( 0, pitchBend );
|
||||
}
|
||||
|
||||
bool ignoreOnExport() const
|
||||
{
|
||||
return m_ignoreOnExport;
|
||||
}
|
||||
|
||||
void setIgnoreOnExport(bool value)
|
||||
{
|
||||
m_ignoreOnExport = value;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
MidiEventTypes m_type; // MIDI event type
|
||||
@@ -205,6 +219,9 @@ private:
|
||||
const char* m_sysExData;
|
||||
const void* m_sourcePort;
|
||||
|
||||
// This helps us ignore MIDI events that shouldn't be processed
|
||||
// during a project export, like physical controller events.
|
||||
bool m_ignoreOnExport;
|
||||
} ;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -36,6 +36,7 @@ public:
|
||||
virtual ~ModelView();
|
||||
|
||||
virtual void setModel( Model* model, bool isOldModelValid = true );
|
||||
virtual void unsetModel();
|
||||
|
||||
Model* model()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user