Simple implementation of MIDI CC 11 (Expression) as a live, MIDI only, multiplier for channel volume.

pull/830/head
Kevin 5 days ago
parent bba0c93f04
commit 76c4f32f9e
  1. 5
      src/mididevice.cpp
  2. 21
      src/minidexed.cpp
  3. 2
      src/minidexed.h

@ -42,6 +42,7 @@ LOGMODULE ("mididevice");
#define MIDI_CC_FOOT_PEDAL 4
#define MIDI_CC_VOLUME 7
#define MIDI_CC_PAN_POSITION 10
#define MIDI_CC_EXPRESSION 11
#define MIDI_CC_BANK_SELECT_LSB 32
#define MIDI_CC_BANK_SUSTAIN 64
#define MIDI_CC_RESONANCE 71
@ -398,6 +399,10 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign
m_pSynthesizer->SetPan (pMessage[2], nTG);
break;
case MIDI_CC_EXPRESSION:
m_pSynthesizer->SetExpression (pMessage[2], nTG);
break;
case MIDI_CC_BANK_SELECT_MSB:
m_pSynthesizer->BankSelectMSB (pMessage[2], nTG);
break;

@ -72,6 +72,7 @@ CMiniDexed::CMiniDexed (CConfig *pConfig, CInterruptSystem *pInterrupt,
m_nVoiceBankIDMSB[i] = 0;
m_nProgram[i] = 0;
m_nVolume[i] = 100;
m_nExpression[i] = 127;
m_nPan[i] = 64;
m_nMasterTune[i] = 0;
m_nCutoff[i] = 99;
@ -280,6 +281,7 @@ bool CMiniDexed::Initialize (void)
assert (m_pTG[i]);
SetVolume (100, i);
SetExpression (127, i);
ProgramChange (0, i);
m_pTG[i]->setTranspose (24);
@ -648,11 +650,28 @@ void CMiniDexed::SetVolume (unsigned nVolume, unsigned nTG)
m_nVolume[nTG] = nVolume;
assert (m_pTG[nTG]);
m_pTG[nTG]->setGain (nVolume / 127.0f);
m_pTG[nTG]->setGain ((m_nVolume[nTG] * m_nExpression[nTG]) / (127.0f * 127.0f));
m_UI.ParameterChanged ();
}
void CMiniDexed::SetExpression (unsigned nExpression, unsigned nTG)
{
nExpression=constrain((int)nExpression,0,127);
assert (nTG < CConfig::AllToneGenerators);
if (nTG >= m_nToneGenerators) return; // Not an active TG
m_nExpression[nTG] = nExpression;
assert (m_pTG[nTG]);
m_pTG[nTG]->setGain ((m_nVolume[nTG] * m_nExpression[nTG]) / (127.0f * 127.0f));
// Expression is a "live performance" parameter only set
// via MIDI and not via the UI.
//m_UI.ParameterChanged ();
}
void CMiniDexed::SetPan (unsigned nPan, unsigned nTG)
{
nPan=constrain((int)nPan,0,127);

@ -74,6 +74,7 @@ public:
void ProgramChange (unsigned nProgram, unsigned nTG);
void ProgramChangePerformance (unsigned nProgram);
void SetVolume (unsigned nVolume, unsigned nTG);
void SetExpression (unsigned nExpression, unsigned nTG);
void SetPan (unsigned nPan, unsigned nTG); // 0 .. 127
void SetMasterTune (int nMasterTune, unsigned nTG); // -99 .. 99
void SetCutoff (int nCutoff, unsigned nTG); // 0 .. 99
@ -261,6 +262,7 @@ private:
unsigned m_nVoiceBankIDMSBPerformance;
unsigned m_nProgram[CConfig::AllToneGenerators];
unsigned m_nVolume[CConfig::AllToneGenerators];
unsigned m_nExpression[CConfig::AllToneGenerators];
unsigned m_nPan[CConfig::AllToneGenerators];
int m_nMasterTune[CConfig::AllToneGenerators];
int m_nCutoff[CConfig::AllToneGenerators];

Loading…
Cancel
Save