diff --git a/src/dsp/matrix_node.h b/src/dsp/matrix_node.h index 6c5c91a..fd3a029 100644 --- a/src/dsp/matrix_node.h +++ b/src/dsp/matrix_node.h @@ -104,10 +104,19 @@ struct MatrixNodeFrom : public EnvelopeSupport, } } - mech::mul_block(modlev, from.output, mod); if (isrm) { + // we want op * ( 1 - depth ) + op * rm * depth or + // op * ( 1 + depth ( rm - 1 ) ) + // since the multiplier of depth is rmLevel and it starts at one that means + for (int i=0; i(modlev, from.output, mod); + if (onto.rmAssigned) { mech::accumulate_from_to(mod, onto.rmLevel); @@ -118,9 +127,12 @@ struct MatrixNodeFrom : public EnvelopeSupport, mech::copy_from_to(mod, onto.rmLevel); } +#endif } else { + mech::mul_block(modlev, from.output, mod); + for (int j = 0; j < blockSize; ++j) { onto.phaseInput[j] += (int32_t)((1 << 27) * (mod[j]));