Browse Source

Fix for ControlChannel; misc changes

tags/1.9.4
falkTX 11 years ago
parent
commit
d9843df30a
5 changed files with 132 additions and 71 deletions
  1. +10
    -0
      source/backend/CarlaPlugin.hpp
  2. +78
    -41
      source/backend/plugin/CarlaPlugin.cpp
  3. +2
    -2
      source/backend/plugin/CarlaPluginInternal.hpp
  4. +7
    -5
      source/carla_shared.py
  5. +35
    -23
      source/utils/CarlaStateUtils.hpp

+ 10
- 0
source/backend/CarlaPlugin.hpp View File

@@ -688,6 +688,16 @@ public:
*/ */
void recreateLatencyBuffers(); void recreateLatencyBuffers();


/*!
* TODO.
*/
bool tryLock();

/*!
* TODO.
*/
void unlock();

// ------------------------------------------------------------------- // -------------------------------------------------------------------
// OSC stuff // OSC stuff




+ 78
- 41
source/backend/plugin/CarlaPlugin.cpp View File

@@ -24,8 +24,6 @@


//#include <QtGui/QtEvents> //#include <QtGui/QtEvents>


// TODO - save&load options

CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


// ------------------------------------------------------------------- // -------------------------------------------------------------------
@@ -73,19 +71,19 @@ CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const unsigned int id)
{ {
case PROCESS_MODE_SINGLE_CLIENT: case PROCESS_MODE_SINGLE_CLIENT:
case PROCESS_MODE_MULTIPLE_CLIENTS: case PROCESS_MODE_MULTIPLE_CLIENTS:
kData->ctrlChannel = 0;
CARLA_ASSERT(id < MAX_DEFAULT_PLUGINS);
break; break;


case PROCESS_MODE_CONTINUOUS_RACK: case PROCESS_MODE_CONTINUOUS_RACK:
CARLA_ASSERT(id < MAX_RACK_PLUGINS && id < MAX_MIDI_CHANNELS);

if (id < MAX_RACK_PLUGINS && id < MAX_MIDI_CHANNELS)
kData->ctrlChannel = id;

CARLA_ASSERT(id < MAX_RACK_PLUGINS);
break; break;


case PROCESS_MODE_PATCHBAY: case PROCESS_MODE_PATCHBAY:
CARLA_ASSERT(id < MAX_PATCHBAY_PLUGINS);
break;

case PROCESS_MODE_BRIDGE: case PROCESS_MODE_BRIDGE:
CARLA_ASSERT(id == 0);
break; break;
} }


@@ -390,6 +388,10 @@ void CarlaPlugin::getParameterCountInfo(uint32_t* const ins, uint32_t* const out
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Set data (state) // Set data (state)


void CarlaPlugin::prepareForSave()
{
}

const SaveState& CarlaPlugin::getSaveState() const SaveState& CarlaPlugin::getSaveState()
{ {
static SaveState saveState; static SaveState saveState;
@@ -448,6 +450,7 @@ const SaveState& CarlaPlugin::getSaveState()
saveState.balanceLeft = kData->postProc.balanceLeft; saveState.balanceLeft = kData->postProc.balanceLeft;
saveState.balanceRight = kData->postProc.balanceRight; saveState.balanceRight = kData->postProc.balanceRight;
saveState.panning = kData->postProc.panning; saveState.panning = kData->postProc.panning;
saveState.ctrlChannel = kData->ctrlChannel;


// ---------------------------- // ----------------------------
// Current Program // Current Program
@@ -735,6 +738,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState)
setBalanceLeft(saveState.balanceLeft, true, true); setBalanceLeft(saveState.balanceLeft, true, true);
setBalanceRight(saveState.balanceRight, true, true); setBalanceRight(saveState.balanceRight, true, true);
setPanning(saveState.panning, true, true); setPanning(saveState.panning, true, true);
setCtrlChannel(saveState.ctrlChannel, true, true);


setActive(saveState.active, true, true); setActive(saveState.active, true, true);
} }
@@ -820,6 +824,9 @@ void CarlaPlugin::setEnabled(const bool yesNo)


