Browse Source

More carla-plugin work, looking good so far (rack mode)

tags/1.9.4
falkTX 11 years ago
parent
commit
3ea447e271
3 changed files with 280 additions and 122 deletions
  1. +216
    -95
      source/backend/engine/CarlaEngineNative.cpp
  2. +59
    -27
      source/carla-plugin
  3. +5
    -0
      source/utils/CarlaPipeUtils.hpp

+ 216
- 95
source/backend/engine/CarlaEngineNative.cpp View File

@@ -518,6 +518,8 @@ public:
{
carla_debug("CarlaEngineNative::CarlaEngineNative()");

fTmpBuf[STR_MAX] = '\0';

// set-up engine
if (fIsPatchbay)
{
@@ -592,6 +594,19 @@ protected:

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

const char* renamePlugin(const unsigned int id, const char* const newName) override
{
if (const char* const retName = CarlaEngine::renamePlugin(id, newName))
{
uiServerCallback(ENGINE_CALLBACK_PLUGIN_RENAMED, id, 0, 0, 0.0f, retName);
return retName;
}

return nullptr;
}

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

void bufferSizeChanged(const uint32_t newBufferSize)
{
pData->bufferSize = newBufferSize;
@@ -606,117 +621,200 @@ protected:

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

void uiServerSendPluginInfo(CarlaPlugin* const plugin)
{
const uint pluginId(plugin->getId());

std::sprintf(fTmpBuf, "PLUGIN_INFO_%i\n", pluginId);
fUiServer.writeMsg(fTmpBuf);

std::sprintf(fTmpBuf, "%i:%i:%i:%li:%i:%i\n", plugin->getType(), plugin->getCategory(), plugin->getHints(), plugin->getUniqueId(), plugin->getOptionsAvailable(), plugin->getOptionsEnabled());
fUiServer.writeMsg(fTmpBuf);

if (const char* const filename = plugin->getFilename())
{
std::sprintf(fTmpBuf, "%s", filename);
fUiServer.writeAndFixMsg(fTmpBuf);
}
else
fUiServer.writeMsg("\n");

if (const char* const name = plugin->getName())
{
std::sprintf(fTmpBuf, "%s", name);
fUiServer.writeAndFixMsg(fTmpBuf);
}
else
fUiServer.writeMsg("\n");

if (const char* const iconName = plugin->getIconName())
{
std::sprintf(fTmpBuf, "%s", iconName);
fUiServer.writeAndFixMsg(fTmpBuf);
}
else
fUiServer.writeMsg("\n");

plugin->getRealName(fTmpBuf);
fUiServer.writeAndFixMsg(fTmpBuf);

plugin->getLabel(fTmpBuf);
fUiServer.writeAndFixMsg(fTmpBuf);

plugin->getMaker(fTmpBuf);
fUiServer.writeAndFixMsg(fTmpBuf);

plugin->getCopyright(fTmpBuf);
fUiServer.writeAndFixMsg(fTmpBuf);

std::sprintf(fTmpBuf, "AUDIO_COUNT_%i:%i:%i\n", pluginId, plugin->getAudioInCount(), plugin->getAudioOutCount());
fUiServer.writeMsg(fTmpBuf);

std::sprintf(fTmpBuf, "MIDI_COUNT_%i:%i:%i\n", pluginId, plugin->getMidiInCount(), plugin->getMidiOutCount());
fUiServer.writeMsg(fTmpBuf);
}

void uiServerSendPluginParameters(CarlaPlugin* const plugin)
{
const uint pluginId(plugin->getId());

uint32_t ins, outs, count;
plugin->getParameterCountInfo(ins, outs);
count = plugin->getParameterCount();
std::sprintf(fTmpBuf, "PARAMETER_COUNT_%i:%i:%i:%i\n", pluginId, ins, outs, count);
fUiServer.writeMsg(fTmpBuf);

for (uint32_t i=0; i<count; ++i)
{
const ParameterData& paramData(plugin->getParameterData(i));
const ParameterRanges& paramRanges(plugin->getParameterRanges(i));

std::sprintf(fTmpBuf, "PARAMETER_DATA_%i:%i\n", pluginId, i);
fUiServer.writeMsg(fTmpBuf);
std::sprintf(fTmpBuf, "%i:%i:%i:%i\n", paramData.type, paramData.hints, paramData.midiChannel, paramData.midiCC);
fUiServer.writeMsg(fTmpBuf);
plugin->getParameterName(i, fTmpBuf);
fUiServer.writeAndFixMsg(fTmpBuf);
plugin->getParameterUnit(i, fTmpBuf);
fUiServer.writeAndFixMsg(fTmpBuf);

std::sprintf(fTmpBuf, "PARAMETER_RANGES_%i:%i\n", pluginId, i);
fUiServer.writeMsg(fTmpBuf);
std::sprintf(fTmpBuf, "%f:%f:%f:%f:%f:%f\n", paramRanges.def, paramRanges.min, paramRanges.max, paramRanges.step, paramRanges.stepSmall, paramRanges.stepLarge);
fUiServer.writeMsg(fTmpBuf);

std::sprintf(fTmpBuf, "PARAMVAL_%i:%i\n", pluginId, i);
fUiServer.writeMsg(fTmpBuf);
std::sprintf(fTmpBuf, "%f\n", plugin->getParameterValue(i));
fUiServer.writeMsg(fTmpBuf);
}
}

void uiServerSendPluginPrograms(CarlaPlugin* const plugin)
{
const uint pluginId(plugin->getId());

uint32_t count = plugin->getProgramCount();
std::sprintf(fTmpBuf, "PROGRAM_COUNT_%i:%i:%i\n", pluginId, count, plugin->getCurrentProgram());
fUiServer.writeMsg(fTmpBuf);

for (uint32_t i=0; i<count; ++i)
{
std::sprintf(fTmpBuf, "PROGRAM_NAME_%i:%i\n", pluginId, i);
fUiServer.writeMsg(fTmpBuf);
plugin->getProgramName(i, fTmpBuf);
fUiServer.writeAndFixMsg(fTmpBuf);
}

count = plugin->getMidiProgramCount();
std::sprintf(fTmpBuf, "MIDI_PROGRAM_COUNT_%i:%i:%i\n", pluginId, count, plugin->getCurrentMidiProgram());
fUiServer.writeMsg(fTmpBuf);

for (uint32_t i=0; i<count; ++i)
{
std::sprintf(fTmpBuf, "MIDI_PROGRAM_DATA_%i:%i\n", pluginId, i);
fUiServer.writeMsg(fTmpBuf);

const MidiProgramData& mpData(plugin->getMidiProgramData(i));
std::sprintf(fTmpBuf, "%i:%i\n", mpData.bank, mpData.program);
fUiServer.writeMsg(fTmpBuf);
std::sprintf(fTmpBuf, "%s", mpData.name);
fUiServer.writeAndFixMsg(fTmpBuf);
}
}

void uiServerCallback(const EngineCallbackOpcode action, const uint pluginId, const int value1, const int value2, const float value3, const char* const valueStr)
{
if (! fIsRunning)
return;
if (! fUiServer.isOk())
return;

char strBuf[STR_MAX+1];
CarlaPlugin* plugin;

switch (action)
{
case ENGINE_CALLBACK_PLUGIN_ADDED:
if (CarlaPlugin* const plugin = getPlugin(pluginId))
case ENGINE_CALLBACK_RELOAD_INFO:
plugin = getPlugin(pluginId);

if (plugin != nullptr && plugin->isEnabled())
{
CARLA_SAFE_ASSERT_BREAK(plugin->getId() == pluginId);
uiServerSendPluginInfo(plugin);
}
break;

std::sprintf(strBuf, "PLUGIN_INFO_%i\n", pluginId);
fUiServer.writeMsg(strBuf);
std::sprintf(strBuf, "%i:%i:%i:%li\n", plugin->getType(), plugin->getCategory(), plugin->getHints(), plugin->getUniqueId());
fUiServer.writeMsg(strBuf);
plugin->getRealName(strBuf);
fUiServer.writeAndFixMsg(strBuf);
std::sprintf(strBuf, "%s", plugin->getName());
fUiServer.writeAndFixMsg(strBuf);
plugin->getLabel(strBuf);
fUiServer.writeAndFixMsg(strBuf);
plugin->getMaker(strBuf);
fUiServer.writeAndFixMsg(strBuf);
plugin->getCopyright(strBuf);
fUiServer.writeAndFixMsg(strBuf);

std::sprintf(strBuf, "AUDIO_COUNT_%i\n", pluginId);
fUiServer.writeMsg(strBuf);
std::sprintf(strBuf, "%i:%i\n", plugin->getAudioInCount(), plugin->getAudioOutCount());
fUiServer.writeMsg(strBuf);

std::sprintf(strBuf, "MIDI_COUNT_%i\n", pluginId);
fUiServer.writeMsg(strBuf);
std::sprintf(strBuf, "%i:%i\n", plugin->getMidiInCount(), plugin->getMidiOutCount());
fUiServer.writeMsg(strBuf);

uint32_t ins, outs, count;
std::sprintf(strBuf, "PARAMETER_COUNT_%i\n", pluginId);
fUiServer.writeMsg(strBuf);
plugin->getParameterCountInfo(ins, outs);
count = plugin->getParameterCount();
std::sprintf(strBuf, "%i:%i:%i\n", ins, outs, count);
fUiServer.writeMsg(strBuf);

for (uint32_t i=0; i<count; ++i)
{
const ParameterData& paramData(plugin->getParameterData(i));
const ParameterRanges& paramRanges(plugin->getParameterRanges(i));

std::sprintf(strBuf, "PARAMETER_DATA_%i:%i\n", pluginId, i);
fUiServer.writeMsg(strBuf);
std::sprintf(strBuf, "%i:%i\n", paramData.type, paramData.hints);
fUiServer.writeMsg(strBuf);
plugin->getParameterName(i, strBuf);
fUiServer.writeAndFixMsg(strBuf);
plugin->getParameterUnit(i, strBuf);
fUiServer.writeAndFixMsg(strBuf);

std::sprintf(strBuf, "PARAMETER_MIDI_STUFF_%i:%i\n", pluginId, i);
fUiServer.writeMsg(strBuf);
std::sprintf(strBuf, "%i:%i\n", paramData.midiChannel, paramData.midiCC);
fUiServer.writeMsg(strBuf);

std::sprintf(strBuf, "PARAMETER_RANGES_%i:%i\n", pluginId, i);
fUiServer.writeMsg(strBuf);
std::sprintf(strBuf, "%f:%f:%f:%f:%f:%f\n", paramRanges.def, paramRanges.min, paramRanges.max, paramRanges.step, paramRanges.stepSmall, paramRanges.stepLarge);
fUiServer.writeMsg(strBuf);

std::sprintf(strBuf, "PARAMETER_VALUE_%i:%i\n", pluginId, i);
fUiServer.writeMsg(strBuf);
std::sprintf(strBuf, "%f\n", plugin->getParameterValue(i));
fUiServer.writeMsg(strBuf);
}
case ENGINE_CALLBACK_RELOAD_PARAMETERS:
plugin = getPlugin(pluginId);

if (plugin != nullptr && plugin->isEnabled())
{
CARLA_SAFE_ASSERT_BREAK(plugin->getId() == pluginId);
uiServerSendPluginParameters(plugin);
}
break;

case ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED:
std::sprintf(strBuf, "PARAMETER_VALUE_%i:%i\n", pluginId, value1);
fUiServer.writeMsg(strBuf);
std::sprintf(strBuf, "%f\n", value3);
fUiServer.writeMsg(strBuf);
case ENGINE_CALLBACK_RELOAD_PROGRAMS:
plugin = getPlugin(pluginId);

if (plugin != nullptr && plugin->isEnabled())
{
CARLA_SAFE_ASSERT_BREAK(plugin->getId() == pluginId);
uiServerSendPluginPrograms(plugin);
}
break;

case ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED:
std::sprintf(strBuf, "PARAMETER_DEFAULT_%i:%i\n", pluginId, value1);
fUiServer.writeMsg(strBuf);
std::sprintf(strBuf, "%f\n", value3);
fUiServer.writeMsg(strBuf);
case ENGINE_CALLBACK_RELOAD_ALL:
case ENGINE_CALLBACK_PLUGIN_ADDED:
plugin = getPlugin(pluginId);

if (plugin != nullptr && plugin->isEnabled())
{
CARLA_SAFE_ASSERT_BREAK(plugin->getId() == pluginId);
uiServerSendPluginInfo(plugin);
uiServerSendPluginParameters(plugin);
uiServerSendPluginPrograms(plugin);
}
break;

default:
break;
}

std::sprintf(strBuf, "ENGINE_CALLBACK_%i\n", int(action));
fUiServer.writeMsg(strBuf);
std::sprintf(fTmpBuf, "ENGINE_CALLBACK_%i\n", int(action));
fUiServer.writeMsg(fTmpBuf);

std::sprintf(strBuf, "%u\n", pluginId);
fUiServer.writeMsg(strBuf);
std::sprintf(fTmpBuf, "%u\n", pluginId);
fUiServer.writeMsg(fTmpBuf);

std::sprintf(strBuf, "%i\n", value1);
fUiServer.writeMsg(strBuf);
std::sprintf(fTmpBuf, "%i\n", value1);
fUiServer.writeMsg(fTmpBuf);

std::sprintf(strBuf, "%i\n", value2);
fUiServer.writeMsg(strBuf);
std::sprintf(fTmpBuf, "%i\n", value2);
fUiServer.writeMsg(fTmpBuf);

std::sprintf(strBuf, "%f\n", value3);
fUiServer.writeMsg(strBuf);
std::sprintf(fTmpBuf, "%f\n", value3);
fUiServer.writeMsg(fTmpBuf);

fUiServer.writeAndFixMsg(valueStr);
}
@@ -1057,6 +1155,16 @@ protected:
{
fUiServer.setData("/home/falktx/FOSS/GIT-mine/Carla/source/carla-plugin", pData->sampleRate, pHost->uiName);
fUiServer.start();

for (uint i=0; i < pData->curPluginCount; ++i)
{
CarlaPlugin* const plugin(pData->plugins[i].plugin);

if (plugin != nullptr && plugin->isEnabled())
{
uiServerCallback(ENGINE_CALLBACK_PLUGIN_ADDED, i, 0, 0, 0.0f, plugin->getName());
}
}
}
else
{
@@ -1069,17 +1177,30 @@ protected:
CarlaEngine::idle();
fUiServer.idle();

char strBuf[STR_MAX+1];
if (! fUiServer.isOk())
return;

for (uint i=0; i < pData->curPluginCount; ++i)
{
const EnginePluginData& plugData(pData->plugins[i]);
const CarlaPlugin* const plugin(pData->plugins[i].plugin);

std::sprintf(strBuf, "PEAKS_%i\n", i);
fUiServer.writeMsg(strBuf);
std::sprintf(fTmpBuf, "PEAKS_%i\n", i);
fUiServer.writeMsg(fTmpBuf);

std::sprintf(strBuf, "%f:%f:%f:%f\n", plugData.insPeak[0], plugData.insPeak[1], plugData.outsPeak[0], plugData.outsPeak[1]);
fUiServer.writeMsg(strBuf);
std::sprintf(fTmpBuf, "%f:%f:%f:%f\n", plugData.insPeak[0], plugData.insPeak[1], plugData.outsPeak[0], plugData.outsPeak[1]);
fUiServer.writeMsg(fTmpBuf);

for (uint32_t j=0, count=plugin->getParameterCount(); j < count; ++j)
{
if (plugin->isParameterOutput(j))
continue;

std::sprintf(fTmpBuf, "PARAMVAL_%i:%i\n", i, j);
fUiServer.writeMsg(fTmpBuf);
std::sprintf(fTmpBuf, "%f\n", plugin->getParameterValue(j));
fUiServer.writeMsg(fTmpBuf);
}
}

switch (fUiServer.getAndResetUiState())
@@ -1155,7 +1276,7 @@ protected:
return;
}

bool pluginsAdded = false;
//bool pluginsAdded = false;

for (QDomNode node = xmlNode.firstChild(); ! node.isNull(); node = node.nextSibling())
{
@@ -1185,12 +1306,12 @@ protected:
plugin->loadSaveState(saveState);
}

pluginsAdded = true;
//pluginsAdded = true;
}
}

if (pluginsAdded)
pHost->dispatcher(pHost->handle, HOST_OPCODE_RELOAD_ALL, 0, 0, nullptr, 0.0f);
//if (pluginsAdded)
// pHost->dispatcher(pHost->handle, HOST_OPCODE_RELOAD_ALL, 0, 0, nullptr, 0.0f);
}

