Csound Csound-dev Csound-tekno Search About

Re: UDO Help

Date2005-11-12 08:46
FromVictor Lazzarini
SubjectRe: UDO Help
Why dom't you try using some sort of
counter with a k variable. That way you
can initialise k=0 when you want to
start again. You can use if... then... elseif...
to select the different branches.

Remember that if you do

k1 = k1 + 1

k1 will count k-periods. If you want samples, you can
multiply it by kmsps. If you want seconds you can multiply
by ksmps/sr.

Victor
>
>
> Did you try the reinit opcode? They are a little confusing
> but I can  help you out with them, I used them a ton in my
> monosynths. I have not  tried them with a udo, but I
> haven't seen any mention that they won't  work there. On
> the other hand, I did write a varient of the line opcode
> myself that restarts on certain krate conditions and that
> worked fine  within a UDO. So I'm sure you could do that
> easily enough. Here's the  code for my resteerable line
> opcode I'm working on if you want to take a  look. You
> could change the reinit condition to an additional trigger
> variable instead easily enough.
>
> Iain
>
> David Akbari wrote:
> > Hi List,
> >
> > I'm working on a UDO and I seem to have run into a small
> > problem with  using the line opcode. It seems that in
> > this UDO, I am trying to index a  table for use with
> > fading out the dac. The problem is that I'm using  line
> to do the table index. So it works, but only ONCE. You
> > press the  space bar and it fades out, you press the
> > number 1 and it fades back in,  but then once both lines
> > have been executed, the value is held.
> > How is it possible to reinitialize the line opcode
> > within the UDO block?  Any help on this matter is most
> > appreciated!
> > 
> > 
> >
> > sr        =    44100
> > kr        =    441
> > ksmps    =    100
> > nchnls    =    2
> >
> > itmp    ftgen    1, 0, 16384, 7, 0, 16384, 1
> > ;itmp    ftgen    1, 0, 16384, 5, 0.000001, 16384, 1
> > ;itmp    ftgen    1, 0, 16384, 20, 9, 1
> >
> > /*--- ---*/
> >
> >         opcode    fadedac, aa, aaii
> >
> > ist    init    1
> > iend    init    0
> >
> > aLin, aRin, ifadtime, itable    xin
> >
> > kval    sensekey
> >
> > ;  space bar fades out
> > ;  number 1 fades in
> >
> > if    (kval == 32) kgoto    truf1
> > if    (kval == 49) kgoto    truf2
> >     kgoto cont
> >
> >  truf1:
> > ktrue    =    1
> >     kgoto cont
> >
> >  truf2:
> > ktrue    =    2
> >     kgoto cont
> >
> >  cont:
> >     if    (ktrue == 1) then
> > kndx    line    ist, ifadtime, iend
> > kndx    =    kndx * ftlen(itable)
> > klin    table    kndx, itable
> > aL = aLin * klin
> > aR = aRin * klin
> > ;ktrue    =    0
> > elseif    (ktrue == 2) then
> > kndx    line    iend, ifadtime, ist
> > kndx    =    kndx * ftlen(itable)
> > klin    table    kndx, itable
> > aL  = aLin * klin
> > aR  = aRin * klin
> > ;ktrue    =    0
> > else
> > aL  = aLin
> > aR  = aRin
> >     endif
> >
> >     xout    aL, aR
> >
> >         endop
> >
> > /*--- ---*/
> >
> >         instr    1
> >
> > ;  put your sample here
> > a1, a2    diskin2
> > "/Volumes/Neuromancer/sup2/a1lasflutas16", 1, 0, 1
> > a00, a01    fadedac    a1, a2, (sr/ftlen(1)), 1
> >
> >     outs    a00, a01
> >
> >         endin
> >
> > /*--- ---*/
> > 
> > 
> > i1    0    1000
> >
> > e
> > 
> >
> > 
> >
> >
> > -David
> >
>
>
> [Attachment: mylinek.c]

Date2005-11-12 08:53
FromIain Duncan
SubjectRe: UDO Help
Yeah, that's what I usually do too, and I kinda did that within the line 
opcode. Once I have it's appropriate behaviour figured out I'll submit 
for use within csound but I'm still figuring out how I want it to 
behave. Works great for emulating real time envelope generators so far!

