Updated MIDI CC handling not to count from 1 (#6774)
This commit is contained in:
committed by
GitHub
parent
0576f9daa6
commit
f0aa2862d7
@@ -127,6 +127,7 @@ private:
|
||||
void upgrade_mixerRename();
|
||||
void upgrade_bbTcoRename();
|
||||
void upgrade_sampleAndHold();
|
||||
void upgrade_midiCCIndexing();
|
||||
|
||||
// List of all upgrade methods
|
||||
static const std::vector<UpgradeMethod> UPGRADE_METHODS;
|
||||
|
||||
@@ -48,6 +48,7 @@ class MidiController : public Controller, public MidiEventProcessor
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static constexpr int NONE = -1;
|
||||
MidiController( Model * _parent );
|
||||
~MidiController() override = default;
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ const std::vector<DataFile::UpgradeMethod> DataFile::UPGRADE_METHODS = {
|
||||
&DataFile::upgrade_automationNodes , &DataFile::upgrade_extendedNoteRange,
|
||||
&DataFile::upgrade_defaultTripleOscillatorHQ,
|
||||
&DataFile::upgrade_mixerRename , &DataFile::upgrade_bbTcoRename,
|
||||
&DataFile::upgrade_sampleAndHold ,
|
||||
&DataFile::upgrade_sampleAndHold , &DataFile::upgrade_midiCCIndexing
|
||||
};
|
||||
|
||||
// Vector of all versions that have upgrade routines.
|
||||
@@ -1809,6 +1809,27 @@ void DataFile::upgrade_sampleAndHold()
|
||||
}
|
||||
}
|
||||
|
||||
//! Update MIDI CC indexes, so that they are counted from 0. Older releases of LMMS
|
||||
//! count the CCs from 1.
|
||||
void DataFile::upgrade_midiCCIndexing()
|
||||
{
|
||||
static constexpr std::array attributesToUpdate{"inputcontroller", "outputcontroller"};
|
||||
|
||||
QDomNodeList elements = elementsByTagName("Midicontroller");
|
||||
for(int i = 0; i < elements.length(); i++)
|
||||
{
|
||||
if (elements.item(i).isNull()) { continue; }
|
||||
auto element = elements.item(i).toElement();
|
||||
for (const char* attrName : attributesToUpdate)
|
||||
{
|
||||
if (element.hasAttribute(attrName))
|
||||
{
|
||||
int cc = element.attribute(attrName).toInt();
|
||||
element.setAttribute(attrName, cc - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DataFile::upgrade()
|
||||
{
|
||||
|
||||
@@ -72,21 +72,20 @@ void MidiController::updateName()
|
||||
|
||||
|
||||
|
||||
void MidiController::processInEvent( const MidiEvent& event, const TimePos& time, f_cnt_t offset )
|
||||
void MidiController::processInEvent(const MidiEvent& event, const TimePos& time, f_cnt_t offset)
|
||||
{
|
||||
unsigned char controllerNum;
|
||||
switch( event.type() )
|
||||
switch(event.type())
|
||||
{
|
||||
case MidiControlChange:
|
||||
controllerNum = event.controllerNumber();
|
||||
|
||||
if( m_midiPort.inputController() == controllerNum + 1 &&
|
||||
( m_midiPort.inputChannel() == event.channel() + 1 ||
|
||||
m_midiPort.inputChannel() == 0 ) )
|
||||
if (m_midiPort.inputController() == controllerNum &&
|
||||
(m_midiPort.inputChannel() == event.channel() + 1 || m_midiPort.inputChannel() == 0))
|
||||
{
|
||||
unsigned char val = event.controllerValue();
|
||||
m_previousValue = m_lastValue;
|
||||
m_lastValue = (float)( val ) / 127.0f;
|
||||
m_lastValue = static_cast<float>(val) / 127.0f;
|
||||
emit valueChanged();
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "MidiEventProcessor.h"
|
||||
#include "Note.h"
|
||||
#include "Song.h"
|
||||
#include "MidiController.h"
|
||||
|
||||
|
||||
namespace lmms
|
||||
@@ -54,8 +55,8 @@ MidiPort::MidiPort( const QString& name,
|
||||
m_mode( mode ),
|
||||
m_inputChannelModel( 0, 0, MidiChannelCount, this, tr( "Input channel" ) ),
|
||||
m_outputChannelModel( 1, 0, MidiChannelCount, this, tr( "Output channel" ) ),
|
||||
m_inputControllerModel( 0, 0, MidiControllerCount, this, tr( "Input controller" ) ),
|
||||
m_outputControllerModel( 0, 0, MidiControllerCount, this, tr( "Output controller" ) ),
|
||||
m_inputControllerModel(MidiController::NONE, MidiController::NONE, MidiControllerCount - 1, this, tr( "Input controller" )),
|
||||
m_outputControllerModel(MidiController::NONE, MidiController::NONE, MidiControllerCount - 1, this, tr( "Output controller" )),
|
||||
m_fixedInputVelocityModel( -1, -1, MidiMaxVelocity, this, tr( "Fixed input velocity" ) ),
|
||||
m_fixedOutputVelocityModel( -1, -1, MidiMaxVelocity, this, tr( "Fixed output velocity" ) ),
|
||||
m_fixedOutputNoteModel( -1, -1, MidiMaxKey, this, tr( "Fixed output note" ) ),
|
||||
@@ -436,4 +437,4 @@ void MidiPort::invalidateCilent()
|
||||
}
|
||||
|
||||
|
||||
} // namespace lmms
|
||||
} // namespace lmms
|
||||
|
||||
@@ -54,7 +54,7 @@ public:
|
||||
AutoDetectMidiController( Model* parent ) :
|
||||
MidiController( parent ),
|
||||
m_detectedMidiChannel( 0 ),
|
||||
m_detectedMidiController( 0 )
|
||||
m_detectedMidiController(NONE)
|
||||
{
|
||||
updateName();
|
||||
}
|
||||
@@ -69,7 +69,7 @@ public:
|
||||
( m_midiPort.inputChannel() == 0 || m_midiPort.inputChannel() == event.channel() + 1 ) )
|
||||
{
|
||||
m_detectedMidiChannel = event.channel() + 1;
|
||||
m_detectedMidiController = event.controllerNumber() + 1;
|
||||
m_detectedMidiController = event.controllerNumber();
|
||||
m_detectedMidiPort = Engine::audioEngine()->midiClient()->sourcePortName( event );
|
||||
|
||||
emit valueChanged();
|
||||
@@ -152,7 +152,7 @@ ControllerConnectionDialog::ControllerConnectionDialog( QWidget * _parent,
|
||||
|
||||
m_midiControllerSpinBox = new LcdSpinBox( 3, m_midiGroupBox,
|
||||
tr( "Input controller" ) );
|
||||
m_midiControllerSpinBox->addTextForValue( 0, "---" );
|
||||
m_midiControllerSpinBox->addTextForValue(MidiController::NONE, "---" );
|
||||
m_midiControllerSpinBox->setLabel( tr( "CONTROLLER" ) );
|
||||
m_midiControllerSpinBox->move( 68, 24 );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user