Example #1
0
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]);
	}
}