On 11/13, Karl Schultheisz via Faudiostream-users wrote:
>
> process = os.osc(55) : rwtable(1024, 0.1, 42, _, 42);
>
> The result, as demonstrated using faustide, is that the hypothesis is wrong.
> The output signal is a constant 0.1, not a 55Hz sinusoid.
I think this is a bug. faust wrongly assumes that if ridx is constant then
the output is constant too.
Perhaps this is because
Tree sigWriteReadTable(Tree n, Tree init, Tree widx, Tree wsig, Tree
ridx)
{
return sigRDTbl(sigWRTbl(gGlobal->nil, sigTable(gGlobal->nil, n,
sigGen(init)), widx, wsig), ridx);
}
and the optimization above is valid for sigRDTbl.
For example,
process = rwtable(1024, 0.0, ffunction(int widx(),"",""), _, 0);
compiles to
virtual void instanceConstants(int sample_rate) {
fSampleRate = sample_rate;
mydspSIG0* sig0 = newmydspSIG0();
sig0->instanceInitmydspSIG0(sample_rate);
sig0->fillmydspSIG0(1024, ftbl0);
fConst0 = ftbl0[0];
deletemydspSIG0(sig0);
}
virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT**
outputs) {
FAUSTFLOAT* input0 = inputs[0];
FAUSTFLOAT* output0 = outputs[0];
for (int i = 0; (i < count); i = (i + 1)) {
ftbl0[int(widx())] = float(input0[i]);
output0[i] = FAUSTFLOAT(fConst0);
}
}
Oleg.
_______________________________________________
Faudiostream-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/faudiostream-users