void pdsp::ValueSequencer::process (int bufferSize) noexcept { //std::cout<<"valuesequencer slewLastValue = "<<slewLastValue<<"\n"; if(messageBuffer!=nullptr){ //updateBuffer(messageBuffer, bufferSize); if( messageBuffer->empty() ){ //std::cout<<"message queue empty, broadcasting last value\n"; if(slewRun){ float* outputBuffer = getOutputBufferToFill(output); runSlewBlock( outputBuffer, 0, bufferSize); }else{ setControlRateOutput(output, slewLastValue); } } else { float* outputBuffer = getOutputBufferToFill(output); int n=0; int k=0; int imax = messageBuffer->size(); for( int i=0; i<imax; ++i){ ControlMessage &msg = messageBuffer->messages[i]; //std::cout<<"broadcast message value = "<<messageBuffer->messages[i].value<<"\n"; if(slewRun){ runSlewBlock(outputBuffer, n, msg.sample * getOversampleLevel()); }else{ ofx_Aeq_S_range(outputBuffer, slewLastValue, n, msg.sample * getOversampleLevel()); } if( slewControl != nullptr && (k < slewControl->messages.size()) && (slewControl->messages[k].sample <= msg.sample)) { //std::cout<<"got slew message, value "<<slewControl->messages[k].value<<"\n"; slewTimeMod = slewControl->messages[k].value; k++; } valueChange(msg.value); n = msg.sample * getOversampleLevel(); } if(slewRun){ runSlewBlock(outputBuffer, n, bufferSize ); }else{ ofx_Aeq_S_range(outputBuffer, slewLastValue, n, bufferSize); } //std::cout<<"last message value = "<<slewLastValue<<"\n"; } }else{ setControlRateOutput(output, slewLastValue); } if(slewControl != nullptr && !slewControl->empty() ){ //we set the slew control with the last of the buffer slewTimeMod = slewControl->messages[ slewControl->messages.size() - 1 ].value; } }
void pdsp::Amp::process (int bufferSize) noexcept { int modState; const float* modBuffer = processInput(input_mod, modState); meter.store(modBuffer[0]); if ( modBuffer[0] == 0.0f && modState != AudioRate ){ setOutputToZero(output); meterOut.store(0.0f); }else{ int signalState; const float* signalBuffer = processInput(input_signal, signalState); if (signalState == AudioRate){ float* outputBuffer = getOutputBufferToFill(output); if (modState == AudioRate){ ofx_Aeq_BmulC(outputBuffer, signalBuffer, modBuffer, bufferSize); }else{ ofx_Aeq_BmulS(outputBuffer, signalBuffer, modBuffer[0], bufferSize); } meterOut.store(outputBuffer[0]); }else { float out = modBuffer[0]*signalBuffer[0]; setControlRateOutput(output, out); meterOut.store(out); } } }
void pdsp::Formula::process (int bufferSize) noexcept { int inputState; const float* inputBuffer = processInput(input, inputState ); switch(inputState){ case Unchanged: setControlRateOutput(output, lastProcessedValue); break; case Changed: lastProcessedValue = formula(inputBuffer[0]); setControlRateOutput(output, lastProcessedValue); inputMeter.store(inputBuffer[0]); outputMeter.store(lastProcessedValue); break; case AudioRate: float* outputBuffer = getOutputBufferToFill(output); formulaAudioRate(outputBuffer, inputBuffer, bufferSize); lastProcessedValue = outputBuffer[bufferSize-1]; inputMeter.store(inputBuffer[0]); outputMeter.store(outputBuffer[0]); break; } }
void ofxPDSPValue::process (int bufferSize) noexcept { float newValue = value; if(newValue!=lastValue){ valueChange(newValue); } if(slewRun){ float* outputBuffer = getOutputBufferToFill(output); runSlewBlock(outputBuffer, 0, bufferSize); }else{ setControlRateOutput(output, slewLastValue); } lastValue = newValue; }