Iain

Victor Lazzarini wrote:
> Why dom't you try using some sort of
> counter with a k variable. That way you
> can initialise k=0 when you want to
> start again. You can use if... then... elseif...
> to select the different branches.
> 
> Remember that if you do
> 
> k1 = k1 + 1
> 
> k1 will count k-periods. If you want samples, you can
> multiply it by kmsps. If you want seconds you can multiply
> by ksmps/sr.
> 
> Victor
> 
>>
>>Did you try the reinit opcode? They are a little confusing
>>but I can  help you out with them, I used them a ton in my
>>monosynths. I have not  tried them with a udo, but I
>>haven't seen any mention that they won't  work there. On
>>the other hand, I did write a varient of the line opcode
>>myself that restarts on certain krate conditions and that
>>worked fine  within a UDO. So I'm sure you could do that
>>easily enough. Here's the  code for my resteerable line
>>opcode I'm working on if you want to take a  look. You
>>could change the reinit condition to an additional trigger
>>variable instead easily enough.
>>
>>Iain
>>
>>David Akbari wrote:
>>
>>>Hi List,
>>>
>>>I'm working on a UDO and I seem to have run into a small
>>>problem with  using the line opcode. It seems that in
>>>this UDO, I am trying to index a  table for use with
>>>fading out the dac. The problem is that I'm using  line
>>
>>to do the table index. So it works, but only ONCE. You
>>
>>>press the  space bar and it fades out, you press the
>>>number 1 and it fades back in,  but then once both lines
>>>have been executed, the value is held.
>>>How is it possible to reinitialize the line opcode
>>>within the UDO block?  Any help on this matter is most
>>>appreciated!
>>>
>>>
>>>
>>>sr        =    44100
>>>kr        =    441
>>>ksmps    =    100
>>>nchnls    =    2
>>>
>>>itmp    ftgen    1, 0, 16384, 7, 0, 16384, 1
>>>;itmp    ftgen    1, 0, 16384, 5, 0.000001, 16384, 1
>>>;itmp    ftgen    1, 0, 16384, 20, 9, 1
>>>
>>>/*--- ---*/
>>>
>>>        opcode    fadedac, aa, aaii
>>>
>>>ist    init    1
>>>iend    init    0
>>>
>>>aLin, aRin, ifadtime, itable    xin
>>>
>>>kval    sensekey
>>>
>>>;  space bar fades out
>>>;  number 1 fades in
>>>
>>>if    (kval == 32) kgoto    truf1
>>>if    (kval == 49) kgoto    truf2
>>>    kgoto cont
>>>
>>> truf1:
>>>ktrue    =    1
>>>    kgoto cont
>>>
>>> truf2:
>>>ktrue    =    2
>>>    kgoto cont
>>>
>>> cont:
>>>    if    (ktrue == 1) then
>>>kndx    line    ist, ifadtime, iend
>>>kndx    =    kndx * ftlen(itable)
>>>klin    table    kndx, itable
>>>aL = aLin * klin
>>>aR = aRin * klin
>>>;ktrue    =    0
>>>elseif    (ktrue == 2) then
>>>kndx    line    iend, ifadtime, ist
>>>kndx    =    kndx * ftlen(itable)
>>>klin    table    kndx, itable
>>>aL  = aLin * klin
>>>aR  = aRin * klin
>>>;ktrue    =    0
>>>else
>>>aL  = aLin
>>>aR  = aRin
>>>    endif
>>>
>>>    xout    aL, aR
>>>
>>>        endop
>>>
>>>/*--- ---*/
>>>
>>>        instr    1
>>>
>>>;  put your sample here
>>>a1, a2    diskin2
>>>"/Volumes/Neuromancer/sup2/a1lasflutas16", 1, 0, 1
>>>a00, a01    fadedac    a1, a2, (sr/ftlen(1)), 1
>>>
>>>    outs    a00, a01
>>>
>>>        endin
>>>
>>>/*--- ---*/
>>>
>>>
>>>i1    0    1000
>>>
>>>e
>>>
>>>
>>>
>>>
>>>
>>>-David
>>>
>>
>>
>>[Attachment: mylinek.c]