Midi Bindings for split controls.
This commit is contained in:
+9
-20
@@ -261,15 +261,15 @@ void Lv2Pedalboard::PrepareMidiMap(const PedalboardItem &pedalboardItem)
|
||||
{
|
||||
if (pedalboardItem.midiBindings().size() != 0)
|
||||
{
|
||||
auto pluginInfo = pHost->GetPluginInfo(pedalboardItem.uri());
|
||||
const Lv2PluginInfo *pPluginInfo;
|
||||
if (pluginInfo == nullptr && pedalboardItem.uri() == SPLIT_PEDALBOARD_ITEM_URI)
|
||||
Lv2PluginInfo::ptr pluginInfo;
|
||||
if (pedalboardItem.uri() == SPLIT_PEDALBOARD_ITEM_URI)
|
||||
{
|
||||
pPluginInfo = GetSplitterPluginInfo();
|
||||
pluginInfo = GetSplitterPluginInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
pPluginInfo = pluginInfo.get();
|
||||
pluginInfo = pHost->GetPluginInfo(pedalboardItem.uri());
|
||||
|
||||
}
|
||||
|
||||
int effectIndex = this->GetIndexOfInstanceId(pedalboardItem.instanceId());
|
||||
@@ -351,21 +351,10 @@ void Lv2Pedalboard::PrepareMidiMap(const Pedalboard &pedalboard)
|
||||
auto &item = pedalboard.items()[i];
|
||||
PrepareMidiMap(item);
|
||||
|
||||
auto pluginInfo = pHost->GetPluginInfo(item.uri());
|
||||
|
||||
if (pluginInfo)
|
||||
{
|
||||
for (size_t bindingIndex = 0; bindingIndex < item.midiBindings().size(); ++bindingIndex)
|
||||
{
|
||||
auto &binding = item.midiBindings()[i];
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
std::sort(this->midiMappings.begin(), this->midiMappings.end(),
|
||||
[](const MidiMapping &left, const MidiMapping &right)
|
||||
{ return left.key < right.key; });
|
||||
}
|
||||
std::sort(this->midiMappings.begin(), this->midiMappings.end(),
|
||||
[](const MidiMapping &left, const MidiMapping &right)
|
||||
{ return left.key < right.key; });
|
||||
}
|
||||
void Lv2Pedalboard::Activate()
|
||||
{
|
||||
@@ -606,7 +595,7 @@ void Lv2Pedalboard::OnMidiMessage(size_t size, uint8_t *message,
|
||||
if (size < 3)
|
||||
return;
|
||||
index = message[1];
|
||||
value = 127;
|
||||
value = message[2] == 0? 0: 127; // zero velocity = note off.
|
||||
}
|
||||
else if (cmd == 0xB0) // midi control.
|
||||
{
|
||||
|
||||
@@ -1266,21 +1266,20 @@ void PiPedalModel::OnNotifyMidiValueChanged(int64_t instanceId, int portIndex, f
|
||||
PedalboardItem *item = this->pedalboard.GetItem(instanceId);
|
||||
if (item)
|
||||
{
|
||||
const Lv2PluginInfo *pPluginInfo;
|
||||
Lv2PluginInfo::ptr pPluginInfo;
|
||||
if (item->uri() == SPLIT_PEDALBOARD_ITEM_URI)
|
||||
{
|
||||
pPluginInfo = GetSplitterPluginInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
auto pluginInfo = lv2Host.GetPluginInfo(item->uri());
|
||||
pPluginInfo = pluginInfo.get();
|
||||
pPluginInfo = lv2Host.GetPluginInfo(item->uri());
|
||||
}
|
||||
if (pPluginInfo)
|
||||
{
|
||||
if (portIndex == -1)
|
||||
{
|
||||
// bypass!
|
||||
// bypass! yyy this->value!!!
|
||||
this->pedalboard.SetItemEnabled(instanceId, value != 0);
|
||||
// take a snapshot incase a client unsusbscribes in the notification handler (in which case the mutex won't protect us)
|
||||
IPiPedalModelSubscriber **t = new IPiPedalModelSubscriber *[this->subscribers.size()];
|
||||
@@ -1675,16 +1674,15 @@ void PiPedalModel::SetJackServerSettings(const JackServerSettings &jackServerSet
|
||||
|
||||
void PiPedalModel::UpdateDefaults(PedalboardItem *pedalboardItem)
|
||||
{
|
||||
std::shared_ptr<Lv2PluginInfo> t = lv2Host.GetPluginInfo(pedalboardItem->uri());
|
||||
const Lv2PluginInfo *pPlugin = t.get();
|
||||
if (pPlugin == nullptr)
|
||||
std::shared_ptr<Lv2PluginInfo> pPlugin = lv2Host.GetPluginInfo(pedalboardItem->uri());
|
||||
if (!pPlugin)
|
||||
{
|
||||
if (pedalboardItem->uri() == SPLIT_PEDALBOARD_ITEM_URI)
|
||||
{
|
||||
pPlugin = GetSplitterPluginInfo();
|
||||
}
|
||||
}
|
||||
if (pPlugin != nullptr)
|
||||
if (pPlugin)
|
||||
{
|
||||
for (size_t i = 0; i < pPlugin->ports().size(); ++i)
|
||||
{
|
||||
|
||||
@@ -1353,6 +1353,10 @@ Lv2PortGroup::Lv2PortGroup(PluginHost *lv2Host, const std::string &groupUri)
|
||||
name_ = nodeAsString(nameNode);
|
||||
}
|
||||
|
||||
bool Lv2PluginInfo::isSplit() const
|
||||
{
|
||||
return uri_ == SPLIT_PEDALBOARD_ITEM_URI;
|
||||
}
|
||||
std::shared_ptr<HostWorkerThread> PluginHost::GetHostWorkerThread()
|
||||
{
|
||||
return pHostWorkerThread;
|
||||
|
||||
@@ -337,8 +337,10 @@ namespace pipedal
|
||||
friend class PluginHost;
|
||||
|
||||
public:
|
||||
using ptr = std::shared_ptr<Lv2PluginInfo>;
|
||||
Lv2PluginInfo(PluginHost *lv2Host, LilvWorld *pWorld, const LilvPlugin *);
|
||||
Lv2PluginInfo() {}
|
||||
bool isSplit() const ;
|
||||
|
||||
private:
|
||||
std::shared_ptr<PiPedalUI> FindWritablePathProperties(PluginHost *lv2Host, const LilvPlugin *pPlugin);
|
||||
|
||||
+4
-2
@@ -33,6 +33,8 @@ static std::shared_ptr<Lv2PortInfo> MakeBypassPortInfo()
|
||||
bypassPortInfo->is_input(true);
|
||||
bypassPortInfo->is_control_port(true);
|
||||
bypassPortInfo->index(-1);
|
||||
|
||||
|
||||
bypassPortInfo->min_value(0);
|
||||
bypassPortInfo->max_value(1);
|
||||
bypassPortInfo->default_value(1);
|
||||
@@ -159,9 +161,9 @@ static Lv2PluginInfo makeSplitterPluginInfo()
|
||||
return result;
|
||||
}
|
||||
|
||||
Lv2PluginInfo g_splitterPluginInfo = makeSplitterPluginInfo();
|
||||
Lv2PluginInfo::ptr g_splitterPluginInfo = std::make_shared<Lv2PluginInfo>(makeSplitterPluginInfo());
|
||||
|
||||
const Lv2PluginInfo *pipedal::GetSplitterPluginInfo() { return &g_splitterPluginInfo; }
|
||||
Lv2PluginInfo::ptr pipedal::GetSplitterPluginInfo() { return g_splitterPluginInfo; }
|
||||
|
||||
int SplitEffect::GetControlIndex(const std::string &symbol) const
|
||||
{
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ namespace pipedal
|
||||
class Lv2PluginInfo;
|
||||
class Lv2PortInfo;
|
||||
|
||||
const Lv2PluginInfo *GetSplitterPluginInfo();
|
||||
std::shared_ptr<Lv2PluginInfo> GetSplitterPluginInfo();
|
||||
|
||||
const Lv2PortInfo *GetBypassPortInfo();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user