Skip to content
Snippets Groups Projects
Commit db2f7e64 authored by jsiegle's avatar jsiegle
Browse files

Add option to merge either continuous or event channels alone

parent ea20adea
Branches
Tags
No related merge requests found
......@@ -30,7 +30,9 @@
Merger::Merger()
: GenericProcessor("Merger"),
sourceNodeA(0), sourceNodeB(0), activePath(0), mergeEvents(true), mergeContinuous(true)
sourceNodeA(0), sourceNodeB(0), activePath(0),
mergeEventsA(true), mergeContinuousA(true),
mergeEventsB(true), mergeContinuousB(true)
{
sendSampleCount = false;
}
......@@ -93,6 +95,32 @@ void Merger::switchIO(int sourceNum)
}
bool Merger::sendContinuousForSource(GenericProcessor* sourceNode)
{
if (sourceNode == sourceNodeA)
{
return mergeContinuousA;
} else if (sourceNode == sourceNodeB)
{
return mergeContinuousB;
}
return false;
}
bool Merger::sendEventsForSource(GenericProcessor* sourceNode)
{
if (sourceNode == sourceNodeA)
{
return mergeEventsA;
} else if (sourceNode == sourceNodeB)
{
return mergeEventsB;
}
return false;
}
bool Merger::stillHasSource()
{
if (sourceNodeA == 0 || sourceNodeB == 0)
......@@ -127,31 +155,33 @@ void Merger::switchIO()
void Merger::addSettingsFromSourceNode(GenericProcessor* sn)
{
settings.numInputs += sn->getNumOutputs();
//settings.inputChannelNames.addArray(sn->settings.inputChannelNames);
//settings.eventChannelIds.addArray(sn->settings.eventChannelIds);
//settings.eventChannelNames.addArray(sn->settings.eventChannelNames);
//settings.bitVolts.addArray(sn->settings.bitVolts);
for (int i = 0; i < sn->channels.size(); i++)
if (sendContinuousForSource(sn))
{
Channel* sourceChan = sn->channels[i];
Channel* ch = new Channel(*sourceChan);
channels.add(ch);
settings.numInputs += sn->getNumOutputs();
for (int i = 0; i < sn->channels.size(); i++)
{
Channel* sourceChan = sn->channels[i];
Channel* ch = new Channel(*sourceChan);
channels.add(ch);
}
}
for (int i = 0; i < sn->eventChannels.size(); i++)
if (sendEventsForSource(sn))
{
Channel* sourceChan = sn->eventChannels[i];
Channel* ch = new Channel(*sourceChan);
eventChannels.add(ch);
for (int i = 0; i < sn->eventChannels.size(); i++)
{
Channel* sourceChan = sn->eventChannels[i];
Channel* ch = new Channel(*sourceChan);
eventChannels.add(ch);
}
}
settings.originalSource = sn->settings.originalSource;
settings.sampleRate = sn->settings.sampleRate;
settings.numOutputs = settings.numInputs;
//settings.outputChannelNames = settings.inputChannelNames;
}
......
......@@ -71,7 +71,10 @@ public:
void saveCustomParametersToXml(XmlElement* parentElement);
void loadCustomParametersFromXml();
bool mergeEvents, mergeContinuous;
bool sendContinuousForSource(GenericProcessor* sn);
bool sendEventsForSource(GenericProcessor* sn);
bool mergeEventsA, mergeContinuousA, mergeEventsB, mergeContinuousB;
private:
......
......@@ -154,9 +154,21 @@ void MergerEditor::mouseDown(const MouseEvent& e)
int eventMerge = ++i;
int continuousMerge = ++i;
bool* eventPtr;
bool* continuousPtr;
if (pipelineSelectorA->getToggleState())
{
eventPtr = &merger->mergeEventsA;
continuousPtr = &merger->mergeContinuousA;
} else {
eventPtr = &merger->mergeEventsB;
continuousPtr = &merger->mergeContinuousB;
}
//m.addItem(eventMerge, "Events", !acquisitionIsActive, merger->mergeEvents);
//m.addItem(continuousMerge, "Continuous", !acquisitionIsActive, merger->mergeContinuous);
m.addItem(eventMerge, "Events", !acquisitionIsActive, *eventPtr);
m.addItem(continuousMerge, "Continuous", !acquisitionIsActive, *continuousPtr);
const int result = m.show();
......@@ -175,10 +187,10 @@ void MergerEditor::mouseDown(const MouseEvent& e)
getEditorViewport()->makeEditorVisible(this, false, true);
} else if (result == eventMerge)
{
merger->mergeEvents = !merger->mergeEvents;
*eventPtr = !(*eventPtr);
} else if (result == continuousMerge)
{
merger->mergeContinuous = !merger->mergeContinuous;
*continuousPtr = !(*continuousPtr);
}
}
......
......@@ -438,26 +438,41 @@ void ProcessorGraph::connectProcessors(GenericProcessor* source, GenericProcesso
std::cout << " Connecting " << source->getName() << " " << source->getNodeId(); //" channel ";
std::cout << " to " << dest->getName() << " " << dest->getNodeId() << std::endl;
bool connectContinuous = true;
bool connectEvents = true;
if (source->getDestNode() != nullptr)
{
if (source->getDestNode()->isMerger())
{
Merger* merger = (Merger*) source->getDestNode();
connectContinuous = merger->sendContinuousForSource(source);
connectEvents = merger->sendEventsForSource(source);
}
}
// 1. connect continuous channels
for (int chan = 0; chan < source->getNumOutputs(); chan++)
if (connectContinuous)
{
//std::cout << chan << " ";
for (int chan = 0; chan < source->getNumOutputs(); chan++)
{
//std::cout << chan << " ";
addConnection(source->getNodeId(), // sourceNodeID
chan, // sourceNodeChannelIndex
dest->getNodeId(), // destNodeID
dest->getNextChannel(true)); // destNodeChannelIndex
addConnection(source->getNodeId(), // sourceNodeID
chan, // sourceNodeChannelIndex
dest->getNodeId(), // destNodeID
dest->getNextChannel(true)); // destNodeChannelIndex
}
}
// std::cout << " Connecting " << source->getName() <<
// " event channel to " <<
// dest->getName() << std::endl;
// 2. connect event channel
addConnection(source->getNodeId(), // sourceNodeID
midiChannelIndex, // sourceNodeChannelIndex
dest->getNodeId(), // destNodeID
midiChannelIndex); // destNodeChannelIndex
if (connectEvents)
{
addConnection(source->getNodeId(), // sourceNodeID
midiChannelIndex, // sourceNodeChannelIndex
dest->getNodeId(), // destNodeID
midiChannelIndex); // destNodeChannelIndex
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment