void FilteredDelayNode::process() { if(werePropertiesModified(this, Lav_FILTERED_DELAY_DELAY)) delayChanged(); if(werePropertiesModified(this, Lav_FILTERED_DELAY_INTERPOLATION_TIME)) recomputeDelta(); reconfigureBiquads(); float feedback = getProperty(Lav_FILTERED_DELAY_FEEDBACK).getFloatValue(); //optimize the common case of not having feedback. //the only difference between these blocks is in the advance line. if(feedback == 0.0f) { for(unsigned int output = 0; output < num_output_buffers; output++) { auto &line = *lines[output]; auto &filter=*biquads[output]; line.processBuffer(block_size, input_buffers[output], output_buffers[output]); for(int i=0; i < block_size; i++) output_buffers[output][i] = filter.tick(output_buffers[output][i]); } } else { for(unsigned int output = 0; output < num_output_buffers; output++) { auto &line = *lines[output]; auto &filter = *biquads[output]; for(unsigned int i = 0; i < block_size; i++) { output_buffers[output][i] = line.computeSample(); output_buffers[output][i] = filter.tick(output_buffers[output][i]); line.advance(input_buffers[output][i]+output_buffers[output][i]*feedback); } } } }
void DoppleringDelayNode::process() { if(werePropertiesModified(this, Lav_DELAY_DELAY)) delayChanged(); if(werePropertiesModified(this, Lav_DELAY_INTERPOLATION_TIME)) recomputeDelta(); for(int output = 0; output < num_output_buffers; output++) { auto &line = *lines[output]; for(int i = 0; i < block_size; i++) output_buffers[output][i] = line.tick(input_buffers[output][i]); } }