void MessageLine::processMessage(int inletIndex, PdMessage *message) { switch (inletIndex) { case 0: { MessageElement *messageElement = message->getElement(0); switch (messageElement->getType()) { case FLOAT: { MessageElement *messageElement1 = message->getElement(1); if (messageElement1 != NULL && messageElement1->getType() == FLOAT) { // start a new line processDspToIndex(message->getBlockIndex()); float delayInMs = StaticUtils::millisecondsToSamples( messageElement1->getFloat(), sampleRate); samplesToTarget = lrintf(delayInMs); target = messageElement->getFloat(); slope = (target - lastValue) / delayInMs; } else { // set the current value processDspToIndex(message->getBlockIndex()); target = messageElement->getFloat(); lastValue = target; slope = 0.0f; samplesToTarget = -1; } PdMessage *outgoingMessage = getNextOutgoingMessage(0); outgoingMessage->getElement(0)->setFloat(lastValue); outgoingMessage->setBlockIndex(message->getBlockIndex()); break; } case SYMBOL: { MessageElement *messageElement = message->getElement(0); if (strcmp(messageElement->getSymbol(), "stop") == 0) { processDspToIndex(message->getBlockIndex()); samplesToTarget = -1; } else if (strcmp(messageElement->getSymbol(), "set") == 0) { MessageElement *messageElement1 = message->getElement(0); if (messageElement1 != NULL && messageElement1->getType() == FLOAT) { processDspToIndex(message->getBlockIndex()); target = messageElement1->getFloat(); lastValue = target; samplesToTarget = -1; } } break; } default: { break; } } break; } case 1: { // not sure what to do in this case break; } default: { break; } } }
void DspDelayRead::processMessage(int inletIndex, PdMessage *message) { if (message->getElement(0)->getType() == FLOAT) { // update the delay time processDspToIndex(graph->getBlockIndex(message)); delayInSamples = StaticUtils::millisecondsToSamples(message->getElement(0)->getFloat(), graph->getSampleRate()); delayInSamplesInt = (int) delayInSamples; } }
inline void DspSig::processMessage(int inletIndex, PdMessage *message) { if (inletIndex == 0) { MessageElement *messageElement = message->getElement(0); if (messageElement != NULL && messageElement->getType() == FLOAT) { processDspToIndex(message->getBlockIndex()); constWasReset = constant != messageElement->getFloat(); constant = messageElement->getFloat(); } } }
inline void DspLine::processMessage(int inletIndex, PdMessage *message) { if (inletIndex == 0) { // not sure what the right inlet is for switch (message->getNumElements()) { case 0: { break; // nothing to do } case 1: { // jump to value MessageElement *messageElement = message->getElement(0); if (messageElement->getType() == FLOAT) { processDspToIndex(message->getBlockIndex()); blockIndexOfLastMessage = message->getBlockIndex(); target = messageElement->getFloat(); lastOutputSample = target; slope = 0.0f; numSamplesToTarget = 0; } break; } default: { // at least two inputs // new ramp MessageElement *messageElement0 = message->getElement(0); MessageElement *messageElement1 = message->getElement(1); if (messageElement0 != NULL && messageElement0->getType() == FLOAT && messageElement1 != NULL && messageElement1->getType() == FLOAT) { processDspToIndex(message->getBlockIndex()); blockIndexOfLastMessage = message->getBlockIndex(); target = messageElement0->getFloat(); float timeToTargetMs = messageElement1->getFloat(); // no negative time to targets! float fractionalSamplesToTarget = StaticUtils::millisecondsToSamples( (timeToTargetMs < 1.0f) ? 1.0f : timeToTargetMs, sampleRate); slope = (target - lastOutputSample) / fractionalSamplesToTarget; numSamplesToTarget = (int) fractionalSamplesToTarget; } break; } } } }
void MessageTimer::processMessage(int inletIndex, PdMessage *message) { switch (inletIndex) { case 0: { MessageElement *messageElement = message->getElement(0); if (messageElement->getType() == BANG) { processDspToIndex(message->getBlockIndex()); elapsedSamples = 0.0f; } break; } case 1: { // return the elapsed number milliseconds processDspToIndex(message->getBlockIndex()); PdMessage *outgoingMessage = getNextOutgoingMessage(0); outgoingMessage->getElement(0)->setFloat(1000.0f * elapsedSamples / sampleRate); outgoingMessage->setBlockIndexAsFloat(message->getBlockIndexAsFloat()); break; } default: { break; } } }
void DspHighpassFilter::processMessage(int inletIndex, PdMessage *message) { switch (inletIndex) { case 0: { if (message->isSymbol(0) && strcmp(message->getSymbol(0), "clear") == 0) { processDspToIndex(graph->getBlockIndex(message)); tapIn = 0.0f; tapOut = 0.0f; memset(filterInputBuffer, 0, (blockSizeInt+2) * sizeof(float)); memset(filterOutputBuffer, 0, (blockSizeInt+2) * sizeof(float)); } break; } case 1: { if (message->isFloat(0)) { processDspToIndex(graph->getBlockIndex(message)); calculateFilterCoefficients(message->getFloat(0)); } break; } default: { break; } } }
inline void DspTableRead::processMessage(int inletIndex, PdMessage *message) { if (inletIndex == 0) { if (message->getNumElements() > 1) { MessageElement *messageElement0 = message->getElement(0); if (messageElement0 != NULL && messageElement0->getType() == SYMBOL && strcmp(messageElement0->getSymbol(), "set") == 0) { MessageElement *messageElement1 = message->getElement(1); if (messageElement1 != NULL && messageElement1->getType() == SYMBOL) { DspTable *newTable = pdGraph->getTable(messageElement1->getSymbol()); if (newTable != NULL) { processDspToIndex(message->getBlockIndex()); blockIndexOfLastMessage = message->getBlockIndex(); setRemoteBuffer(newTable); } } } } } }
void DspPhasor::processMessage(int inletIndex, PdMessage *message) { switch (inletIndex) { case 0: { // update the frequency MessageElement *messageElement = message->getElement(0); if (messageElement->getType() == FLOAT) { processDspToIndex(message->getBlockIndex(graph->getBlockStartTimestamp(), graph->getSampleRate())); frequency = messageElement->getFloat(); } break; } case 1: { // update the phase // TODO(mhroth) break; } default: { break; } } }
void DspSignal::processMessage(int inletIndex, PdMessage *message) { if (message->isFloat(0)) { processDspToIndex(message->getBlockIndex(graph->getBlockStartTimestamp(), graph->getSampleRate())); constant = message->getFloat(0); } }
void DspSignal::processMessage(int inletIndex, PdMessage *message) { if (message->isFloat(0)) { processDspToIndex(graph->getBlockIndex(message)); constant = message->getFloat(0); } }
void DspMessageInputDspOutputObject::process() { blockIndexOfLastMessage = 0; // reset the block index of the last message prepareInputBuffers(); // sum all of the incoming DSP streams to the local inlet buffers processMessages(); // process all the incoming messages processDspToIndex(blockSize); // finish processing the local dsp }
void MessageInputDspOutputObject::process() { blockIndexOfLastMessage = 0; processMessages(); // process incoming messages processDspToIndex(blockSize); }