// -------------------------------------------------------------------
@@ -1336,7 +1457,7 @@ private:
bool fIsActive, fIsRunning;
CarlaEngineNativeUI fUiServer;

CarlaMutex fWriteLock;
char fTmpBuf[STR_MAX+1];

CarlaPlugin* _getFirstPlugin() const noexcept
{


+ 59
- 27
source/carla-plugin View File

@@ -93,6 +93,9 @@ class PluginHost(object):
def _set_pluginInfo(self, pluginId, info):
self.fPluginsInfo[pluginId].pluginInfo = info

def _set_pluginName(self, pluginId, name):
self.fPluginsInfo[pluginId].pluginInfo['name'] = name

def _set_pluginRealName(self, pluginId, realName):
self.fPluginsInfo[pluginId].pluginRealName = realName

@@ -155,7 +158,7 @@ class PluginHost(object):
if paramIndex < self.fPluginsInfo[pluginId].parameterCount:
self.fPluginsInfo[pluginId].parameterValueS[paramIndex] = value

def _set_parameterDefaultValue(self, pluginId, paramIndex, value):
def _set_parameterDefault(self, pluginId, paramIndex, value):
if paramIndex < self.fPluginsInfo[pluginId].parameterCount:
self.fPluginsInfo[pluginId].parameterRangeS[paramIndex]['def'] = value

@@ -555,6 +558,11 @@ class CarlaMiniW(HostWindow, ExternalUI):
in1, in2, out1, out2 = [float(i) for i in self.fPipeRecv.readline().strip().split(":")]
Carla.host._set_peaks(pluginId, in1, in2, out1, out2)

elif msg.startswith("PARAMVAL_"):
pluginId, paramId = [int(i) for i in msg.replace("PARAMVAL_", "").split(":")]
paramValue = float(self.fPipeRecv.readline().strip())
Carla.host._set_parameterValueS(pluginId, paramId, paramValue)

elif msg.startswith("ENGINE_CALLBACK_"):
action = int(msg.replace("ENGINE_CALLBACK_", ""))
pluginId = int(self.fPipeRecv.readline().strip())
@@ -562,15 +570,33 @@ class CarlaMiniW(HostWindow, ExternalUI):
value2 = int(self.fPipeRecv.readline().strip())
value3 = float(self.fPipeRecv.readline().strip())
valueStr = self.fPipeRecv.readline().strip().replace("\r", "\n")

if action == ENGINE_CALLBACK_PLUGIN_RENAMED:
Carla.host._set_pluginName(pluginId, valueStr)
elif action == ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED:
Carla.host._set_parameterValueS(pluginId, value1, value3)
elif action == ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED:
Carla.host._set_parameterDefault(pluginId, value1, value3)
elif action == ENGINE_CALLBACK_PARAMETER_MIDI_CC_CHANGED:
Carla.host._set_parameterMidiCC(pluginId, value1, value2)
elif action == ENGINE_CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED:
Carla.host._set_parameterMidiChannel(pluginId, value1, value2)
elif action == ENGINE_CALLBACK_PROGRAM_CHANGED:
Carla.host._set_currentProgram(pluginId, value1)
elif action == ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED:
Carla.host._set_currentMidiProgram(pluginId, value1)

engineCallback(None, action, pluginId, value1, value2, value3, valueStr)

elif msg.startswith("PLUGIN_INFO_"):
pluginId = int(msg.replace("PLUGIN_INFO_", ""))
Carla.host._add(pluginId)

type_, category, hints, uniqueId = [int(i) for i in self.fPipeRecv.readline().strip().split(":")]
realName = self.fPipeRecv.readline().strip().replace("\r", "\n")
type_, category, hints, uniqueId, optsAvail, optsEnabled = [int(i) for i in self.fPipeRecv.readline().strip().split(":")]
filename = self.fPipeRecv.readline().strip().replace("\r", "\n")
name = self.fPipeRecv.readline().strip().replace("\r", "\n")
iconName = self.fPipeRecv.readline().strip().replace("\r", "\n")
realName = self.fPipeRecv.readline().strip().replace("\r", "\n")
label = self.fPipeRecv.readline().strip().replace("\r", "\n")
maker = self.fPipeRecv.readline().strip().replace("\r", "\n")
copyright = self.fPipeRecv.readline().strip().replace("\r", "\n")
@@ -579,39 +605,35 @@ class CarlaMiniW(HostWindow, ExternalUI):
'type': type_,
'category': category,
'hints': hints,
'optionsAvailable': 0x0, # TODO
'optionsEnabled': 0x0, # TODO
'filename': "", # TODO
'optionsAvailable': optsAvail,
'optionsEnabled': optsEnabled,
'filename': filename,
'name': name,
'label': label,
'maker': maker,
'copyright': copyright,
'iconName': None, # TODO
'iconName': iconName,
'patchbayClientId': 0,
'uniqueId': uniqueId
}

