11namespace tracktion {
inline namespace engine
17 : track (at), input (
std::
move (inputNode))
19 setOptimisations ({ tracktion::graph::ClearBuffers::no,
20 tracktion::graph::AllocateAudioBuffer::no });
22 track->addListener (
this);
25LiveMidiInjectingNode::~LiveMidiInjectingNode()
27 track->removeListener (
this);
33 auto props = input->getNodeProperties();
35 hash_combine (props.nodeID, track->itemID.getRawID());
42 return { input.get() };
47 if (
auto oldNode = findNodeWithIDIfNonZero<LiveMidiInjectingNode> (info.nodeGraphToReplace, getNodeProperties().nodeID))
49 if (oldNode->track == track)
52 liveMidiMessages.swapWith (oldNode->liveMidiMessages);
53 midiSourceID = oldNode->midiSourceID;
58bool LiveMidiInjectingNode::isReadyToProcess()
60 return input->hasProcessed();
65 auto sourceBuffers = input->getProcessedOutput();
66 auto& destMidiBlock = pc.buffers.midi;
67 jassert (sourceBuffers.audio.getSize() == pc.buffers.audio.getSize());
69 destMidiBlock.copyFrom (sourceBuffers.midi);
70 setAudioOutput (input.get(), sourceBuffers.audio);
74 if (liveMidiMessages.isEmpty())
77 destMidiBlock.mergeFromAndClear (liveMidiMessages);
86 liveMidiMessages.add (std::move (mm));
90void LiveMidiInjectingNode::injectLiveMidiMessage (
AudioTrack& at,
const MidiMessageArray::MidiMessageWithSource& mm,
bool& wasUsed)
92 if (&at != track.get())
void setTimeStamp(double newTimestamp) noexcept
Struct to describe a single iteration of a process call.
Holds some really basic properties of a node.
Passed into Nodes when they are being initialised, to give them useful contextual information that th...