1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

AAX midi out.

This commit is contained in:
jules 2013-01-20 19:19:00 +00:00
parent f68d0af5c2
commit 46b16cb921

View file

@ -183,6 +183,7 @@ struct AAXClasses
int32_t* bufferSize;
int32_t* bypass;
AAX_IMIDINode* midiNodeIn;
AAX_IMIDINode* midiNodeOut;
PluginInstanceInfo* pluginInstance;
int32_t* isPrepared;
@ -197,6 +198,7 @@ struct AAXClasses
bufferSize = AAX_FIELD_INDEX (JUCEAlgorithmContext, bufferSize),
bypass = AAX_FIELD_INDEX (JUCEAlgorithmContext, bypass),
midiNodeIn = AAX_FIELD_INDEX (JUCEAlgorithmContext, midiNodeIn),
midiNodeOut = AAX_FIELD_INDEX (JUCEAlgorithmContext, midiNodeOut),
pluginInstance = AAX_FIELD_INDEX (JUCEAlgorithmContext, pluginInstance),
preparedFlag = AAX_FIELD_INDEX (JUCEAlgorithmContext, isPrepared)
};
@ -503,7 +505,7 @@ struct AAXClasses
}
void process (const float* const* inputs, float* const* outputs, const int bufferSize,
const bool bypass, AAX_IMIDINode* midiNodeIn)
const bool bypass, AAX_IMIDINode* midiNodeIn, AAX_IMIDINode* midiNodeOut)
{
const int numIns = pluginInstance->getNumInputChannels();
const int numOuts = pluginInstance->getNumOutputChannels();
@ -513,7 +515,7 @@ struct AAXClasses
for (int i = 0; i < numIns; ++i)
memcpy (outputs[i], inputs[i], bufferSize * sizeof (float));
process (outputs, numOuts, bufferSize, bypass, midiNodeIn);
process (outputs, numOuts, bufferSize, bypass, midiNodeIn, midiNoteOut);
}
else
{
@ -531,7 +533,7 @@ struct AAXClasses
for (int i = numOuts; i < numIns; ++i)
channels[i] = const_cast <float*> (inputs[i]);
process (channels, numIns, bufferSize, bypass, midiNodeIn);
process (channels, numIns, bufferSize, bypass, midiNodeIn, midiNoteOut);
}
}
@ -566,7 +568,7 @@ struct AAXClasses
};
void process (float* const* channels, const int numChans, const int bufferSize,
const bool bypass, AAX_IMIDINode* midiNodeIn)
const bool bypass, AAX_IMIDINode* midiNodeIn, AAX_IMIDINode* midiNodeOut)
{
AudioSampleBuffer buffer (channels, numChans, bufferSize);
@ -598,6 +600,31 @@ struct AAXClasses
else
pluginInstance->processBlock (buffer, midiBuffer);
}
#if JucePlugin_ProducesMidiOutput
{
const juce::uint8* midiEventData;
int midiEventSize, midiEventPosition;
MidiBuffer::Iterator i (midiBuffer);
AAX_CMidiPacket packet;
packet.mIsImmediate = false;
while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition))
{
jassert (isPositiveAndBelow (midiEventPosition, bufferSize));
if (midiEventSize <= 4)
{
packet.mTimestamp = (uint32_t) midiEventPosition;
packet.mLength = (uint32_t) midiEventSize;
memcpy (packet.mData, midiEventData, midiEventSize);
check (midiNodeOut->PostMIDIPacket (&packet));
}
}
}
#endif
}
void addBypassParameter()
@ -689,7 +716,7 @@ struct AAXClasses
i.pluginInstance->parameters.process (i.inputChannels, i.outputChannels,
*(i.bufferSize), *(i.bypass) != 0,
i.midiNodeIn);
i.midiNodeIn, i.midiNodeOut);
}
}
@ -707,6 +734,11 @@ struct AAXClasses
JucePlugin_Name, 0xffff));
#endif
#if JucePlugin_ProducesMidiOutput
check (desc.AddMIDINode (JUCEAlgorithmIDs::midiNodeOut, AAX_eMIDINodeType_LocalOutput,
JucePlugin_Name " Out", 0xffff));
#endif
check (desc.AddPrivateData (JUCEAlgorithmIDs::pluginInstance, sizeof (PluginInstanceInfo)));
// Create a property map