reducing changes due to reformatting and correction of wiki documentation

pull/499/head
Vincent GAUCHE 1 year ago
parent 253d36d89a
commit 781eba6df5
  1. 459
      src/mididevice.cpp
  2. 6
      src/performance.ini
  3. 187
      src/uimenu.cpp
  4. BIN
      wiki-update/Delay--Channel.png
  5. BIN
      wiki-update/mixing-console-overview.png

@ -29,7 +29,7 @@
#include <assert.h> #include <assert.h>
#include "userinterface.h" #include "userinterface.h"
LOGMODULE("mididevice"); LOGMODULE ("mididevice");
#define MIDI_NOTE_OFF 0b1000 #define MIDI_NOTE_OFF 0b1000
#define MIDI_NOTE_ON 0b1001 #define MIDI_NOTE_ON 0b1001
@ -47,15 +47,18 @@ LOGMODULE("mididevice");
#define MIDI_CC_RESONANCE 71 #define MIDI_CC_RESONANCE 71
#define MIDI_CC_FREQUENCY_CUTOFF 74 #define MIDI_CC_FREQUENCY_CUTOFF 74
#define MIDI_CC_REVERB_LEVEL 91 #define MIDI_CC_REVERB_LEVEL 91
#define MIDI_CC_ORBITONE_LEVEL 92 // added with mixing console
#define MIDI_CC_CHORUS_LEVEL 93 // added with mixing console
#define MIDI_CC_DETUNE_LEVEL 94 #define MIDI_CC_DETUNE_LEVEL 94
#define MIDI_CC_PHASER_LEVEL 95 // added with mixing console
#define MIDI_CC_ALL_SOUND_OFF 120 #define MIDI_CC_ALL_SOUND_OFF 120
#define MIDI_CC_ALL_NOTES_OFF 123 #define MIDI_CC_ALL_NOTES_OFF 123
#define MIDI_PROGRAM_CHANGE 0b1100 #define MIDI_PROGRAM_CHANGE 0b1100
#define MIDI_PITCH_BEND 0b1110 #define MIDI_PITCH_BEND 0b1110
#if defined(MIXING_CONSOLE_ENABLE)
#define MIDI_CC_ORBITONE_LEVEL 92 // added with mixing console
#define MIDI_CC_CHORUS_LEVEL 93 // added with mixing console
#define MIDI_CC_PHASER_LEVEL 95 // added with mixing console
#endif
#define MIDI_SYSTEM_EXCLUSIVE_BEGIN 0xF0 #define MIDI_SYSTEM_EXCLUSIVE_BEGIN 0xF0
#define MIDI_SYSTEM_EXCLUSIVE_END 0xF7 #define MIDI_SYSTEM_EXCLUSIVE_END 0xF7
#define MIDI_TIMING_CLOCK 0xF8 #define MIDI_TIMING_CLOCK 0xF8
@ -74,93 +77,94 @@ CMIDIDevice::CMIDIDevice(CMiniDexed *pSynthesizer, CConfig *pConfig, CUserInterf
} }
} }
CMIDIDevice::~CMIDIDevice(void) CMIDIDevice::~CMIDIDevice (void)
{ {
m_pSynthesizer = 0; m_pSynthesizer = 0;
} }
void CMIDIDevice::SetChannel(u8 ucChannel, unsigned nTG) void CMIDIDevice::SetChannel (u8 ucChannel, unsigned nTG)
{ {
assert(nTG < CConfig::ToneGenerators); assert (nTG < CConfig::ToneGenerators);
m_ChannelMap[nTG] = ucChannel; m_ChannelMap[nTG] = ucChannel;
} }
u8 CMIDIDevice::GetChannel(unsigned nTG) const u8 CMIDIDevice::GetChannel (unsigned nTG) const
{ {
assert(nTG < CConfig::ToneGenerators); assert (nTG < CConfig::ToneGenerators);
return m_ChannelMap[nTG]; return m_ChannelMap[nTG];
} }
void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigned nCable) void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsigned nCable)
{ {
// The packet contents are just normal MIDI data - see // The packet contents are just normal MIDI data - see
// https://www.midi.org/specifications/item/table-1-summary-of-midi-message // https://www.midi.org/specifications/item/table-1-summary-of-midi-message
if (m_pConfig->GetMIDIDumpEnabled()) if (m_pConfig->GetMIDIDumpEnabled ())
{ {
switch (nLength) switch (nLength)
{ {
case 1: case 1:
if (pMessage[0] != MIDI_TIMING_CLOCK && pMessage[0] != MIDI_ACTIVE_SENSING) if ( pMessage[0] != MIDI_TIMING_CLOCK
&& pMessage[0] != MIDI_ACTIVE_SENSING)
{ {
printf("MIDI%u: %02X\n", nCable, (unsigned)pMessage[0]); printf ("MIDI%u: %02X\n", nCable, (unsigned) pMessage[0]);
} }
break; break;
case 2: case 2:
printf("MIDI%u: %02X %02X\n", nCable, printf ("MIDI%u: %02X %02X\n", nCable,
(unsigned)pMessage[0], (unsigned)pMessage[1]); (unsigned) pMessage[0], (unsigned) pMessage[1]);
break; break;
case 3: case 3:
printf("MIDI%u: %02X %02X %02X\n", nCable, printf ("MIDI%u: %02X %02X %02X\n", nCable,
(unsigned)pMessage[0], (unsigned)pMessage[1], (unsigned) pMessage[0], (unsigned) pMessage[1],
(unsigned)pMessage[2]); (unsigned) pMessage[2]);
break; break;
default: default:
switch (pMessage[0]) switch(pMessage[0])
{ {
case MIDI_SYSTEM_EXCLUSIVE_BEGIN: case MIDI_SYSTEM_EXCLUSIVE_BEGIN:
printf("MIDI%u: SysEx data length: [%d]:", nCable, uint16_t(nLength)); printf("MIDI%u: SysEx data length: [%d]:",nCable, uint16_t(nLength));
for (uint16_t i = 0; i < nLength; i++) for (uint16_t i = 0; i < nLength; i++)
{ {
if ((i % 16) == 0) if((i % 16) == 0)
printf("\n%04d:", i); printf("\n%04d:",i);
printf(" 0x%02x", pMessage[i]); printf(" 0x%02x",pMessage[i]);
} }
printf("\n"); printf("\n");
break; break;
default: default:
printf("MIDI%u: Unhandled MIDI event type %0x02x\n", nCable, pMessage[0]); printf("MIDI%u: Unhandled MIDI event type %0x02x\n",nCable,pMessage[0]);
} }
break; break;
} }
} }
// Only for debugging: // Only for debugging:
/* /*
if(pMessage[0]==MIDI_SYSTEM_EXCLUSIVE_BEGIN) if(pMessage[0]==MIDI_SYSTEM_EXCLUSIVE_BEGIN)
{
printf("MIDI%u: SysEx data length: [%d]:",nCable, uint16_t(nLength));
for (uint16_t i = 0; i < nLength; i++)
{ {
printf("MIDI%u: SysEx data length: [%d]:",nCable, uint16_t(nLength)); if((i % 16) == 0)
for (uint16_t i = 0; i < nLength; i++) printf("\n%04d:",i);
{ printf(" 0x%02x",pMessage[i]);
if((i % 16) == 0)
printf("\n%04d:",i);
printf(" 0x%02x",pMessage[i]);
}
printf("\n");
} }
*/ printf("\n");
}
*/
// Handle MIDI Thru // Handle MIDI Thru
if (m_DeviceName.compare(m_pConfig->GetMIDIThruIn()) == 0) if (m_DeviceName.compare (m_pConfig->GetMIDIThruIn ()) == 0)
{ {
TDeviceMap::const_iterator Iterator; TDeviceMap::const_iterator Iterator;
Iterator = s_DeviceMap.find(m_pConfig->GetMIDIThruOut()); Iterator = s_DeviceMap.find (m_pConfig->GetMIDIThruOut ());
if (Iterator != s_DeviceMap.end()) if (Iterator != s_DeviceMap.end ())
{ {
Iterator->second->Send(pMessage, nLength, nCable); Iterator->second->Send (pMessage, nLength, nCable);
} }
} }
@ -170,17 +174,17 @@ void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigne
return; return;
} }
m_MIDISpinLock.Acquire(); m_MIDISpinLock.Acquire ();
u8 ucStatus = pMessage[0]; u8 ucStatus = pMessage[0];
u8 ucChannel = ucStatus & 0x0F; u8 ucChannel = ucStatus & 0x0F;
u8 ucType = ucStatus >> 4; u8 ucType = ucStatus >> 4;
// GLOBAL MIDI SYSEX // GLOBAL MIDI SYSEX
if (pMessage[0] == MIDI_SYSTEM_EXCLUSIVE_BEGIN && pMessage[3] == 0x04 && pMessage[4] == 0x01 && pMessage[nLength - 1] == MIDI_SYSTEM_EXCLUSIVE_END) // MASTER VOLUME if (pMessage[0] == MIDI_SYSTEM_EXCLUSIVE_BEGIN && pMessage[3] == 0x04 && pMessage[4] == 0x01 && pMessage[nLength-1] == MIDI_SYSTEM_EXCLUSIVE_END) // MASTER VOLUME
{ {
float32_t nMasterVolume = ((pMessage[5] & 0x7c) & ((pMessage[6] & 0x7c) << 7)) / (1 << 14); float32_t nMasterVolume=((pMessage[5] & 0x7c) & ((pMessage[6] & 0x7c) <<7))/(1<<14);
LOGNOTE("Master volume: %f", nMasterVolume); LOGNOTE("Master volume: %f",nMasterVolume);
m_pSynthesizer->setMasterVolume(nMasterVolume); m_pSynthesizer->setMasterVolume(nMasterVolume);
} }
else else
@ -195,7 +199,7 @@ void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigne
{ {
break; break;
} }
m_pUI->UIMIDICmdHandler(ucChannel, ucStatus & 0xF0, pMessage[1], pMessage[2]); m_pUI->UIMIDICmdHandler (ucChannel, ucStatus & 0xF0, pMessage[1], pMessage[2]);
break; break;
} }
@ -208,13 +212,14 @@ void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigne
uint8_t ucSysExChannel = (pMessage[2] & 0x0F); uint8_t ucSysExChannel = (pMessage[2] & 0x0F);
if (m_ChannelMap[nTG] == ucSysExChannel || m_ChannelMap[nTG] == OmniMode) if (m_ChannelMap[nTG] == ucSysExChannel || m_ChannelMap[nTG] == OmniMode)
{ {
LOGNOTE("MIDI-SYSEX: channel: %u, len: %u, TG: %u", m_ChannelMap[nTG], nLength, nTG); LOGNOTE("MIDI-SYSEX: channel: %u, len: %u, TG: %u",m_ChannelMap[nTG],nLength,nTG);
HandleSystemExclusive(pMessage, nLength, nCable, nTG); HandleSystemExclusive(pMessage, nLength, nCable, nTG);
} }
} }
else else
{ {
if (m_ChannelMap[nTG] == ucChannel || m_ChannelMap[nTG] == OmniMode) if ( m_ChannelMap[nTG] == ucChannel
|| m_ChannelMap[nTG] == OmniMode)
{ {
switch (ucType) switch (ucType)
{ {
@ -228,13 +233,13 @@ void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigne
{ {
if (pMessage[2] <= 127) if (pMessage[2] <= 127)
{ {
m_pSynthesizer->keydown(pMessage[1], m_pSynthesizer->keydown (pMessage[1],
pMessage[2], nTG); pMessage[2], nTG);
} }
} }
else else
{ {
m_pSynthesizer->keyup(pMessage[1], nTG); m_pSynthesizer->keyup (pMessage[1], nTG);
} }
break; break;
@ -244,13 +249,13 @@ void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigne
break; break;
} }
m_pSynthesizer->keyup(pMessage[1], nTG); m_pSynthesizer->keyup (pMessage[1], nTG);
break; break;
case MIDI_CHANNEL_AFTERTOUCH: case MIDI_CHANNEL_AFTERTOUCH:
m_pSynthesizer->setAftertouch(pMessage[1], nTG); m_pSynthesizer->setAftertouch (pMessage[1], nTG);
m_pSynthesizer->ControllersRefresh(nTG); m_pSynthesizer->ControllersRefresh (nTG);
break; break;
case MIDI_CONTROL_CHANGE: case MIDI_CONTROL_CHANGE:
@ -262,46 +267,46 @@ void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigne
switch (pMessage[1]) switch (pMessage[1])
{ {
case MIDI_CC_MODULATION: case MIDI_CC_MODULATION:
m_pSynthesizer->setModWheel(pMessage[2], nTG); m_pSynthesizer->setModWheel (pMessage[2], nTG);
m_pSynthesizer->ControllersRefresh(nTG); m_pSynthesizer->ControllersRefresh (nTG);
break; break;
case MIDI_CC_FOOT_PEDAL: case MIDI_CC_FOOT_PEDAL:
m_pSynthesizer->setFootController(pMessage[2], nTG); m_pSynthesizer->setFootController (pMessage[2], nTG);
m_pSynthesizer->ControllersRefresh(nTG); m_pSynthesizer->ControllersRefresh (nTG);
break; break;
case MIDI_CC_BREATH_CONTROLLER: case MIDI_CC_BREATH_CONTROLLER:
m_pSynthesizer->setBreathController(pMessage[2], nTG); m_pSynthesizer->setBreathController (pMessage[2], nTG);
m_pSynthesizer->ControllersRefresh(nTG); m_pSynthesizer->ControllersRefresh (nTG);
break; break;
case MIDI_CC_VOLUME: case MIDI_CC_VOLUME:
m_pSynthesizer->SetVolume(pMessage[2], nTG); m_pSynthesizer->SetVolume (pMessage[2], nTG);
break; break;
case MIDI_CC_PAN_POSITION: case MIDI_CC_PAN_POSITION:
m_pSynthesizer->SetPan(pMessage[2], nTG); m_pSynthesizer->SetPan (pMessage[2], nTG);
break; break;
case MIDI_CC_BANK_SELECT_MSB: case MIDI_CC_BANK_SELECT_MSB:
m_pSynthesizer->BankSelectMSB(pMessage[2], nTG); m_pSynthesizer->BankSelectMSB (pMessage[2], nTG);
break; break;
case MIDI_CC_BANK_SELECT_LSB: case MIDI_CC_BANK_SELECT_LSB:
m_pSynthesizer->BankSelectLSB(pMessage[2], nTG); m_pSynthesizer->BankSelectLSB (pMessage[2], nTG);
break; break;
case MIDI_CC_BANK_SUSTAIN: case MIDI_CC_BANK_SUSTAIN:
m_pSynthesizer->setSustain(pMessage[2] >= 64, nTG); m_pSynthesizer->setSustain (pMessage[2] >= 64, nTG);
break; break;
case MIDI_CC_RESONANCE: case MIDI_CC_RESONANCE:
m_pSynthesizer->SetResonance(maplong(pMessage[2], 0, 127, 0, 99), nTG); m_pSynthesizer->SetResonance (maplong (pMessage[2], 0, 127, 0, 99), nTG);
break; break;
case MIDI_CC_FREQUENCY_CUTOFF: case MIDI_CC_FREQUENCY_CUTOFF:
m_pSynthesizer->SetCutoff(maplong(pMessage[2], 0, 127, 0, 99), nTG); m_pSynthesizer->SetCutoff (maplong (pMessage[2], 0, 127, 0, 99), nTG);
break; break;
case MIDI_CC_REVERB_LEVEL: case MIDI_CC_REVERB_LEVEL:
@ -328,25 +333,25 @@ void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigne
if (pMessage[2] == 0) if (pMessage[2] == 0)
{ {
// "0 to 127, with 0 being no celeste (detune) effect applied at all." // "0 to 127, with 0 being no celeste (detune) effect applied at all."
m_pSynthesizer->SetMasterTune(0, nTG); m_pSynthesizer->SetMasterTune (0, nTG);
} }
else else
{ {
m_pSynthesizer->SetMasterTune(maplong(pMessage[2], 1, 127, -99, 99), nTG); m_pSynthesizer->SetMasterTune (maplong (pMessage[2], 1, 127, -99, 99), nTG);
} }
break; break;
case MIDI_CC_ALL_SOUND_OFF: case MIDI_CC_ALL_SOUND_OFF:
m_pSynthesizer->panic(pMessage[2], nTG); m_pSynthesizer->panic (pMessage[2], nTG);
break; break;
case MIDI_CC_ALL_NOTES_OFF: case MIDI_CC_ALL_NOTES_OFF:
// As per "MIDI 1.0 Detailed Specification" v4.2 // As per "MIDI 1.0 Detailed Specification" v4.2
// From "ALL NOTES OFF" states: // From "ALL NOTES OFF" states:
// "Receivers should ignore an All Notes Off message while Omni is on (Modes 1 & 2)" // "Receivers should ignore an All Notes Off message while Omni is on (Modes 1 & 2)"
if (!m_pConfig->GetIgnoreAllNotesOff() && m_ChannelMap[nTG] != OmniMode) if (!m_pConfig->GetIgnoreAllNotesOff () && m_ChannelMap[nTG] != OmniMode)
{ {
m_pSynthesizer->notesOff(pMessage[2], nTG); m_pSynthesizer->notesOff (pMessage[2], nTG);
} }
break; break;
} }
@ -354,24 +359,22 @@ void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigne
case MIDI_PROGRAM_CHANGE: case MIDI_PROGRAM_CHANGE:
// do program change only if enabled in config // do program change only if enabled in config
if (m_pConfig->GetMIDIRXProgramChange()) if( m_pConfig->GetMIDIRXProgramChange() )
m_pSynthesizer->ProgramChange(pMessage[1], nTG); m_pSynthesizer->ProgramChange (pMessage[1], nTG);
break; break;
case MIDI_PITCH_BEND: case MIDI_PITCH_BEND: {
{
if (nLength < 3) if (nLength < 3)
{ {
break; break;
} }
s16 nValue = pMessage[1]; s16 nValue = pMessage[1];
nValue |= (s16)pMessage[2] << 7; nValue |= (s16) pMessage[2] << 7;
nValue -= 0x2000; nValue -= 0x2000;
m_pSynthesizer->setPitchbend(nValue, nTG); m_pSynthesizer->setPitchbend (nValue, nTG);
} } break;
break;
default: default:
break; break;
@ -380,161 +383,161 @@ void CMIDIDevice::MIDIMessageHandler(const u8 *pMessage, size_t nLength, unsigne
} }
} }
} }
m_MIDISpinLock.Release(); m_MIDISpinLock.Release ();
} }
void CMIDIDevice::AddDevice(const char *pDeviceName) void CMIDIDevice::AddDevice (const char *pDeviceName)
{ {
assert(pDeviceName); assert (pDeviceName);
assert(m_DeviceName.empty()); assert (m_DeviceName.empty ());
m_DeviceName = pDeviceName; m_DeviceName = pDeviceName;
assert(!m_DeviceName.empty()); assert (!m_DeviceName.empty ());
s_DeviceMap.insert(std::pair<std::string, CMIDIDevice *>(pDeviceName, this)); s_DeviceMap.insert (std::pair<std::string, CMIDIDevice *> (pDeviceName, this));
} }
void CMIDIDevice::HandleSystemExclusive(const uint8_t *pMessage, const size_t nLength, const unsigned nCable, const uint8_t nTG) void CMIDIDevice::HandleSystemExclusive(const uint8_t* pMessage, const size_t nLength, const unsigned nCable, const uint8_t nTG)
{ {
int16_t sysex_return; int16_t sysex_return;
sysex_return = m_pSynthesizer->checkSystemExclusive(pMessage, nLength, nTG); sysex_return = m_pSynthesizer->checkSystemExclusive(pMessage, nLength, nTG);
LOGDBG("SYSEX handler return value: %d", sysex_return); LOGDBG("SYSEX handler return value: %d", sysex_return);
switch (sysex_return) switch (sysex_return)
{ {
case -1: case -1:
LOGERR("SysEx end status byte not detected."); LOGERR("SysEx end status byte not detected.");
break; break;
case -2: case -2:
LOGERR("SysEx vendor not Yamaha."); LOGERR("SysEx vendor not Yamaha.");
break; break;
case -3: case -3:
LOGERR("Unknown SysEx parameter change."); LOGERR("Unknown SysEx parameter change.");
break; break;
case -4: case -4:
LOGERR("Unknown SysEx voice or function."); LOGERR("Unknown SysEx voice or function.");
break; break;
case -5: case -5:
LOGERR("Not a SysEx voice bulk upload."); LOGERR("Not a SysEx voice bulk upload.");
break; break;
case -6: case -6:
LOGERR("Wrong length for SysEx voice bulk upload (not 155)."); LOGERR("Wrong length for SysEx voice bulk upload (not 155).");
break; break;
case -7: case -7:
LOGERR("Checksum error for one voice."); LOGERR("Checksum error for one voice.");
break; break;
case -8: case -8:
LOGERR("Not a SysEx bank bulk upload."); LOGERR("Not a SysEx bank bulk upload.");
break; break;
case -9: case -9:
LOGERR("Wrong length for SysEx bank bulk upload (not 4096)."); LOGERR("Wrong length for SysEx bank bulk upload (not 4096).");
case -10: case -10:
LOGERR("Checksum error for bank."); LOGERR("Checksum error for bank.");
break; break;
case -11: case -11:
LOGERR("Unknown SysEx message."); LOGERR("Unknown SysEx message.");
break; break;
case 64: case 64:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setMonoMode(pMessage[5], nTG); m_pSynthesizer->setMonoMode(pMessage[5],nTG);
break; break;
case 65: case 65:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setPitchbendRange(pMessage[5], nTG); m_pSynthesizer->setPitchbendRange(pMessage[5],nTG);
break; break;
case 66: case 66:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setPitchbendStep(pMessage[5], nTG); m_pSynthesizer->setPitchbendStep(pMessage[5],nTG);
break; break;
case 67: case 67:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setPortamentoMode(pMessage[5], nTG); m_pSynthesizer->setPortamentoMode(pMessage[5],nTG);
break; break;
case 68: case 68:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setPortamentoGlissando(pMessage[5], nTG); m_pSynthesizer->setPortamentoGlissando(pMessage[5],nTG);
break; break;
case 69: case 69:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setPortamentoTime(pMessage[5], nTG); m_pSynthesizer->setPortamentoTime(pMessage[5],nTG);
break; break;
case 70: case 70:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setModWheelRange(pMessage[5], nTG); m_pSynthesizer->setModWheelRange(pMessage[5],nTG);
break; break;
case 71: case 71:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setModWheelTarget(pMessage[5], nTG); m_pSynthesizer->setModWheelTarget(pMessage[5],nTG);
break; break;
case 72: case 72:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setFootControllerRange(pMessage[5], nTG); m_pSynthesizer->setFootControllerRange(pMessage[5],nTG);
break; break;
case 73: case 73:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setFootControllerTarget(pMessage[5], nTG); m_pSynthesizer->setFootControllerTarget(pMessage[5],nTG);
break; break;
case 74: case 74:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setBreathControllerRange(pMessage[5], nTG); m_pSynthesizer->setBreathControllerRange(pMessage[5],nTG);
break; break;
case 75: case 75:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setBreathControllerTarget(pMessage[5], nTG); m_pSynthesizer->setBreathControllerTarget(pMessage[5],nTG);
break; break;
case 76: case 76:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setAftertouchRange(pMessage[5], nTG); m_pSynthesizer->setAftertouchRange(pMessage[5],nTG);
break; break;
case 77: case 77:
LOGDBG("SysEx Function parameter change: %d Value %d", pMessage[4], pMessage[5]); LOGDBG("SysEx Function parameter change: %d Value %d",pMessage[4],pMessage[5]);
m_pSynthesizer->setAftertouchTarget(pMessage[5], nTG); m_pSynthesizer->setAftertouchTarget(pMessage[5],nTG);
break; break;
case 100: case 100:
// load sysex-data into voice memory // load sysex-data into voice memory
LOGDBG("One Voice bulk upload"); LOGDBG("One Voice bulk upload");
m_pSynthesizer->loadVoiceParameters(pMessage, nTG); m_pSynthesizer->loadVoiceParameters(pMessage,nTG);
break; break;
case 200: case 200:
LOGDBG("Bank bulk upload."); LOGDBG("Bank bulk upload.");
// TODO: add code for storing a bank bulk upload //TODO: add code for storing a bank bulk upload
LOGNOTE("Currently code for storing a bulk bank upload is missing!"); LOGNOTE("Currently code for storing a bulk bank upload is missing!");
break; break;
default: default:
if (sysex_return >= 300 && sysex_return < 500) if(sysex_return >= 300 && sysex_return < 500)
{ {
LOGDBG("SysEx voice parameter change: Parameter %d value: %d", pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5]); LOGDBG("SysEx voice parameter change: Parameter %d value: %d",pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5]);
m_pSynthesizer->setVoiceDataElement(pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5], nTG); m_pSynthesizer->setVoiceDataElement(pMessage[4] + ((pMessage[3] & 0x03) * 128), pMessage[5],nTG);
switch (pMessage[4] + ((pMessage[3] & 0x03) * 128)) switch(pMessage[4] + ((pMessage[3] & 0x03) * 128))
{ {
case 134: case 134:
m_pSynthesizer->notesOff(0, nTG); m_pSynthesizer->notesOff(0,nTG);
break; break;
} }
} }
else if (sysex_return >= 500 && sysex_return < 600) else if(sysex_return >= 500 && sysex_return < 600)
{ {
LOGDBG("SysEx send voice %u request", sysex_return - 500); LOGDBG("SysEx send voice %u request",sysex_return-500);
SendSystemExclusiveVoice(sysex_return - 500, nCable, nTG); SendSystemExclusiveVoice(sysex_return-500, nCable, nTG);
} }
break; break;
} }
} }
void CMIDIDevice::SendSystemExclusiveVoice(uint8_t nVoice, const unsigned nCable, uint8_t nTG) void CMIDIDevice::SendSystemExclusiveVoice(uint8_t nVoice, const unsigned nCable, uint8_t nTG)
{ {
uint8_t voicedump[163]; uint8_t voicedump[163];
// Get voice sysex dump from TG // Get voice sysex dump from TG
m_pSynthesizer->getSysExVoiceDump(voicedump, nTG); m_pSynthesizer->getSysExVoiceDump(voicedump, nTG);
TDeviceMap::const_iterator Iterator; TDeviceMap::const_iterator Iterator;
// send voice dump to all MIDI interfaces // send voice dump to all MIDI interfaces
for (Iterator = s_DeviceMap.begin(); Iterator != s_DeviceMap.end(); ++Iterator) for(Iterator = s_DeviceMap.begin(); Iterator != s_DeviceMap.end(); ++Iterator)
{ {
Iterator->second->Send(voicedump, sizeof(voicedump) * sizeof(uint8_t)); Iterator->second->Send (voicedump, sizeof(voicedump)*sizeof(uint8_t));
// LOGDBG("Send SYSEX voice dump %u to \"%s\"",nVoice,Iterator->first.c_str()); // LOGDBG("Send SYSEX voice dump %u to \"%s\"",nVoice,Iterator->first.c_str());
} }
} }

