Exemple #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;
        }

}
Exemple #2
0
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);       
        }
        
    }
    


}
Exemple #3
0
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;
        }
}
Exemple #4
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;
}