Skip to content
Prev Previous commit
Next Next commit
Fixes calf-studio-gear#278: Do not read/write unconnected ports
  • Loading branch information
JohannesLorenz committed Jan 24, 2024
commit 1df3a2a7ff11174e15e0a0b7fdc40e71724f435a
17 changes: 11 additions & 6 deletions src/calf/modules_filter.h
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,8 @@ public frequency_response_line_graph
float values[] = {0,0,0,0};
for (uint32_t i = offset; i < offset + numsamples; i++) {
outs[0][i] = ins[0][i];
outs[1][i] = ins[1][i];
//float values[] = {ins[0][i],ins[1][i],outs[0][i],outs[1][i]};
if(outs[1])
outs[1][i] = ins[ins[1]?1:0][i];
meters.process(values);
ostate = -1;
}
Expand All @@ -250,19 +250,24 @@ public frequency_response_line_graph
if (outputs_mask & 1) {
ostate |= FilterClass::process_channel(0, ins[0] + offset, outs[0] + offset, numnow, inputs_mask & 1, *params[Metadata::param_level_in], *params[Metadata::param_level_out]);
}
if (outputs_mask & 2) {
ostate |= FilterClass::process_channel(1, ins[1] + offset, outs[1] + offset, numnow, inputs_mask & 2, *params[Metadata::param_level_in], *params[Metadata::param_level_out]);
if (outputs_mask & 2 && outs[1]) {
ostate |= FilterClass::process_channel(1, ins[(ins[1] ? 1 : 0)] + offset, outs[1] + offset, numnow, inputs_mask & 2, *params[Metadata::param_level_in], *params[Metadata::param_level_out]);
}
if (timer.elapsed()) {
on_timer();
}
for (uint32_t i = offset; i < offset + numnow; i++) {
float values[] = {ins[0][i] * *params[Metadata::param_level_in], ins[1][i] * *params[Metadata::param_level_in], outs[0][i], outs[1][i]};
float values[] = {
ins[0][i] * *params[Metadata::param_level_in],
(ins[ins[1]?1:0][i]) * *params[Metadata::param_level_in],
outs[0][i],
(outs[outs[1]?1:0][i])
};
meters.process(values);
}
offset += numnow;
}
bypass.crossfade(ins, outs, 2, orig_offset, orig_numsamples);
bypass.crossfade(ins, outs, 1 + (int)(ins[1] && outs[1]), orig_offset, orig_numsamples);
}
meters.fall(orig_numsamples);
return ostate;
Expand Down
26 changes: 15 additions & 11 deletions src/modules_comp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -785,7 +785,8 @@ uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples,
// everything bypassed
while(offset < numsamples) {
outs[0][offset] = ins[0][offset];
outs[1][offset] = ins[1][offset];
if(outs[1])
outs[1][offset] = ins[ins[1]?1:0][offset];
float values[] = {0, 0, 1};
meters.process(values);
++offset;
Expand All @@ -802,9 +803,9 @@ uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples,
float outL = 0.f;
float outR = 0.f;
float inL = ins[0][offset];
float inR = ins[1][offset];
float inR = ins[ins[1]?1:0][offset];
float Lin = ins[0][offset];
float Rin = ins[1][offset];
float Rin = ins[ins[1]?1:0][offset];

// in level
inR *= *params[param_level_in];
Expand All @@ -824,15 +825,16 @@ uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples,

// send to output
outs[0][offset] = outL;
outs[1][offset] = outR;
if(outs[1])
outs[1][offset] = outR;

float values[] = {std::max(inL, inR), std::max(outL, outR), compressor.get_comp_level()};
meters.process(values);

// next sample
++offset;
} // cycle trough samples
bypass.crossfade(ins, outs, 2, orig_offset, orig_numsamples);
bypass.crossfade(ins, outs, 1 + (int)(ins[1] && outs[1]), orig_offset, orig_numsamples);
}
meters.fall(numsamples);
return outputs_mask;
Expand Down Expand Up @@ -2561,16 +2563,16 @@ uint32_t transientdesigner_audio_module::process(uint32_t offset, uint32_t numsa
bool bypassed = bypass.update(*params[param_bypass] > 0.5f, numsamples);
for(uint32_t i = offset; i < offset + numsamples; i++) {
float L = ins[0][i];
float R = ins[1][i];
float R = ins[ins[1]?1:0][i];
meter_inL = 0.f;
meter_inR = 0.f;
meter_outL = 0.f;
meter_outR = 0.f;
float s = (fabs(L) + fabs(R)) / 2;
if(bypassed) {
outs[0][i] = ins[0][i];
outs[1][i] = ins[1][i];

if(outs[1])
outs[1][i] = ins[ins[1]?1:0][i];
} else {
// levels in
L *= *params[param_level_in];
Expand Down Expand Up @@ -2600,10 +2602,12 @@ uint32_t transientdesigner_audio_module::process(uint32_t offset, uint32_t numsa
// output
if (*params[param_listen] > 0.5) {
outs[0][i] = s;
outs[1][i] = s;
if(outs[1])
outs[1][i] = s;
} else {
outs[0][i] = L;
outs[1][i] = R;
if(outs[1])
outs[1][i] = R;
}
meter_outL = L;
meter_outR = R;
Expand Down Expand Up @@ -2677,7 +2681,7 @@ uint32_t transientdesigner_audio_module::process(uint32_t offset, uint32_t numsa
meters.process(mval);
}
if (!bypassed)
bypass.crossfade(ins, outs, 2, orig_offset, numsamples);
bypass.crossfade(ins, outs, 1 + (int)(ins[1] && outs[1]), orig_offset, numsamples);
meters.fall(numsamples);
return outputs_mask;
}
Expand Down
4 changes: 2 additions & 2 deletions src/modules_delay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ void comp_delay_audio_module::set_sample_rate(uint32_t sr)
uint32_t comp_delay_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
{
bool bypassed = bypass.update(*params[param_bypass] > 0.5f, numsamples);
bool stereo = ins[1];
bool stereo = ins[1] && outs[1];
uint32_t w_ptr = write_ptr;
uint32_t b_mask = buf_size - 2;
uint32_t end = offset + numsamples;
Expand Down Expand Up @@ -472,7 +472,7 @@ uint32_t comp_delay_audio_module::process(uint32_t offset, uint32_t numsamples,
w_ptr = (w_ptr + 2) & b_mask;
r_ptr = (r_ptr + 2) & b_mask;

float values[] = {L, R, outs[0][i], outs[1][i]};
float values[] = {L, R, outs[0][i], outs[(int)stereo][i]};
meters.process(values);
}
}
Expand Down
Loading