Carla.host._set_pluginInfo(pluginId, pinfo)
Carla.host._set_pluginRealName(pluginId, realName)

elif msg.startswith("AUDIO_COUNT_"):
pluginId = int(msg.replace("AUDIO_COUNT_", ""))
ins, outs = [int(i) for i in self.fPipeRecv.readline().strip().split(":")]
pluginId, ins, outs = [int(i) for i in msg.replace("AUDIO_COUNT_", "").split(":")]
Carla.host._set_audioCountInfo(pluginId, {'ins': ins, 'outs': outs})

elif msg.startswith("MIDI_COUNT_"):
pluginId = int(msg.replace("MIDI_COUNT_", ""))
ins, outs = [int(i) for i in self.fPipeRecv.readline().strip().split(":")]
pluginId, ins, outs = [int(i) for i in msg.replace("MIDI_COUNT_", "").split(":")]
Carla.host._set_midiCountInfo(pluginId, {'ins': ins, 'outs': outs})

elif msg.startswith("PARAMETER_COUNT_"):
pluginId = int(msg.replace("PARAMETER_COUNT_", ""))
ins, outs, count = [int(i) for i in self.fPipeRecv.readline().strip().split(":")]
pluginId, ins, outs, count = [int(i) for i in msg.replace("PARAMETER_COUNT_", "").split(":")]
Carla.host._set_parameterCountInfo(pluginId, count, {'ins': ins, 'outs': outs})

