Forums > Gen

gen~ export – samplerate vs. delay calculation

July 17, 2013 | 3:26 am

Hi,

lets say, we have a simple delay unit like this:

<code>

– Pasted Max Patch, click to expand. –

</code>

This exports to something like this:
while ((__n–)) {
const double in1 = (*(__in1++));
const double in2 = (*(__in2++));
double expr_3885 = ((in2 * 0.2) * 44100);
double tap_3883 = m_delay_1.read_linear(expr_3885);
double out1 = tap_3883;
m_delay_1.write(in1);
m_delay_1.step();
// assign results to output buffer;
(*(__out1++)) = out1;

};
The problem is the hard coded samplerate of "44100". If the resulting plugin runs in a host with a different samplerate all time values are wrong. Same applies for filter coeff calculations, e.g.:
double expr_3899 = safediv(((in2 * 2) * 3.1415926535898), 44100);
double sin_3894 = sin(expr_3899);

I would propose to change the export mechanism in a way that the parameter "samplerate" multiplied with the time as factor is used in expressions like the above.

Thanks

Thomas


July 18, 2013 | 2:34 am

indeed, it would be cool if gen replaced [samplerate] by something like :

# ifdef SAMPLERATE 
#  samplerate = SAMPLERATE
# else
#  samplerate = 44100

in the beginning of the output code, and with samplerate variable everywhere else.

well i don’t know if the syntax is correct, but the idea would be to get the current samplerate value if it is defined somewhere in the architecture, which i guess is pretty standard but doesn’t exist always maybe ; else it just goes with the current samplerate set as a global variable, which would be easier to change according to your currnet architecture anyway.

(Hmmm apparently it does export a "samplerate" variable somewhere in the code, but it’s not used to replace user-written [samplerate]… strange)


July 22, 2013 | 1:41 pm

Thanks for the report. I’ve logged a request for future releases about this.


Viewing 3 posts - 1 through 3 (of 3 total)