Hi All, there is a little bug with if-then (perhaps fixed).
`else' works well, the problem is `then'. The example of the `else'
opcode in the manual fails when p5 is zero.
sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1
instr 1
ipch = cpspch(p4)
ienv = p5
if (ienv == 0) then
kenv adsr 0.01, 0.95, .7, .5
else
kenv linseg 0, p3 * .5, 1, p3 * .5, 0
endif
aout vco2 .8, ipch, 10
aout moogvcf aout, ipch + (kenv * 6 * ipch) , .5
aout = aout * kenv
outs aout, aout
endin
i 1 0 2 8.00 0
i 1 3 2 8.00 1
Tested with Csound 5.14.2 (git 6363fec367fb5258e78ec6a6e1ef2b7b820be2b4)
uname -a
Linux pantera 2.6.33.7.2-rt30 #2 SMP PREEMPT RT Mon Oct 24 12:33:25
CEST 2011 x86_64 AMD Phenom(tm) II X6 1090T Processor AuthenticAMD GNU/Linux
csound -d else.csd
...
********************
* USING NEW PARSER *
********************
END OF INPUT
...
new alloc for instr 1:
INIT ERROR: linseg not initialised (krate)
Early return from csoundPerform().
...
It seems a linseg bug, but the appearance deceives. I have tried
different combinations. Besides, this score section works:
i 1 0 2 8.00 1
i 1 3 2 8.00 1
The error is in the `gotoType' variable (csound_orc_expressions.c:811).
gotoType = (argtyp2(csound, last->left->value->lexeme) == 'B') ||
(argtyp2(csound, tempRight->value->lexeme) == 'k');
that results zero. I don't know if `tempRight->value->lexeme' works
well (tomorrow I try to see), for now I use the following substitution
diff -d csound_orc_expressions.c{~,}
827c827
< int type = (gotoType == 1) ? 0 : 1;
---
> int type = (gotoType == 0) ? 0 : 1; /* or 'gotoType & 1' */
(memo for type: 0 -> "kgoto", 1 -> "igoto")
tito
------------------------------------------------------------------------------
RSA(R) Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net