void CarlaPlugin::setActive(const bool active, const bool sendOsc, const bool sendCallback) void CarlaPlugin::setActive(const bool active, const bool sendOsc, const bool sendCallback)
{ {
if (kData->active == active)
return;

kData->active = active; kData->active = active;


const float value = active ? 1.0f : 0.0f; const float value = active ? 1.0f : 0.0f;
@@ -846,6 +853,9 @@ void CarlaPlugin::setDryWet(const float value, const bool sendOsc, const bool se


const float fixedValue = carla_fixValue<float>(0.0f, 1.0f, value); const float fixedValue = carla_fixValue<float>(0.0f, 1.0f, value);


if (kData->postProc.dryWet == fixedValue)
return;

kData->postProc.dryWet = fixedValue; kData->postProc.dryWet = fixedValue;


#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
@@ -870,6 +880,9 @@ void CarlaPlugin::setVolume(const float value, const bool sendOsc, const bool se


const float fixedValue = carla_fixValue<float>(0.0f, 1.27f, value); const float fixedValue = carla_fixValue<float>(0.0f, 1.27f, value);


if (kData->postProc.volume == fixedValue)
return;

kData->postProc.volume = fixedValue; kData->postProc.volume = fixedValue;


#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
@@ -894,6 +907,9 @@ void CarlaPlugin::setBalanceLeft(const float value, const bool sendOsc, const bo


const float fixedValue = carla_fixValue<float>(-1.0f, 1.0f, value); const float fixedValue = carla_fixValue<float>(-1.0f, 1.0f, value);


if (kData->postProc.balanceLeft == fixedValue)
return;

kData->postProc.balanceLeft = fixedValue; kData->postProc.balanceLeft = fixedValue;


#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
@@ -918,6 +934,9 @@ void CarlaPlugin::setBalanceRight(const float value, const bool sendOsc, const b


const float fixedValue = carla_fixValue<float>(-1.0f, 1.0f, value); const float fixedValue = carla_fixValue<float>(-1.0f, 1.0f, value);


if (kData->postProc.balanceRight == fixedValue)
return;

kData->postProc.balanceRight = fixedValue; kData->postProc.balanceRight = fixedValue;


#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
@@ -942,6 +961,9 @@ void CarlaPlugin::setPanning(const float value, const bool sendOsc, const bool s


const float fixedValue = carla_fixValue<float>(-1.0f, 1.0f, value); const float fixedValue = carla_fixValue<float>(-1.0f, 1.0f, value);


if (kData->postProc.panning == fixedValue)
return;

kData->postProc.panning = fixedValue; kData->postProc.panning = fixedValue;


#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
@@ -962,35 +984,27 @@ void CarlaPlugin::setPanning(const float value, const bool sendOsc, const bool s


void CarlaPlugin::setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) void CarlaPlugin::setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback)
{ {
CARLA_SAFE_ASSERT(kData->engine->getProccessMode() != PROCESS_MODE_CONTINUOUS_RACK);

if (kData->engine->getProccessMode() == PROCESS_MODE_CONTINUOUS_RACK)
if (kData->ctrlChannel == channel)
return; return;


if (kData->ctrlChannel != channel)
{
{
const ScopedProcessLocker spl(this, true);
kData->ctrlChannel = channel;
}
kData->ctrlChannel = channel;


#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
const float ctrlf = channel;
const float ctrlf = channel;


if (sendOsc)
kData->engine->osc_send_control_set_parameter_value(fId, PARAMETER_CTRL_CHANNEL, ctrlf);
if (sendOsc)
kData->engine->osc_send_control_set_parameter_value(fId, PARAMETER_CTRL_CHANNEL, ctrlf);
#else #else
// unused
(void)sendOsc;
// unused
(void)sendOsc;
#endif #endif


if (sendCallback)
kData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_CTRL_CHANNEL, 0, channel, nullptr);
if (sendCallback)
kData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, PARAMETER_CTRL_CHANNEL, 0, channel, nullptr);
#ifndef BUILD_BRIDGE #ifndef BUILD_BRIDGE
else if (fHints & PLUGIN_IS_BRIDGE)
osc_send_control(&kData->osc.data, PARAMETER_CTRL_CHANNEL, ctrlf);
else if (fHints & PLUGIN_IS_BRIDGE)
osc_send_control(&kData->osc.data, PARAMETER_CTRL_CHANNEL, ctrlf);
#endif #endif
}
} }


// ------------------------------------------------------------------- // -------------------------------------------------------------------
@@ -1013,6 +1027,10 @@ void CarlaPlugin::setParameterValue(const uint32_t parameterId, const float valu


if (sendCallback) if (sendCallback)
kData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, parameterId, 0, value, nullptr); kData->engine->callback(CALLBACK_PARAMETER_VALUE_CHANGED, fId, parameterId, 0, value, nullptr);
#ifndef BUILD_BRIDGE
else if (fHints & PLUGIN_IS_BRIDGE)
osc_send_control(&kData->osc.data, parameterId, value);
#endif
} }


void CarlaPlugin::setParameterValueByRIndex(const int32_t rindex, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) void CarlaPlugin::setParameterValueByRIndex(const int32_t rindex, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback)
@@ -1024,7 +1042,7 @@ void CarlaPlugin::setParameterValueByRIndex(const int32_t rindex, const float va
if (rindex == PARAMETER_NULL) if (rindex == PARAMETER_NULL)
return; return;
if (rindex == PARAMETER_ACTIVE) if (rindex == PARAMETER_ACTIVE)
return setActive(value > 0.0, sendOsc, sendCallback);
return setActive((value > 0.0f), sendOsc, sendCallback);
if (rindex == PARAMETER_DRYWET) if (rindex == PARAMETER_DRYWET)
return setDryWet(value, sendOsc, sendCallback); return setDryWet(value, sendOsc, sendCallback);
if (rindex == PARAMETER_VOLUME) if (rindex == PARAMETER_VOLUME)
@@ -1065,6 +1083,10 @@ void CarlaPlugin::setParameterMidiChannel(const uint32_t parameterId, uint8_t ch


if (sendCallback) if (sendCallback)
kData->engine->callback(CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED, fId, parameterId, channel, 0.0f, nullptr); kData->engine->callback(CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED, fId, parameterId, channel, 0.0f, nullptr);
#ifndef BUILD_BRIDGE
else if (fHints & PLUGIN_IS_BRIDGE)
{} // TODO
#endif
} }


void CarlaPlugin::setParameterMidiCC(const uint32_t parameterId, int16_t cc, const bool sendOsc, const bool sendCallback) void CarlaPlugin::setParameterMidiCC(const uint32_t parameterId, int16_t cc, const bool sendOsc, const bool sendCallback)
@@ -1087,16 +1109,20 @@ void CarlaPlugin::setParameterMidiCC(const uint32_t parameterId, int16_t cc, con


if (sendCallback) if (sendCallback)
kData->engine->callback(CALLBACK_PARAMETER_MIDI_CC_CHANGED, fId, parameterId, cc, 0.0f, nullptr); kData->engine->callback(CALLBACK_PARAMETER_MIDI_CC_CHANGED, fId, parameterId, cc, 0.0f, nullptr);
#ifndef BUILD_BRIDGE
else if (fHints & PLUGIN_IS_BRIDGE)
{} // TODO
#endif
} }


void CarlaPlugin::setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) void CarlaPlugin::setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui)
{ {
CARLA_ASSERT(type != nullptr);
CARLA_ASSERT(key != nullptr);
CARLA_ASSERT(type != nullptr);
CARLA_ASSERT(key != nullptr);
CARLA_ASSERT(value != nullptr); CARLA_ASSERT(value != nullptr);


if (type == nullptr) if (type == nullptr)
return carla_stderr2("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is invalid", type, key, value, bool2str(sendGui));
return carla_stderr2("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is null", type, key, value, bool2str(sendGui));


if (key == nullptr) if (key == nullptr)
return carla_stderr2("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - key is null", type, key, value, bool2str(sendGui)); return carla_stderr2("CarlaPlugin::setCustomData(\"%s\", \"%s\", \"%s\", %s) - key is null", type, key, value, bool2str(sendGui));
@@ -1291,10 +1317,6 @@ void CarlaPlugin::reloadPrograms(const bool)
{ {
} }


void CarlaPlugin::prepareForSave()
{
}

// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Plugin processing // Plugin processing


@@ -1312,13 +1334,18 @@ void CarlaPlugin::sampleRateChanged(const double)


void CarlaPlugin::recreateLatencyBuffers() void CarlaPlugin::recreateLatencyBuffers()
{ {
#if 0
if (kData->latencyBuffers)
if (kData->latencyBuffers != nullptr)
{ {
for (uint32_t i=0; i < kData->audioIn.count; i++) for (uint32_t i=0; i < kData->audioIn.count; i++)
delete[] kData->latencyBuffers[i];
{
CARLA_ASSERT(kData->latencyBuffers[i] != nullptr);

if (kData->latencyBuffers[i] != nullptr)
delete[] kData->latencyBuffers[i];
}


delete[] kData->latencyBuffers; delete[] kData->latencyBuffers;
kData->latencyBuffers = nullptr;
} }


if (kData->audioIn.count > 0 && kData->latency > 0) if (kData->audioIn.count > 0 && kData->latency > 0)
@@ -1326,11 +1353,21 @@ void CarlaPlugin::recreateLatencyBuffers()
kData->latencyBuffers = new float*[kData->audioIn.count]; kData->latencyBuffers = new float*[kData->audioIn.count];


for (uint32_t i=0; i < kData->audioIn.count; i++) for (uint32_t i=0; i < kData->audioIn.count; i++)
{
kData->latencyBuffers[i] = new float[kData->latency]; kData->latencyBuffers[i] = new float[kData->latency];
carla_zeroFloat(kData->latencyBuffers[i], kData->latency);
}
} }
else
kData->latencyBuffers = nullptr;
#endif
}

bool CarlaPlugin::tryLock()
{
return kData->mutex.tryLock();
}

void CarlaPlugin::unlock()
{
kData->mutex.unlock();
} }