@ -37,7 +37,7 @@ VoiceNumber1=1
MIDIChannel1=255 MIDIChannel1=255
Volume1=100 Volume1=100
Pan1=64 Pan1=64
Detune1=-11 Detune1=0
Cutoff1=99 Cutoff1=99
Resonance1=0 Resonance1=0
NoteLimitLow1=0 NoteLimitLow1=0
@ -66,7 +66,7 @@ VoiceNumber2=1
MIDIChannel2=255 MIDIChannel2=255
Volume2=0 Volume2=0
Pan2=127 Pan2=127
Detune2=11 Detune2=0
Cutoff2=99 Cutoff2=99
Resonance2=0 Resonance2=0
NoteLimitLow2=0 NoteLimitLow2=0
@ -311,8 +311,6 @@ FXDelayEnable=1
FXDelayLeftDelayTime=15 FXDelayLeftDelayTime=15
FXDelayRightDelayTime=22 FXDelayRightDelayTime=22
FXDelayFeedback=35 FXDelayFeedback=35
FXDelayFlutterRate=0
FXDelayFlutterAmount=0
FXReverberatorEnable=1 FXReverberatorEnable=1
FXReverberatorInputGain=55 FXReverberatorInputGain=55

@ -34,25 +34,25 @@ using namespace std;
const CUIMenu::TMenuItem CUIMenu::s_MenuRoot[] = const CUIMenu::TMenuItem CUIMenu::s_MenuRoot[] =
{ {
{"MiniDexed", CUIMenu::MenuHandler, CUIMenu::s_MainMenu}, {"MiniDexed", MenuHandler, s_MainMenu},
{0} {0}
}; };
// inserting menu items before "TG1" affect TGShortcutHandler() // inserting menu items before "TG1" affect TGShortcutHandler()
const CUIMenu::TMenuItem CUIMenu::s_MainMenu[] = const CUIMenu::TMenuItem CUIMenu::s_MainMenu[] =
{ {
{"TG1", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 0}, {"TG1", MenuHandler, s_TGMenu, 0},
#ifdef ARM_ALLOW_MULTI_CORE #ifdef ARM_ALLOW_MULTI_CORE
{"TG2", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 1}, {"TG2", MenuHandler, s_TGMenu, 1},
{"TG3", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 2}, {"TG3", MenuHandler, s_TGMenu, 2},
{"TG4", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 3}, {"TG4", MenuHandler, s_TGMenu, 3},
{"TG5", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 4}, {"TG5", MenuHandler, s_TGMenu, 4},
{"TG6", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 5}, {"TG6", MenuHandler, s_TGMenu, 5},
{"TG7", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 6}, {"TG7", MenuHandler, s_TGMenu, 6},
{"TG8", CUIMenu::MenuHandler, CUIMenu::s_TGMenu, 7}, {"TG8", MenuHandler, s_TGMenu, 7},
#endif #endif
{"Effects", CUIMenu::MenuHandler, CUIMenu::s_EffectsMenu}, {"Effects", MenuHandler, s_EffectsMenu},
{"Performance", CUIMenu::MenuHandler, CUIMenu::s_PerformanceMenu}, {"Performance", MenuHandler, s_PerformanceMenu},
{0} {0}
}; };
@ -74,26 +74,21 @@ const CUIMenu::TMenuItem CUIMenu::s_TGFXMenu[] =
const CUIMenu::TMenuItem CUIMenu::s_TGMenu[] = const CUIMenu::TMenuItem CUIMenu::s_TGMenu[] =
{ {
{"Voice", CUIMenu::EditProgramNumber}, {"Voice", EditProgramNumber},
{"Bank", CUIMenu::EditVoiceBankNumber}, {"Bank", EditVoiceBankNumber},
{"Volume", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterVolume}, {"Volume", EditTGParameter, 0, CMiniDexed::TGParameterVolume},
#ifdef ARM_ALLOW_MULTI_CORE #ifdef ARM_ALLOW_MULTI_CORE
{"Pan", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterPan}, {"Pan", EditTGParameter, 0, CMiniDexed::TGParameterPan},
#endif #endif
#if defined(MIXING_CONSOLE_ENABLE) {"Detune", EditTGParameter, 0, CMiniDexed::TGParameterMasterTune},
{"FX-Send", CUIMenu::MenuHandler, CUIMenu::s_TGFXMenu}, {"Cutoff", EditTGParameter, 0, CMiniDexed::TGParameterCutoff},
#elif defined(PLATE_REVERB_ENABLE) {"Resonance", EditTGParameter, 0, CMiniDexed::TGParameterResonance},
{"Reverb-Send", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterReverbSend}, {"Pitch Bend", MenuHandler, s_EditPitchBendMenu},
#endif {"Portamento", MenuHandler, s_EditPortamentoMenu},
{"Detune", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterMasterTune}, {"Poly/Mono", EditTGParameter, 0, CMiniDexed::TGParameterMonoMode},
{"Cutoff", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterCutoff}, {"Modulation", MenuHandler, s_ModulationMenu},
{"Resonance", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterResonance}, {"Channel", EditTGParameter, 0, CMiniDexed::TGParameterMIDIChannel},
{"Pitch Bend", CUIMenu::MenuHandler, CUIMenu::s_EditPitchBendMenu}, {"Edit Voice", MenuHandler, s_EditVoiceMenu},
{"Portamento", CUIMenu::MenuHandler, CUIMenu::s_EditPortamentoMenu},
{"Poly/Mono", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterMonoMode},
{"Modulation", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenu},
{"Channel", CUIMenu::EditTGParameter, 0, CMiniDexed::TTGParameter::TGParameterMIDIChannel},
{"Edit Voice", CUIMenu::MenuHandler, CUIMenu::s_EditVoiceMenu},
{0} {0}
}; };
@ -121,34 +116,34 @@ const CUIMenu::TMenuItem CUIMenu::s_EffectsMenu[] =
const CUIMenu::TMenuItem CUIMenu::s_EditPitchBendMenu[] = const CUIMenu::TMenuItem CUIMenu::s_EditPitchBendMenu[] =
{ {
{"Bend Range", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPitchBendRange}, {"Bend Range", EditTGParameter2, 0, CMiniDexed::TGParameterPitchBendRange},
{"Bend Step", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPitchBendStep}, {"Bend Step", EditTGParameter2, 0, CMiniDexed::TGParameterPitchBendStep},
{0} {0}
}; };
const CUIMenu::TMenuItem CUIMenu::s_EditPortamentoMenu[] = const CUIMenu::TMenuItem CUIMenu::s_EditPortamentoMenu[] =
{ {
{"Mode", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPortamentoMode}, {"Mode", EditTGParameter2, 0, CMiniDexed::TGParameterPortamentoMode},
{"Glissando", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPortamentoGlissando}, {"Glissando", EditTGParameter2, 0, CMiniDexed::TGParameterPortamentoGlissando},
{"Time", CUIMenu::EditTGParameter2, 0, CMiniDexed::TTGParameter::TGParameterPortamentoTime}, {"Time", EditTGParameter2, 0, CMiniDexed::TGParameterPortamentoTime},
{0} {0}
}; };
const CUIMenu::TMenuItem CUIMenu::s_ModulationMenu[] = const CUIMenu::TMenuItem CUIMenu::s_ModulationMenu[] =
{ {
{"Mod. Wheel", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenuParameters, CMiniDexed::TTGParameter::TGParameterMWRange}, {"Mod. Wheel", MenuHandler, s_ModulationMenuParameters, CMiniDexed::TGParameterMWRange},
{"Foot Control", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenuParameters, CMiniDexed::TTGParameter::TGParameterFCRange}, {"Foot Control", MenuHandler, s_ModulationMenuParameters, CMiniDexed::TGParameterFCRange},
{"Breath Control", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenuParameters, CMiniDexed::TTGParameter::TGParameterBCRange}, {"Breath Control", MenuHandler, s_ModulationMenuParameters, CMiniDexed::TGParameterBCRange},
{"Aftertouch", CUIMenu::MenuHandler, CUIMenu::s_ModulationMenuParameters, CMiniDexed::TTGParameter::TGParameterATRange}, {"Aftertouch", MenuHandler, s_ModulationMenuParameters, CMiniDexed::TGParameterATRange},
{0} {0}
}; };
const CUIMenu::TMenuItem CUIMenu::s_ModulationMenuParameters[] = const CUIMenu::TMenuItem CUIMenu::s_ModulationMenuParameters[] =
{ {
{"Range", CUIMenu::EditTGParameterModulation, 0, 0}, {"Range", EditTGParameterModulation, 0, 0},
{"Pitch", CUIMenu::EditTGParameterModulation, 0, 1}, {"Pitch", EditTGParameterModulation, 0, 1},
{"Amplitude", CUIMenu::EditTGParameterModulation, 0, 2}, {"Amplitude", EditTGParameterModulation, 0, 2},
{"EG Bias", CUIMenu::EditTGParameterModulation, 0, 3}, {"EG Bias", EditTGParameterModulation, 0, 3},
{0} {0}
}; };
@ -557,67 +552,67 @@ const CUIMenu::TMenuItem CUIMenu::s_FXMainOutputLevels[] =
// inserting menu items before "OP1" affect OPShortcutHandler() // inserting menu items before "OP1" affect OPShortcutHandler()
const CUIMenu::TMenuItem CUIMenu::s_EditVoiceMenu[] = const CUIMenu::TMenuItem CUIMenu::s_EditVoiceMenu[] =
{ {
{"OP1", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 0}, {"OP1", MenuHandler, s_OperatorMenu, 0},
{"OP2", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 1}, {"OP2", MenuHandler, s_OperatorMenu, 1},
{"OP3", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 2}, {"OP3", MenuHandler, s_OperatorMenu, 2},
{"OP4", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 3}, {"OP4", MenuHandler, s_OperatorMenu, 3},
{"OP5", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 4}, {"OP5", MenuHandler, s_OperatorMenu, 4},
{"OP6", CUIMenu::MenuHandler, CUIMenu::s_OperatorMenu, 5}, {"OP6", MenuHandler, s_OperatorMenu, 5},
{"Algorithm", CUIMenu::EditVoiceParameter, 0, DEXED_ALGORITHM}, {"Algorithm", EditVoiceParameter, 0, DEXED_ALGORITHM},
{"Feedback", CUIMenu::EditVoiceParameter, 0, DEXED_FEEDBACK}, {"Feedback", EditVoiceParameter, 0, DEXED_FEEDBACK},
{"P EG Rate 1", CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_R1}, {"P EG Rate 1", EditVoiceParameter, 0, DEXED_PITCH_EG_R1},
{"P EG Rate 2", CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_R2}, {"P EG Rate 2", EditVoiceParameter, 0, DEXED_PITCH_EG_R2},
{"P EG Rate 3", CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_R3}, {"P EG Rate 3", EditVoiceParameter, 0, DEXED_PITCH_EG_R3},
{"P EG Rate 4", CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_R4}, {"P EG Rate 4", EditVoiceParameter, 0, DEXED_PITCH_EG_R4},
{"P EG Level 1",CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_L1}, {"P EG Level 1",EditVoiceParameter, 0, DEXED_PITCH_EG_L1},
{"P EG Level 2",CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_L2}, {"P EG Level 2",EditVoiceParameter, 0, DEXED_PITCH_EG_L2},
{"P EG Level 3",CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_L3}, {"P EG Level 3",EditVoiceParameter, 0, DEXED_PITCH_EG_L3},
{"P EG Level 4",CUIMenu::EditVoiceParameter, 0, DEXED_PITCH_EG_L4}, {"P EG Level 4",EditVoiceParameter, 0, DEXED_PITCH_EG_L4},
{"Osc Key Sync",CUIMenu::EditVoiceParameter, 0, DEXED_OSC_KEY_SYNC}, {"Osc Key Sync",EditVoiceParameter, 0, DEXED_OSC_KEY_SYNC},
{"LFO Speed", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_SPEED}, {"LFO Speed", EditVoiceParameter, 0, DEXED_LFO_SPEED},
{"LFO Delay", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_DELAY}, {"LFO Delay", EditVoiceParameter, 0, DEXED_LFO_DELAY},
{"LFO PMD", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_PITCH_MOD_DEP}, {"LFO PMD", EditVoiceParameter, 0, DEXED_LFO_PITCH_MOD_DEP},
{"LFO AMD", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_AMP_MOD_DEP}, {"LFO AMD", EditVoiceParameter, 0, DEXED_LFO_AMP_MOD_DEP},
{"LFO Sync", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_SYNC}, {"LFO Sync", EditVoiceParameter, 0, DEXED_LFO_SYNC},
{"LFO Wave", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_WAVE}, {"LFO Wave", EditVoiceParameter, 0, DEXED_LFO_WAVE},
{"P Mod Sens.", CUIMenu::EditVoiceParameter, 0, DEXED_LFO_PITCH_MOD_SENS}, {"P Mod Sens.", EditVoiceParameter, 0, DEXED_LFO_PITCH_MOD_SENS},
{"Transpose", CUIMenu::EditVoiceParameter, 0, DEXED_TRANSPOSE}, {"Transpose", EditVoiceParameter, 0, DEXED_TRANSPOSE},
{"Name", CUIMenu::InputTxt, 0, 3}, {"Name", InputTxt,0 , 3},
{0} {0}
}; };
const CUIMenu::TMenuItem CUIMenu::s_OperatorMenu[] = const CUIMenu::TMenuItem CUIMenu::s_OperatorMenu[] =
{ {
{"Output Level",CUIMenu::EditOPParameter, 0, DEXED_OP_OUTPUT_LEV}, {"Output Level",EditOPParameter, 0, DEXED_OP_OUTPUT_LEV},
{"Freq Coarse", CUIMenu::EditOPParameter, 0, DEXED_OP_FREQ_COARSE}, {"Freq Coarse", EditOPParameter, 0, DEXED_OP_FREQ_COARSE},
{"Freq Fine", CUIMenu::EditOPParameter, 0, DEXED_OP_FREQ_FINE}, {"Freq Fine", EditOPParameter, 0, DEXED_OP_FREQ_FINE},
{"Osc Detune", CUIMenu::EditOPParameter, 0, DEXED_OP_OSC_DETUNE}, {"Osc Detune", EditOPParameter, 0, DEXED_OP_OSC_DETUNE},
{"Osc Mode", CUIMenu::EditOPParameter, 0, DEXED_OP_OSC_MODE}, {"Osc Mode", EditOPParameter, 0, DEXED_OP_OSC_MODE},
{"EG Rate 1", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_R1}, {"EG Rate 1", EditOPParameter, 0, DEXED_OP_EG_R1},
{"EG Rate 2", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_R2}, {"EG Rate 2", EditOPParameter, 0, DEXED_OP_EG_R2},
{"EG Rate 3", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_R3}, {"EG Rate 3", EditOPParameter, 0, DEXED_OP_EG_R3},
{"EG Rate 4", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_R4}, {"EG Rate 4", EditOPParameter, 0, DEXED_OP_EG_R4},
{"EG Level 1", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_L1}, {"EG Level 1", EditOPParameter, 0, DEXED_OP_EG_L1},
{"EG Level 2", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_L2}, {"EG Level 2", EditOPParameter, 0, DEXED_OP_EG_L2},
{"EG Level 3", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_L3}, {"EG Level 3", EditOPParameter, 0, DEXED_OP_EG_L3},
{"EG Level 4", CUIMenu::EditOPParameter, 0, DEXED_OP_EG_L4}, {"EG Level 4", EditOPParameter, 0, DEXED_OP_EG_L4},
{"Break Point", CUIMenu::EditOPParameter, 0, DEXED_OP_LEV_SCL_BRK_PT}, {"Break Point", EditOPParameter, 0, DEXED_OP_LEV_SCL_BRK_PT},
{"L Key Depth", CUIMenu::EditOPParameter, 0, DEXED_OP_SCL_LEFT_DEPTH}, {"L Key Depth", EditOPParameter, 0, DEXED_OP_SCL_LEFT_DEPTH},
{"R Key Depth", CUIMenu::EditOPParameter, 0, DEXED_OP_SCL_RGHT_DEPTH}, {"R Key Depth", EditOPParameter, 0, DEXED_OP_SCL_RGHT_DEPTH},
{"L Key Scale", CUIMenu::EditOPParameter, 0, DEXED_OP_SCL_LEFT_CURVE}, {"L Key Scale", EditOPParameter, 0, DEXED_OP_SCL_LEFT_CURVE},
{"R Key Scale", CUIMenu::EditOPParameter, 0, DEXED_OP_SCL_RGHT_CURVE}, {"R Key Scale", EditOPParameter, 0, DEXED_OP_SCL_RGHT_CURVE},
{"Rate Scaling",CUIMenu::EditOPParameter, 0, DEXED_OP_OSC_RATE_SCALE}, {"Rate Scaling",EditOPParameter, 0, DEXED_OP_OSC_RATE_SCALE},
{"A Mod Sens.", CUIMenu::EditOPParameter, 0, DEXED_OP_AMP_MOD_SENS}, {"A Mod Sens.", EditOPParameter, 0, DEXED_OP_AMP_MOD_SENS},
{"K Vel. Sens.",CUIMenu::EditOPParameter, 0, DEXED_OP_KEY_VEL_SENS}, {"K Vel. Sens.",EditOPParameter, 0, DEXED_OP_KEY_VEL_SENS},
{"Enable", CUIMenu::EditOPParameter, 0, DEXED_OP_ENABLE}, {"Enable", EditOPParameter, 0, DEXED_OP_ENABLE},
{0} {0}
}; };
const CUIMenu::TMenuItem CUIMenu::s_SaveMenu[] = const CUIMenu::TMenuItem CUIMenu::s_SaveMenu[] =
{ {
{"Overwrite", CUIMenu::SavePerformance, 0, 0}, {"Overwrite", SavePerformance, 0, 0},
{"New", CUIMenu::InputTxt, 0, 1}, {"New", InputTxt,0 , 1},
{"Save as default", CUIMenu::SavePerformance, 0, 1}, {"Save as default", SavePerformance, 0, 1},
{0} {0}
}; };
@ -887,9 +882,9 @@ static const unsigned NoteC3 = 27;
const CUIMenu::TMenuItem CUIMenu::s_PerformanceMenu[] = const CUIMenu::TMenuItem CUIMenu::s_PerformanceMenu[] =
{ {
{"Load", CUIMenu::PerformanceMenu, 0, 0}, {"Load", PerformanceMenu, 0, 0},
{"Save", CUIMenu::MenuHandler, s_SaveMenu}, {"Save", MenuHandler, s_SaveMenu},
{"Delete", CUIMenu::PerformanceMenu, 0, 1}, {"Delete", PerformanceMenu, 0, 1},
{0} {0}
}; };

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 KiB

After

Width:  |  Height:  |  Size: 761 KiB

Loading…
Cancel
Save