Adds support for MIDI CC events inside LMMS (#5581)

This commit is contained in:
IanCaio
2020-12-01 22:27:37 -03:00
committed by GitHub
parent 4f74151f00
commit 3c36365afa
12 changed files with 336 additions and 11 deletions

View File

@@ -50,6 +50,7 @@ public:
}
void setModel( Model* model, bool isOldModelValid = true ) override;
void unsetModel() override;
template<typename T>
inline T value() const

View File

@@ -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
View 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

View File

@@ -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

View File

@@ -36,6 +36,7 @@ public:
virtual ~ModelView();
virtual void setModel( Model* model, bool isOldModelValid = true );
virtual void unsetModel();
Model* model()
{