John,
I have a been working on changing some opcodes to use the updated
functionality, and have run across something I can't quite understand.
According to the error message, I have an invalid assignment of an
i-rate variable. But if you look at the actual code, there is another
opcode that uses the same exact call, but there it is not an error
flagged. Is there something here that I am not seeing???
The following is the exact error message I got, I also attached the
source files...
Error: LHS 'stages is i-rate, slower than RHS k-rate.
Error occured near line 36 in file fm_rhodes.saol:
ksig kinit, triggered, startlevel, eg, stage, expire;
oparray kline[10];
stages = ftlen(rates);
if (!kinit) {
Ending sfront.
Mike
kopcode fm_extend_05(ivar ratescale, table eg0, table eg1, table eg2,
table eg3, table eg4, table eg5) {
return(max(tableread(eg0, 3) * ratescale,
tableread(eg2, 3) * ratescale,
tableread(eg4, 3) * ratescale));
}
aopcode fm_algo_05(ivar feedbacklevel, table wave, ksig eg[6], ksig fr[6]) {
asig op[6], feedback;
op[5] = oscil(wave, cpsoct(fr[5] + feedback)) * eg[5];
feedback = op[5] * feedbacklevel;
op[4] = oscil(wave, cpsoct(fr[4] + op[5])) * eg[4];
op[3] = oscil(wave, cpsoct(fr[3])) * eg[3];
op[2] = oscil(wave, cpsoct(fr[2] + op[3])) * eg[2];
op[1] = oscil(wave, cpsoct(fr[1])) * eg[1];
op[0] = oscil(wave, cpsoct(fr[0] + op[1])) * eg[0];
return(op[0] + op[2] + op[4]);
}
kopcode eg_test(table r) {
ivar stages;
ksig stage, nKinit;
stages = ftlen(r);
if (nKinit) {
stage = stage + 1;
if (stage == stages) {
stage = 0;
}
} else {
nKinit = 1;
}
return(stage);
}
kopcode eg_table(ksig release, ivar ratescale, table rates, table levels) {
ivar stages;
ksig kinit, triggered, startlevel, eg, stage, expire;
oparray kline[10];
stages = ftlen(rates);
if (!kinit) {
kinit = 1;
expire = tableread(rates, stage) * ratescale;
startlevel = tableread(levels, ftlen(rates) - 1);
}
if (!release && !triggered && (stage < ftlen(rates) - 2)) {
eg = ((kline[stage](1, tableread(rates, stage) * ratescale, 0) * (startlevel - tableread(levels, stage))) + tableread(levels, stage));
if (itime >= expire) {
startlevel = tableread(levels, stage);
stage = stage + 1;
expire = expire + tableread(rates, stage) * ratescale;
if (stage == ftlen(rates) - 2) {
eg = startlevel;
}
}
} else {
if (release && !triggered) {
triggered = 1;
expire = itime + tableread(rates, stage) * ratescale;
startlevel = eg;
}
if (triggered) {
if (itime < expire) {
eg = ((kline[stage](1, tableread(rates, stage) * ratescale, 0) * (startlevel - tableread(levels, stage))) + tableread(levels, stage));
} else {
eg = tableread(levels, stage);
}
}
}
return(eg);
}
instr fm_rhodes(freq, amp) {
ivar _rs;
ivar _os;
ivar _fb;
ksig _peg;
ksig _lfo;
ksig _egrelease;
ksig _eg[6];
ksig _fr[6];
asig _a;
table _eg_rt0(data, -1, .03125, .125, 5, .0625);
table _eg_rt1(data, -1, .03125, .0625, 4, .0625);
table _eg_rt2(data, -1, .025, .012, 1, .0625);
table _eg_rt3(data, -1, .0125, .02, 1, .0625);
table _eg_rt4(data, -1, .035, .12, 4.9, .0625);
table _eg_rt5(data, -1, .04, .13, 4.1, .0625);
table _eg_lvl0(data, -1, 1, .75, 0, 0);
table _eg_lvl1(data, -1, 1, .75, 0, 0);
table _eg_lvl2(data, -1, 1, 0, 0, 0);
table _eg_lvl3(data, -1, 1, 0, 0, 0);
table _eg_lvl4(data, -1, 1, .65, 0, 0);
table _eg_lvl5(data, -1, 1, .65, 0, 0);
table _peg_rt(data, -1, 0, 0, 0, 0);
table _peg_lvl(data, -1, 0, 0, 0, 0);
table sine(harm, 128, 1);
_rs = 1;
_os = ampdb(amp) * .45;
_fb = 0;
if (released && !_egrelease) {
_egrelease = 1;
extend(fm_extend_05(_rs, _eg_rt0, _eg_rt1, _eg_rt2, _eg_rt3, _eg_rt4, _eg_rt5));
}
_peg = eg_table(released, _rs, _peg_rt, _peg_lvl);
if (.25 <= itime) {
_lfo = koscil(sine, .5);
}
_eg[0] = (eg_table(released, _rs, _eg_rt0, _eg_lvl0) + (_lfo * 0)) * .96;
_eg[1] = (eg_table(released, _rs, _eg_rt1, _eg_lvl1) + (_lfo * 0)) * .5;
_eg[2] = (eg_table(released, _rs, _eg_rt2, _eg_lvl2) + (_lfo * 0)) * .92;
_eg[3] = (eg_table(released, _rs, _eg_rt3, _eg_lvl3) + (_lfo * 0)) * .99;
_eg[4] = (eg_table(released, _rs, _eg_rt4, _eg_lvl4) + (_lfo * 0)) * .99;
_eg[5] = (eg_table(released, _rs, _eg_rt5, _eg_lvl5) + (_lfo * 0)) * .79;
_fr[0] = octcps(freq * 1.002) + _peg + (_lfo * 0);
_fr[1] = octcps(freq * 10.9999) + _peg + (_lfo * 0);
_fr[2] = octcps(97) + _peg + (_lfo * 0);
_fr[3] = octcps(11.125) + _peg + (_lfo * 0);
_fr[4] = octcps(freq * .9999) + _peg + (_lfo * 0);
_fr[5] = octcps(freq * 1.001) + _peg + (_lfo * 0);
_a = fm_algo_05(_fb, sine, _eg, _fr) * _os;
output(_a);
}
0 fm_rhodes 5 64 127
6 end
This archive was generated by hypermail 2b29 : Mon Jan 28 2002 - 12:11:07 EST