11 max_delay_time(max_delay),
12 delay_time(0.5 * max_delay),
13 max_delay_in_frames( (unsigned) (_sampleRate * max_delay +
CGestalt::block_size() ) ),
18 ring_buffer(FrameStream::channels(), max_delay_in_frames)
54 sample * outPtr = outputBuffer._monoBuffers[outBufNum];
65 outPtr = outputBuffer._monoBuffers[outBufNum];
66 float ramp_factor = 0.0001;
68 for (
unsigned i = 0; i < outputBuffer._numFrames; i++) {
70 float r_index_and_mant = (
delay_time * _sampleRate);
71 unsigned index = (unsigned) floor(r_index_and_mant);
72 float mantissa = r_index_and_mant - index;
73 int read_frame = temp_write_frame - index;
74 while (read_frame < 0)
76 sample lower_read_value = *(rbPtr + read_frame);
77 tempSamplePtr = ((unsigned)(rbPtr + read_frame + 1)) %
ring_buffer._numFrames;
78 sample upper_read_value = *tempSamplePtr;
81 *outPtr++ = ((1.0 - mantissa) * lower_read_value) + (mantissa * upper_read_value);
89 Processor :: pull_input( inputBuffer, outputBuffer );
90 FrameStream :: next_buffer( inputBuffer, outputBuffer );
AdditiveInstrument.h – Sum-of-sines synthesis instrument class.
The CSL system defaults class.
DLine(FrameStream &input, float max_delay)
bool init_delay_time(float dt)
status next_buffer(Buffer &inputBuffer, Buffer &outputBuffer)
bool set_target_delay_time(float tdt)
float sample
(could be changed to int, or double)
Buffer – the multi-channel sample buffer class (passed around between generators and IO guys)...
status mono_next_buffer(Buffer &inputBuffer, Buffer &outputBuffer, unsigned inBufNum, unsigned outBufNum)
bool set_interp_type(InterpType)