// ------------------------------------------------------------------- // -------------------------------------------------------------------


+ 2
- 2
source/backend/plugin/CarlaPluginInternal.hpp View File

@@ -548,11 +548,11 @@ struct CarlaPluginProtectedData {
activeBefore(false), activeBefore(false),
needsReset(false), needsReset(false),
lib(nullptr), lib(nullptr),
ctrlChannel(-1),
ctrlChannel(0),
extraHints(0x0), extraHints(0x0),
latency(0), latency(0),
latencyBuffers(nullptr), latencyBuffers(nullptr),
osc(engine_, plugin) {}
osc(engine, plugin) {}


CarlaPluginProtectedData() = delete; CarlaPluginProtectedData() = delete;
CarlaPluginProtectedData(CarlaPluginProtectedData&) = delete; CarlaPluginProtectedData(CarlaPluginProtectedData&) = delete;


+ 7
- 5
source/carla_shared.py View File

@@ -1437,7 +1437,7 @@ class PluginEdit(QDialog):
self.fCurrentProgram = -1 self.fCurrentProgram = -1
self.fCurrentMidiProgram = -1 self.fCurrentMidiProgram = -1
self.fCurrentStateFilename = None self.fCurrentStateFilename = None
self.fControlChannel = pluginId+1 if Carla.processMode == PROCESS_MODE_CONTINUOUS_RACK else 1
self.fControlChannel = 0


self.fParameterCount = 0 self.fParameterCount = 0
self.fParameterList = [] # (type, id, widget) self.fParameterList = [] # (type, id, widget)
@@ -1465,7 +1465,7 @@ class PluginEdit(QDialog):
self.ui.keyboard.setMode(self.ui.keyboard.HORIZONTAL) self.ui.keyboard.setMode(self.ui.keyboard.HORIZONTAL)
self.ui.keyboard.setOctaves(6) self.ui.keyboard.setOctaves(6)


self.ui.sb_ctrl_channel.setValue(self.fControlChannel)
self.ui.sb_ctrl_channel.setValue(self.fControlChannel+1)


self.ui.scrollArea.ensureVisible(self.ui.keyboard.width() / 5, 0) self.ui.scrollArea.ensureVisible(self.ui.keyboard.width() / 5, 0)
self.ui.scrollArea.setEnabled(False) self.ui.scrollArea.setEnabled(False)
@@ -1794,7 +1794,7 @@ class PluginEdit(QDialog):
mpName = cString(mpData['name']) mpName = cString(mpData['name'])
mpName = mpName[:40] + (mpName[40:] and "...") mpName = mpName[:40] + (mpName[40:] and "...")


self.ui.cb_midi_programs.addItem("%03i:%03i - %s" % (mpBank, mpProg, mpName))
self.ui.cb_midi_programs.addItem("%03i:%03i - %s" % (mpBank+1, mpProg+1, mpName))


self.fCurrentMidiProgram = Carla.host.get_current_midi_program_index(self.fPluginId) self.fCurrentMidiProgram = Carla.host.get_current_midi_program_index(self.fPluginId)
self.ui.cb_midi_programs.setCurrentIndex(self.fCurrentMidiProgram) self.ui.cb_midi_programs.setCurrentIndex(self.fCurrentMidiProgram)
@@ -1814,6 +1814,7 @@ class PluginEdit(QDialog):
if self.ui.cb_programs.count() > 0: if self.ui.cb_programs.count() > 0:
pIndex = self.ui.cb_programs.currentIndex() pIndex = self.ui.cb_programs.currentIndex()
pName = cString(Carla.host.get_program_name(self.fPluginId, pIndex)) pName = cString(Carla.host.get_program_name(self.fPluginId, pIndex))
pName = pName[:40] + (pName[40:] and "...")
self.ui.cb_programs.setItemText(pIndex, pName) self.ui.cb_programs.setItemText(pIndex, pName)


# Update current midi program text # Update current midi program text
@@ -1822,8 +1823,9 @@ class PluginEdit(QDialog):
mpData = Carla.host.get_midi_program_data(self.fPluginId, mpIndex) mpData = Carla.host.get_midi_program_data(self.fPluginId, mpIndex)
mpBank = int(mpData['bank']) mpBank = int(mpData['bank'])
mpProg = int(mpData['program']) mpProg = int(mpData['program'])
mpLabel = cString(mpData['name'])
self.ui.cb_midi_programs.setItemText(mpIndex, "%03i:%03i - %s" % (mpBank, mpProg, mpLabel))
mpName = cString(mpData['name'])
mpName = mpName[:40] + (mpName[40:] and "...")
self.ui.cb_midi_programs.setItemText(mpIndex, "%03i:%03i - %s" % (mpBank+1, mpProg+1, mpName))


# Update all parameter values # Update all parameter values
for paramType, paramId, paramWidget in self.fParameterList: for paramType, paramId, paramWidget in self.fParameterList:


+ 35
- 23
source/utils/CarlaStateUtils.hpp View File

@@ -83,12 +83,13 @@ struct SaveState {
const char* binary; const char* binary;
long uniqueID; long uniqueID;


bool active;
double dryWet;
double volume;
double balanceLeft;
double balanceRight;
double panning;
bool active;
float dryWet;
float volume;
float balanceLeft;
float balanceRight;
float panning;
int8_t ctrlChannel;


int32_t currentProgramIndex; int32_t currentProgramIndex;
const char* currentProgramName; const char* currentProgramName;
@@ -106,11 +107,12 @@ struct SaveState {
binary(nullptr), binary(nullptr),
uniqueID(0), uniqueID(0),
active(false), active(false),
dryWet(1.0),
volume(1.0),
balanceLeft(-1.0),
balanceRight(1.0),
panning(0.0),
dryWet(1.0f),
volume(1.0f),
balanceLeft(-1.0f),
balanceRight(1.0f),
panning(0.0f),
ctrlChannel(0),
currentProgramIndex(-1), currentProgramIndex(-1),
currentProgramName(nullptr), currentProgramName(nullptr),
currentMidiBank(-1), currentMidiBank(-1),
@@ -162,11 +164,12 @@ struct SaveState {


uniqueID = 0; uniqueID = 0;
active = false; active = false;
dryWet = 1.0;
volume = 1.0;
balanceLeft = -1.0;
balanceRight = 1.0;
panning = 0.0;
dryWet = 1.0f;
volume = 1.0f;
balanceLeft = -1.0f;
balanceRight = 1.0f;
panning = 0.0f;
ctrlChannel = 0;
currentProgramIndex = -1; currentProgramIndex = -1;
currentMidiBank = -1; currentMidiBank = -1;
currentMidiProgram = -1; currentMidiProgram = -1;
@@ -299,6 +302,13 @@ const SaveState& getSaveStateDictFromXML(const QDomNode& xmlNode)
float value = text.toFloat(&ok); float value = text.toFloat(&ok);
if (ok) saveState.panning = value; if (ok) saveState.panning = value;
} }
else if (tag.compare("ControlChannel", Qt::CaseInsensitive) == 0)
{
bool ok;
short value = text.toShort(&ok);
if (ok && value < INT8_MAX)
saveState.ctrlChannel = static_cast<int8_t>(value-1);
}


// ---------------------------------------------- // ----------------------------------------------
// Program (current) // Program (current)
@@ -307,7 +317,7 @@ const SaveState& getSaveStateDictFromXML(const QDomNode& xmlNode)
{ {
bool ok; bool ok;
int value = text.toInt(&ok); int value = text.toInt(&ok);
if (ok) saveState.currentProgramIndex = value;
if (ok) saveState.currentProgramIndex = value-1;
} }
else if (tag.compare("CurrentProgramName", Qt::CaseInsensitive) == 0) else if (tag.compare("CurrentProgramName", Qt::CaseInsensitive) == 0)
{ {
@@ -321,13 +331,13 @@ const SaveState& getSaveStateDictFromXML(const QDomNode& xmlNode)
{ {
bool ok; bool ok;
int value = text.toInt(&ok); int value = text.toInt(&ok);
if (ok) saveState.currentMidiBank = value;
if (ok) saveState.currentMidiBank = value-1;
} }
else if (tag.compare("CurrentMidiProgram", Qt::CaseInsensitive) == 0) else if (tag.compare("CurrentMidiProgram", Qt::CaseInsensitive) == 0)
{ {
bool ok; bool ok;
int value = text.toInt(&ok); int value = text.toInt(&ok);
if (ok) saveState.currentMidiProgram = value;
if (ok) saveState.currentMidiProgram = value-1;
} }


// ---------------------------------------------- // ----------------------------------------------
@@ -367,7 +377,7 @@ const SaveState& getSaveStateDictFromXML(const QDomNode& xmlNode)
else if (pTag.compare("MidiChannel", Qt::CaseInsensitive) == 0) else if (pTag.compare("MidiChannel", Qt::CaseInsensitive) == 0)
{ {
bool ok; bool ok;
uint channel = pText.toUInt(&ok);
ushort channel = pText.toUShort(&ok);
if (ok && channel < 16) if (ok && channel < 16)
stateParameter->midiChannel = static_cast<uint8_t>(channel); stateParameter->midiChannel = static_cast<uint8_t>(channel);
} }
@@ -499,6 +509,8 @@ QString getXMLFromSaveState(const SaveState& saveState)
if (saveState.panning != 0.0f) if (saveState.panning != 0.0f)
data += QString(" <Panning>%1</Panning>\n").arg(saveState.panning); data += QString(" <Panning>%1</Panning>\n").arg(saveState.panning);


data += QString(" <ControlChannel>%1</ControlChannel>\n").arg(saveState.ctrlChannel+1);

content += data; content += data;
} }


@@ -530,7 +542,7 @@ QString getXMLFromSaveState(const SaveState& saveState)
if (saveState.currentProgramIndex >= 0) if (saveState.currentProgramIndex >= 0)
{ {
QString program("\n"); QString program("\n");
program += QString(" <CurrentProgramIndex>%1</CurrentProgramIndex>\n").arg(saveState.currentProgramIndex);
program += QString(" <CurrentProgramIndex>%1</CurrentProgramIndex>\n").arg(saveState.currentProgramIndex+1);
program += QString(" <CurrentProgramName>%1</CurrentProgramName>\n").arg(xmlSafeString(saveState.currentProgramName, true)); program += QString(" <CurrentProgramName>%1</CurrentProgramName>\n").arg(xmlSafeString(saveState.currentProgramName, true));


content += program; content += program;
@@ -539,8 +551,8 @@ QString getXMLFromSaveState(const SaveState& saveState)
if (saveState.currentMidiBank >= 0 && saveState.currentMidiProgram >= 0) if (saveState.currentMidiBank >= 0 && saveState.currentMidiProgram >= 0)
{ {
QString midiProgram("\n"); QString midiProgram("\n");
midiProgram += QString(" <CurrentMidiBank>%1</CurrentMidiBank>\n").arg(saveState.currentMidiBank);
midiProgram += QString(" <CurrentMidiProgram>%1</CurrentMidiProgram>\n").arg(saveState.currentMidiProgram);
midiProgram += QString(" <CurrentMidiBank>%1</CurrentMidiBank>\n").arg(saveState.currentMidiBank+1);
midiProgram += QString(" <CurrentMidiProgram>%1</CurrentMidiProgram>\n").arg(saveState.currentMidiProgram+1);


content += midiProgram; content += midiProgram;
} }


Loading…
Cancel
Save