elif msg.startswith("PARAMETER_DATA_"):
pluginId, paramId = [int(i) for i in msg.replace("PARAMETER_DATA_", "").split(":")]
paramType, paramHints = [int(i) for i in self.fPipeRecv.readline().strip().split(":")]
paramType, paramHints, midiChannel, midiCC = [int(i) for i in self.fPipeRecv.readline().strip().split(":")]
paramName = self.fPipeRecv.readline().strip().replace("\r", "\n")
paramUnit = self.fPipeRecv.readline().strip().replace("\r", "\n")

@@ -628,17 +650,11 @@ class CarlaMiniW(HostWindow, ExternalUI):
'hints': paramHints,
'index': paramId,
'rindex': -1,
'midiCC': -1,
'midiChannel': 0
'midiCC': midiCC,
'midiChannel': midiChannel
}
Carla.host._set_parameterDataS(pluginId, paramId, paramData)

elif msg.startswith("PARAMETER_MIDI_STUFF_"):
pluginId, paramId = [int(i) for i in msg.replace("PARAMETER_MIDI_STUFF_", "").split(":")]
midiChannel, midiCC = [int(i) for i in self.fPipeRecv.readline().strip().split(":")]
Carla.host._set_parameterMidiChannel(pluginId, paramId, midiChannel)
Carla.host._set_parameterMidiCC(pluginId, paramId, midiCC)

