Пример #1
0
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;
        }

}
Пример #2
0
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;
}