elif msg.startswith("PARAMETER_RANGES_"):
pluginId, paramId = [int(i) for i in msg.replace("PARAMETER_RANGES_", "").split(":")]
def_, min_, max_, step, stepSmall, stepLarge = [float(i) for i in self.fPipeRecv.readline().strip().split(":")]
@@ -653,10 +669,26 @@ class CarlaMiniW(HostWindow, ExternalUI):
}
Carla.host._set_parameterRangeS(pluginId, paramId, paramRanges)

elif msg.startswith("PARAMETER_VALUE_"):
pluginId, paramId = [int(i) for i in msg.replace("PARAMETER_VALUE_", "").split(":")]
paramValue = float(self.fPipeRecv.readline().strip())
Carla.host._set_parameterValueS(pluginId, paramId, paramValue)
elif msg.startswith("PROGRAM_COUNT_"):
pluginId, count, current = [int(i) for i in msg.replace("PROGRAM_COUNT_", "").split(":")]
Carla.host._set_programCount(pluginId, count)
Carla.host._set_currentProgram(pluginId, current)

elif msg.startswith("PROGRAM_NAME_"):
pluginId, progId = [int(i) for i in msg.replace("PROGRAM_NAME_", "").split(":")]
progName = self.fPipeRecv.readline().strip().replace("\r", "\n")
Carla.host._set_programNameS(pluginId, progId, progName)

elif msg.startswith("MIDI_PROGRAM_COUNT_"):
pluginId, count, current = [int(i) for i in msg.replace("MIDI_PROGRAM_COUNT_", "").split(":")]
Carla.host._set_midiProgramCount(pluginId, count)
Carla.host._set_currentMidiProgram(pluginId, current)

elif msg.startswith("MIDI_PROGRAM_DATA_"):
pluginId, midiProgId = [int(i) for i in msg.replace("MIDI_PROGRAM_DATA_", "").split(":")]
bank, program = [int(i) for i in self.fPipeRecv.readline().strip().split(":")]
name = self.fPipeRecv.readline().strip().replace("\r", "\n")
Carla.host._set_midiProgramDataS(pluginId, midiProgId, {'bank': bank, 'program': program, 'name': name})

elif msg == "show":
self.d_uiShow()


+ 5
- 0
source/utils/CarlaPipeUtils.hpp View File

@@ -58,6 +58,11 @@ public:
stop();
}

bool isOk() const noexcept
{
return (fPipeRecv != -1 && fPipeSend != -1 && fPid != -1);
}

bool start(const char* const filename, const char* const arg1, const char* const arg2)
{
CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false);


Loading…
Cancel
Save