[Csnd] reinit in UDO

classic Classic list List threaded Threaded
17 messages Options
Reply | Threaded
Open this post in threaded view
|

[Csnd] reinit in UDO

zappfinger
In my UDO I am trying to create a AHD envelope.
I have code like this:

; Ktrig could come from a LFO.
iTotal = iAtt + iHold + iDec

if kTrig > 0 then
     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
endif


But since linseg ues i-rate arguments I think I have to use reinit, but
don't know how in this case..

Richard

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

joachim-3
can you send the code which is not working for you?
        j



On 18/03/18 18:47, Richard wrote:

> In my UDO I am trying to create a AHD envelope.
> I have code like this:
>
> ; Ktrig could come from a LFO.
> iTotal = iAtt + iHold + iDec
>
> if kTrig > 0 then
>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
> endif
>
>
> But since linseg ues i-rate arguments I think I have to use reinit, but
> don't know how in this case..
>
> Richard
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here
>

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

zappfinger
well, it's a bit complicated. This is part of the clavia to csd project
(pch2csd).
it is a patch with a LFO triggering the envelope that works on an oscillator

Here is the UDO:

opcode EnvAHD, 0, kiikikkkkkkk
;   parameters                                inputs outputs
kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI, kEnvO,kOut xin
; NOT FORGET ABOUT KEYBOARD KB
; NO SHAPE IMPLEMENTED
kIn zkr kInI
kAM zkr kAMI
kTrig zkr kTrigI

;                0    1     2     3  4   5
k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
k3[] fillarray 1,   -1,     1,   -1, 1, -1

kEnv init 0
kTimer init 0
kSet init 0
kStage init 0
iTotal = iAtt+iHold+iDec

if kTrig > 0 then
     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
endif

kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
zkw kEnvH, kEnvO
zkw kIn*kEnvH, kOut
endop

It is used in instr 1 (continues running) like so:
instr 1
; Module    Parameters                 Modes    Inlets    Outlets
A2K                                             7,        7
LfoA        0.64,0,0,0.0,0,1,4,1,               1,        8
K2A                                             9,        9
OscA        0.0,0.0,1,0.0,2,1,0,                1,1,      7
Out2        0,1,0,                              8,9
EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7,    0,9
K2A                                             9,        8
endin

Important is that instr1 (and therefore the EnvAHD UDO) is running
continues.
What I think is wrong with this code:
if kTrig > 0 then
     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
endif

is that linseg might be triggered at every k value > 0, so also on a
rising sine.
Or is it triggered only once, since it uses i-rate params?

Richard
On 18/03/18 19:37, joachim heintz wrote:

> can you send the code which is not working for you?
>     j
>
>
>
> On 18/03/18 18:47, Richard wrote:
>> In my UDO I am trying to create a AHD envelope.
>> I have code like this:
>>
>> ; Ktrig could come from a LFO.
>> iTotal = iAtt + iHold + iDec
>>
>> if kTrig > 0 then
>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>> endif
>>
>>
>> But since linseg ues i-rate arguments I think I have to use reinit, but
>> don't know how in this case..
>>
>> Richard
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>>
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

joachim-3
hm - not sure what i miss but i don't see any ktrig in your code.  i
only see fixed numbers you give to your UDO as input.  if you like,
perhaps you can describe as simple as possible what you want to do.
        j



On 18/03/18 20:30, Richard wrote:

> well, it's a bit complicated. This is part of the clavia to csd project
> (pch2csd).
> it is a patch with a LFO triggering the envelope that works on an
> oscillator
>
> Here is the UDO:
>
> opcode EnvAHD, 0, kiikikkkkkkk
> ;   parameters                                inputs outputs
> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI, kEnvO,kOut xin
> ; NOT FORGET ABOUT KEYBOARD KB
> ; NO SHAPE IMPLEMENTED
> kIn zkr kInI
> kAM zkr kAMI
> kTrig zkr kTrigI
>
> ;                0    1     2     3  4   5
> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>
> kEnv init 0
> kTimer init 0
> kSet init 0
> kStage init 0
> iTotal = iAtt+iHold+iDec
>
> if kTrig > 0 then
>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
> endif
>
> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
> zkw kEnvH, kEnvO
> zkw kIn*kEnvH, kOut
> endop
>
> It is used in instr 1 (continues running) like so:
> instr 1
> ; Module    Parameters                 Modes    Inlets    Outlets
> A2K                                             7,        7
> LfoA        0.64,0,0,0.0,0,1,4,1,               1,        8
> K2A                                             9,        9
> OscA        0.0,0.0,1,0.0,2,1,0,                1,1,      7
> Out2        0,1,0,                              8,9
> EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7,    0,9
> K2A                                             9,        8
> endin
>
> Important is that instr1 (and therefore the EnvAHD UDO) is running
> continues.
> What I think is wrong with this code:
> if kTrig > 0 then
>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
> endif
>
> is that linseg might be triggered at every k value > 0, so also on a
> rising sine.
> Or is it triggered only once, since it uses i-rate params?
>
> Richard
> On 18/03/18 19:37, joachim heintz wrote:
>> can you send the code which is not working for you?
>>     j
>>
>>
>>
>> On 18/03/18 18:47, Richard wrote:
>>> In my UDO I am trying to create a AHD envelope.
>>> I have code like this:
>>>
>>> ; Ktrig could come from a LFO.
>>> iTotal = iAtt + iHold + iDec
>>>
>>> if kTrig > 0 then
>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>>> endif
>>>
>>>
>>> But since linseg ues i-rate arguments I think I have to use reinit, but
>>> don't know how in this case..
>>>
>>> Richard
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>>
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here
>

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

zappfinger
All communication between UDO's in this project go via zak busses. so
the numbers are zak bus numbers.
You can read more about it here:
https://github.com/gleb812/pch2csd/wiki/Making-a-new-module

So LfoA outlet (8) is the first input for EnvAHD (that is the trigger
input).
That works. When I do printk2 on kTrig I see the values coming in.
My question is: how do I trigger the linseg line when KTrig > 0 (or any
other value)?
I guess I have to do something with reninit, since instr 1 (and thus all
UDO's) are run continues..

Richard


On 18/03/18 20:59, joachim heintz wrote:

> hm - not sure what i miss but i don't see any ktrig in your code.  i
> only see fixed numbers you give to your UDO as input.  if you like,
> perhaps you can describe as simple as possible what you want to do.
>     j
>
>
>
> On 18/03/18 20:30, Richard wrote:
>> well, it's a bit complicated. This is part of the clavia to csd project
>> (pch2csd).
>> it is a patch with a LFO triggering the envelope that works on an
>> oscillator
>>
>> Here is the UDO:
>>
>> opcode EnvAHD, 0, kiikikkkkkkk
>> ;   parameters                                inputs outputs
>> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI, kEnvO,kOut xin
>> ; NOT FORGET ABOUT KEYBOARD KB
>> ; NO SHAPE IMPLEMENTED
>> kIn zkr kInI
>> kAM zkr kAMI
>> kTrig zkr kTrigI
>>
>> ;                0    1     2     3  4   5
>> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
>> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
>> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>>
>> kEnv init 0
>> kTimer init 0
>> kSet init 0
>> kStage init 0
>> iTotal = iAtt+iHold+iDec
>>
>> if kTrig > 0 then
>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>> endif
>>
>> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
>> zkw kEnvH, kEnvO
>> zkw kIn*kEnvH, kOut
>> endop
>>
>> It is used in instr 1 (continues running) like so:
>> instr 1
>> ; Module    Parameters                 Modes    Inlets Outlets
>> A2K                                             7,        7
>> LfoA        0.64,0,0,0.0,0,1,4,1,               1,        8
>> K2A                                             9,        9
>> OscA        0.0,0.0,1,0.0,2,1,0,                1,1,      7
>> Out2        0,1,0,                              8,9
>> EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7,    0,9
>> K2A                                             9,        8
>> endin
>>
>> Important is that instr1 (and therefore the EnvAHD UDO) is running
>> continues.
>> What I think is wrong with this code:
>> if kTrig > 0 then
>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>> endif
>>
>> is that linseg might be triggered at every k value > 0, so also on a
>> rising sine.
>> Or is it triggered only once, since it uses i-rate params?
>>
>> Richard
>> On 18/03/18 19:37, joachim heintz wrote:
>>> can you send the code which is not working for you?
>>>     j
>>>
>>>
>>>
>>> On 18/03/18 18:47, Richard wrote:
>>>> In my UDO I am trying to create a AHD envelope.
>>>> I have code like this:
>>>>
>>>> ; Ktrig could come from a LFO.
>>>> iTotal = iAtt + iHold + iDec
>>>>
>>>> if kTrig > 0 then
>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>>>> endif
>>>>
>>>>
>>>> But since linseg ues i-rate arguments I think I have to use reinit,
>>>> but
>>>> don't know how in this case..
>>>>
>>>> Richard
>>>>
>>>> Csound mailing list
>>>> [hidden email]
>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>> Send bugs reports to
>>>>        https://github.com/csound/csound/issues
>>>> Discussions of bugs and features can be posted here
>>>>
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>>
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

joachim-3
perhaps you could do something like this:

kOn init 0

if kTrig > 0 && changed(kTrig) == 1 then
  kOne = 1
endif

if kOn == 1 then
  kEnv linseg ...
endif

in the first if-clause, you ask for the change, to set a "toggle2 to on.
  you must seperate this, because the first clause has to be asked for
ONE moment (k-cycle), but has to switch on a state which is at least as
long as your envelope is.  this is the reason why two if clauses are
needed (perhaps there are other solutions).  but i don't think any
reinit is necessary.



On 18/03/18 21:33, Richard wrote:

> All communication between UDO's in this project go via zak busses. so
> the numbers are zak bus numbers.
> You can read more about it here:
> https://github.com/gleb812/pch2csd/wiki/Making-a-new-module
>
> So LfoA outlet (8) is the first input for EnvAHD (that is the trigger
> input).
> That works. When I do printk2 on kTrig I see the values coming in.
> My question is: how do I trigger the linseg line when KTrig > 0 (or any
> other value)?
> I guess I have to do something with reninit, since instr 1 (and thus all
> UDO's) are run continues..
>
> Richard
>
>
> On 18/03/18 20:59, joachim heintz wrote:
>> hm - not sure what i miss but i don't see any ktrig in your code.  i
>> only see fixed numbers you give to your UDO as input.  if you like,
>> perhaps you can describe as simple as possible what you want to do.
>>     j
>>
>>
>>
>> On 18/03/18 20:30, Richard wrote:
>>> well, it's a bit complicated. This is part of the clavia to csd project
>>> (pch2csd).
>>> it is a patch with a LFO triggering the envelope that works on an
>>> oscillator
>>>
>>> Here is the UDO:
>>>
>>> opcode EnvAHD, 0, kiikikkkkkkk
>>> ;   parameters                                inputs outputs
>>> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI, kEnvO,kOut xin
>>> ; NOT FORGET ABOUT KEYBOARD KB
>>> ; NO SHAPE IMPLEMENTED
>>> kIn zkr kInI
>>> kAM zkr kAMI
>>> kTrig zkr kTrigI
>>>
>>> ;                0    1     2     3  4   5
>>> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
>>> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
>>> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>>>
>>> kEnv init 0
>>> kTimer init 0
>>> kSet init 0
>>> kStage init 0
>>> iTotal = iAtt+iHold+iDec
>>>
>>> if kTrig > 0 then
>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>>> endif
>>>
>>> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
>>> zkw kEnvH, kEnvO
>>> zkw kIn*kEnvH, kOut
>>> endop
>>>
>>> It is used in instr 1 (continues running) like so:
>>> instr 1
>>> ; Module    Parameters                 Modes    Inlets Outlets
>>> A2K                                             7,        7
>>> LfoA        0.64,0,0,0.0,0,1,4,1,               1,        8
>>> K2A                                             9,        9
>>> OscA        0.0,0.0,1,0.0,2,1,0,                1,1,      7
>>> Out2        0,1,0,                              8,9
>>> EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7,    0,9
>>> K2A                                             9,        8
>>> endin
>>>
>>> Important is that instr1 (and therefore the EnvAHD UDO) is running
>>> continues.
>>> What I think is wrong with this code:
>>> if kTrig > 0 then
>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>>> endif
>>>
>>> is that linseg might be triggered at every k value > 0, so also on a
>>> rising sine.
>>> Or is it triggered only once, since it uses i-rate params?
>>>
>>> Richard
>>> On 18/03/18 19:37, joachim heintz wrote:
>>>> can you send the code which is not working for you?
>>>>     j
>>>>
>>>>
>>>>
>>>> On 18/03/18 18:47, Richard wrote:
>>>>> In my UDO I am trying to create a AHD envelope.
>>>>> I have code like this:
>>>>>
>>>>> ; Ktrig could come from a LFO.
>>>>> iTotal = iAtt + iHold + iDec
>>>>>
>>>>> if kTrig > 0 then
>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>>>>> endif
>>>>>
>>>>>
>>>>> But since linseg ues i-rate arguments I think I have to use reinit,
>>>>> but
>>>>> don't know how in this case..
>>>>>
>>>>> Richard
>>>>>
>>>>> Csound mailing list
>>>>> [hidden email]
>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>> Send bugs reports to
>>>>>        https://github.com/csound/csound/issues
>>>>> Discussions of bugs and features can be posted here
>>>>>
>>>>
>>>> Csound mailing list
>>>> [hidden email]
>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>> Send bugs reports to
>>>>        https://github.com/csound/csound/issues
>>>> Discussions of bugs and features can be posted here
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>>
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here
>

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

joachim-3
sorry, the first if-clause is nonsense.  you must ask whether kTrig is
now greater than 0, but the first time.  so should be something like:

kOn init 0
kPreviousTrig init -1

if kTrig > 0 && kPreviousTrig <= 0 then
  kOn = 1
endif

if kOn == 1 then
  kEnv linseg ...
endif

kPreviousTrig = kTrig ;set for next k-cycle



On 18/03/18 21:50, joachim heintz wrote:

> perhaps you could do something like this:
>
> kOn init 0
>
> if kTrig > 0 && changed(kTrig) == 1 then
>  kOne = 1
> endif
>
> if kOn == 1 then
>  kEnv linseg ...
> endif
>
> in the first if-clause, you ask for the change, to set a "toggle2 to on.
>  you must seperate this, because the first clause has to be asked for
> ONE moment (k-cycle), but has to switch on a state which is at least as
> long as your envelope is.  this is the reason why two if clauses are
> needed (perhaps there are other solutions).  but i don't think any
> reinit is necessary.
>
>
>
> On 18/03/18 21:33, Richard wrote:
>> All communication between UDO's in this project go via zak busses. so
>> the numbers are zak bus numbers.
>> You can read more about it here:
>> https://github.com/gleb812/pch2csd/wiki/Making-a-new-module
>>
>> So LfoA outlet (8) is the first input for EnvAHD (that is the trigger
>> input).
>> That works. When I do printk2 on kTrig I see the values coming in.
>> My question is: how do I trigger the linseg line when KTrig > 0 (or any
>> other value)?
>> I guess I have to do something with reninit, since instr 1 (and thus all
>> UDO's) are run continues..
>>
>> Richard
>>
>>
>> On 18/03/18 20:59, joachim heintz wrote:
>>> hm - not sure what i miss but i don't see any ktrig in your code.  i
>>> only see fixed numbers you give to your UDO as input.  if you like,
>>> perhaps you can describe as simple as possible what you want to do.
>>>     j
>>>
>>>
>>>
>>> On 18/03/18 20:30, Richard wrote:
>>>> well, it's a bit complicated. This is part of the clavia to csd project
>>>> (pch2csd).
>>>> it is a patch with a LFO triggering the envelope that works on an
>>>> oscillator
>>>>
>>>> Here is the UDO:
>>>>
>>>> opcode EnvAHD, 0, kiikikkkkkkk
>>>> ;   parameters                                inputs outputs
>>>> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI, kEnvO,kOut
>>>> xin
>>>> ; NOT FORGET ABOUT KEYBOARD KB
>>>> ; NO SHAPE IMPLEMENTED
>>>> kIn zkr kInI
>>>> kAM zkr kAMI
>>>> kTrig zkr kTrigI
>>>>
>>>> ;                0    1     2     3  4   5
>>>> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
>>>> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
>>>> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>>>>
>>>> kEnv init 0
>>>> kTimer init 0
>>>> kSet init 0
>>>> kStage init 0
>>>> iTotal = iAtt+iHold+iDec
>>>>
>>>> if kTrig > 0 then
>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>>>> endif
>>>>
>>>> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
>>>> zkw kEnvH, kEnvO
>>>> zkw kIn*kEnvH, kOut
>>>> endop
>>>>
>>>> It is used in instr 1 (continues running) like so:
>>>> instr 1
>>>> ; Module    Parameters                 Modes    Inlets Outlets
>>>> A2K                                             7,        7
>>>> LfoA        0.64,0,0,0.0,0,1,4,1,               1,        8
>>>> K2A                                             9,        9
>>>> OscA        0.0,0.0,1,0.0,2,1,0,                1,1,      7
>>>> Out2        0,1,0,                              8,9
>>>> EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7,    0,9
>>>> K2A                                             9,        8
>>>> endin
>>>>
>>>> Important is that instr1 (and therefore the EnvAHD UDO) is running
>>>> continues.
>>>> What I think is wrong with this code:
>>>> if kTrig > 0 then
>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>>>> endif
>>>>
>>>> is that linseg might be triggered at every k value > 0, so also on a
>>>> rising sine.
>>>> Or is it triggered only once, since it uses i-rate params?
>>>>
>>>> Richard
>>>> On 18/03/18 19:37, joachim heintz wrote:
>>>>> can you send the code which is not working for you?
>>>>>     j
>>>>>
>>>>>
>>>>>
>>>>> On 18/03/18 18:47, Richard wrote:
>>>>>> In my UDO I am trying to create a AHD envelope.
>>>>>> I have code like this:
>>>>>>
>>>>>> ; Ktrig could come from a LFO.
>>>>>> iTotal = iAtt + iHold + iDec
>>>>>>
>>>>>> if kTrig > 0 then
>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>> iTotal/iDec, 0
>>>>>> endif
>>>>>>
>>>>>>
>>>>>> But since linseg ues i-rate arguments I think I have to use reinit,
>>>>>> but
>>>>>> don't know how in this case..
>>>>>>
>>>>>> Richard
>>>>>>
>>>>>> Csound mailing list
>>>>>> [hidden email]
>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>> Send bugs reports to
>>>>>>        https://github.com/csound/csound/issues
>>>>>> Discussions of bugs and features can be posted here
>>>>>>
>>>>>
>>>>> Csound mailing list
>>>>> [hidden email]
>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>> Send bugs reports to
>>>>>        https://github.com/csound/csound/issues
>>>>> Discussions of bugs and features can be posted here
>>>>
>>>> Csound mailing list
>>>> [hidden email]
>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>> Send bugs reports to
>>>>        https://github.com/csound/csound/issues
>>>> Discussions of bugs and features can be posted here
>>>>
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>>
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here
>

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

zappfinger
It almost works, except I get a continuous tone.For some reason kOn
never becomes 1.
I have attached the full csd now...

On 18/03/18 22:24, joachim heintz wrote:

> sorry, the first if-clause is nonsense.  you must ask whether kTrig is
> now greater than 0, but the first time.  so should be something like:
>
> kOn init 0
> kPreviousTrig init -1
>
> if kTrig > 0 && kPreviousTrig <= 0 then
>  kOn = 1
> endif
>
> if kOn == 1 then
>  kEnv linseg ...
> endif
>
> kPreviousTrig = kTrig ;set for next k-cycle
>
>
>
> On 18/03/18 21:50, joachim heintz wrote:
>> perhaps you could do something like this:
>>
>> kOn init 0
>>
>> if kTrig > 0 && changed(kTrig) == 1 then
>>  kOne = 1
>> endif
>>
>> if kOn == 1 then
>>  kEnv linseg ...
>> endif
>>
>> in the first if-clause, you ask for the change, to set a "toggle2 to on.
>>  you must seperate this, because the first clause has to be asked for
>> ONE moment (k-cycle), but has to switch on a state which is at least as
>> long as your envelope is.  this is the reason why two if clauses are
>> needed (perhaps there are other solutions).  but i don't think any
>> reinit is necessary.
>>
>>
>>
>> On 18/03/18 21:33, Richard wrote:
>>> All communication between UDO's in this project go via zak busses. so
>>> the numbers are zak bus numbers.
>>> You can read more about it here:
>>> https://github.com/gleb812/pch2csd/wiki/Making-a-new-module
>>>
>>> So LfoA outlet (8) is the first input for EnvAHD (that is the trigger
>>> input).
>>> That works. When I do printk2 on kTrig I see the values coming in.
>>> My question is: how do I trigger the linseg line when KTrig > 0 (or any
>>> other value)?
>>> I guess I have to do something with reninit, since instr 1 (and thus
>>> all
>>> UDO's) are run continues..
>>>
>>> Richard
>>>
>>>
>>> On 18/03/18 20:59, joachim heintz wrote:
>>>> hm - not sure what i miss but i don't see any ktrig in your code.  i
>>>> only see fixed numbers you give to your UDO as input.  if you like,
>>>> perhaps you can describe as simple as possible what you want to do.
>>>>     j
>>>>
>>>>
>>>>
>>>> On 18/03/18 20:30, Richard wrote:
>>>>> well, it's a bit complicated. This is part of the clavia to csd
>>>>> project
>>>>> (pch2csd).
>>>>> it is a patch with a LFO triggering the envelope that works on an
>>>>> oscillator
>>>>>
>>>>> Here is the UDO:
>>>>>
>>>>> opcode EnvAHD, 0, kiikikkkkkkk
>>>>> ;   parameters                                inputs outputs
>>>>> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI, kEnvO,kOut
>>>>> xin
>>>>> ; NOT FORGET ABOUT KEYBOARD KB
>>>>> ; NO SHAPE IMPLEMENTED
>>>>> kIn zkr kInI
>>>>> kAM zkr kAMI
>>>>> kTrig zkr kTrigI
>>>>>
>>>>> ;                0    1     2     3  4   5
>>>>> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
>>>>> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
>>>>> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>>>>>
>>>>> kEnv init 0
>>>>> kTimer init 0
>>>>> kSet init 0
>>>>> kStage init 0
>>>>> iTotal = iAtt+iHold+iDec
>>>>>
>>>>> if kTrig > 0 then
>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>> iTotal/iDec, 0
>>>>> endif
>>>>>
>>>>> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
>>>>> zkw kEnvH, kEnvO
>>>>> zkw kIn*kEnvH, kOut
>>>>> endop
>>>>>
>>>>> It is used in instr 1 (continues running) like so:
>>>>> instr 1
>>>>> ; Module    Parameters                 Modes    Inlets Outlets
>>>>> A2K                                             7, 7
>>>>> LfoA        0.64,0,0,0.0,0,1,4,1,               1, 8
>>>>> K2A                                             9, 9
>>>>> OscA        0.0,0.0,1,0.0,2,1,0,                1,1, 7
>>>>> Out2        0,1,0,                              8,9
>>>>> EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7, 0,9
>>>>> K2A                                             9, 8
>>>>> endin
>>>>>
>>>>> Important is that instr1 (and therefore the EnvAHD UDO) is running
>>>>> continues.
>>>>> What I think is wrong with this code:
>>>>> if kTrig > 0 then
>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>> iTotal/iDec, 0
>>>>> endif
>>>>>
>>>>> is that linseg might be triggered at every k value > 0, so also on a
>>>>> rising sine.
>>>>> Or is it triggered only once, since it uses i-rate params?
>>>>>
>>>>> Richard
>>>>> On 18/03/18 19:37, joachim heintz wrote:
>>>>>> can you send the code which is not working for you?
>>>>>>     j
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 18/03/18 18:47, Richard wrote:
>>>>>>> In my UDO I am trying to create a AHD envelope.
>>>>>>> I have code like this:
>>>>>>>
>>>>>>> ; Ktrig could come from a LFO.
>>>>>>> iTotal = iAtt + iHold + iDec
>>>>>>>
>>>>>>> if kTrig > 0 then
>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>> iTotal/iDec, 0
>>>>>>> endif
>>>>>>>
>>>>>>>
>>>>>>> But since linseg ues i-rate arguments I think I have to use reinit,
>>>>>>> but
>>>>>>> don't know how in this case..
>>>>>>>
>>>>>>> Richard
>>>>>>>
>>>>>>> Csound mailing list
>>>>>>> [hidden email]
>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>> Send bugs reports to
>>>>>>>        https://github.com/csound/csound/issues
>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>
>>>>>>
>>>>>> Csound mailing list
>>>>>> [hidden email]
>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>> Send bugs reports to
>>>>>>        https://github.com/csound/csound/issues
>>>>>> Discussions of bugs and features can be posted here
>>>>>
>>>>> Csound mailing list
>>>>> [hidden email]
>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>> Send bugs reports to
>>>>>        https://github.com/csound/csound/issues
>>>>> Discussions of bugs and features can be posted here
>>>>>
>>>>
>>>> Csound mailing list
>>>> [hidden email]
>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>> Send bugs reports to
>>>>        https://github.com/csound/csound/issues
>>>> Discussions of bugs and features can be posted here
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>>
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>>
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here

envAHD.pch2.csd (6K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

joachim-3
i think this line is wrong:

   if kTrig > 60.0 && kPreviousTrig <= 0 then

try:

   if kTrig > 60.0 && kPreviousTrig <= 60 then

        joachim


On 18/03/18 23:12, Richard wrote:

> It almost works, except I get a continuous tone.For some reason kOn
> never becomes 1.
> I have attached the full csd now...
>
> On 18/03/18 22:24, joachim heintz wrote:
>> sorry, the first if-clause is nonsense.  you must ask whether kTrig is
>> now greater than 0, but the first time.  so should be something like:
>>
>> kOn init 0
>> kPreviousTrig init -1
>>
>> if kTrig > 0 && kPreviousTrig <= 0 then
>>  kOn = 1
>> endif
>>
>> if kOn == 1 then
>>  kEnv linseg ...
>> endif
>>
>> kPreviousTrig = kTrig ;set for next k-cycle
>>
>>
>>
>> On 18/03/18 21:50, joachim heintz wrote:
>>> perhaps you could do something like this:
>>>
>>> kOn init 0
>>>
>>> if kTrig > 0 && changed(kTrig) == 1 then
>>>  kOne = 1
>>> endif
>>>
>>> if kOn == 1 then
>>>  kEnv linseg ...
>>> endif
>>>
>>> in the first if-clause, you ask for the change, to set a "toggle2 to on.
>>>  you must seperate this, because the first clause has to be asked for
>>> ONE moment (k-cycle), but has to switch on a state which is at least as
>>> long as your envelope is.  this is the reason why two if clauses are
>>> needed (perhaps there are other solutions).  but i don't think any
>>> reinit is necessary.
>>>
>>>
>>>
>>> On 18/03/18 21:33, Richard wrote:
>>>> All communication between UDO's in this project go via zak busses. so
>>>> the numbers are zak bus numbers.
>>>> You can read more about it here:
>>>> https://github.com/gleb812/pch2csd/wiki/Making-a-new-module
>>>>
>>>> So LfoA outlet (8) is the first input for EnvAHD (that is the trigger
>>>> input).
>>>> That works. When I do printk2 on kTrig I see the values coming in.
>>>> My question is: how do I trigger the linseg line when KTrig > 0 (or any
>>>> other value)?
>>>> I guess I have to do something with reninit, since instr 1 (and thus
>>>> all
>>>> UDO's) are run continues..
>>>>
>>>> Richard
>>>>
>>>>
>>>> On 18/03/18 20:59, joachim heintz wrote:
>>>>> hm - not sure what i miss but i don't see any ktrig in your code.  i
>>>>> only see fixed numbers you give to your UDO as input.  if you like,
>>>>> perhaps you can describe as simple as possible what you want to do.
>>>>>     j
>>>>>
>>>>>
>>>>>
>>>>> On 18/03/18 20:30, Richard wrote:
>>>>>> well, it's a bit complicated. This is part of the clavia to csd
>>>>>> project
>>>>>> (pch2csd).
>>>>>> it is a patch with a LFO triggering the envelope that works on an
>>>>>> oscillator
>>>>>>
>>>>>> Here is the UDO:
>>>>>>
>>>>>> opcode EnvAHD, 0, kiikikkkkkkk
>>>>>> ;   parameters                                inputs outputs
>>>>>> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI, kEnvO,kOut
>>>>>> xin
>>>>>> ; NOT FORGET ABOUT KEYBOARD KB
>>>>>> ; NO SHAPE IMPLEMENTED
>>>>>> kIn zkr kInI
>>>>>> kAM zkr kAMI
>>>>>> kTrig zkr kTrigI
>>>>>>
>>>>>> ;                0    1     2     3  4   5
>>>>>> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
>>>>>> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
>>>>>> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>>>>>>
>>>>>> kEnv init 0
>>>>>> kTimer init 0
>>>>>> kSet init 0
>>>>>> kStage init 0
>>>>>> iTotal = iAtt+iHold+iDec
>>>>>>
>>>>>> if kTrig > 0 then
>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>> iTotal/iDec, 0
>>>>>> endif
>>>>>>
>>>>>> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
>>>>>> zkw kEnvH, kEnvO
>>>>>> zkw kIn*kEnvH, kOut
>>>>>> endop
>>>>>>
>>>>>> It is used in instr 1 (continues running) like so:
>>>>>> instr 1
>>>>>> ; Module    Parameters                 Modes    Inlets Outlets
>>>>>> A2K                                             7, 7
>>>>>> LfoA        0.64,0,0,0.0,0,1,4,1,               1, 8
>>>>>> K2A                                             9, 9
>>>>>> OscA        0.0,0.0,1,0.0,2,1,0,                1,1, 7
>>>>>> Out2        0,1,0,                              8,9
>>>>>> EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7, 0,9
>>>>>> K2A                                             9, 8
>>>>>> endin
>>>>>>
>>>>>> Important is that instr1 (and therefore the EnvAHD UDO) is running
>>>>>> continues.
>>>>>> What I think is wrong with this code:
>>>>>> if kTrig > 0 then
>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>> iTotal/iDec, 0
>>>>>> endif
>>>>>>
>>>>>> is that linseg might be triggered at every k value > 0, so also on a
>>>>>> rising sine.
>>>>>> Or is it triggered only once, since it uses i-rate params?
>>>>>>
>>>>>> Richard
>>>>>> On 18/03/18 19:37, joachim heintz wrote:
>>>>>>> can you send the code which is not working for you?
>>>>>>>     j
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 18/03/18 18:47, Richard wrote:
>>>>>>>> In my UDO I am trying to create a AHD envelope.
>>>>>>>> I have code like this:
>>>>>>>>
>>>>>>>> ; Ktrig could come from a LFO.
>>>>>>>> iTotal = iAtt + iHold + iDec
>>>>>>>>
>>>>>>>> if kTrig > 0 then
>>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>>> iTotal/iDec, 0
>>>>>>>> endif
>>>>>>>>
>>>>>>>>
>>>>>>>> But since linseg ues i-rate arguments I think I have to use reinit,
>>>>>>>> but
>>>>>>>> don't know how in this case..
>>>>>>>>
>>>>>>>> Richard
>>>>>>>>
>>>>>>>> Csound mailing list
>>>>>>>> [hidden email]
>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>> Send bugs reports to
>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>>
>>>>>>>
>>>>>>> Csound mailing list
>>>>>>> [hidden email]
>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>> Send bugs reports to
>>>>>>>        https://github.com/csound/csound/issues
>>>>>>> Discussions of bugs and features can be posted here
>>>>>>
>>>>>> Csound mailing list
>>>>>> [hidden email]
>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>> Send bugs reports to
>>>>>>        https://github.com/csound/csound/issues
>>>>>> Discussions of bugs and features can be posted here
>>>>>>
>>>>>
>>>>> Csound mailing list
>>>>> [hidden email]
>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>> Send bugs reports to
>>>>>        https://github.com/csound/csound/issues
>>>>> Discussions of bugs and features can be posted here
>>>>
>>>> Csound mailing list
>>>> [hidden email]
>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>> Send bugs reports to
>>>>        https://github.com/csound/csound/issues
>>>> Discussions of bugs and features can be posted here
>>>>
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>>
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

zappfinger
Still the same result. I'll look into it later today.

Richard


On 19/03/18 07:20, joachim heintz wrote:

> i think this line is wrong:
>
>   if kTrig > 60.0 && kPreviousTrig <= 0 then
>
> try:
>
>   if kTrig > 60.0 && kPreviousTrig <= 60 then
>
>     joachim
>
>
> On 18/03/18 23:12, Richard wrote:
>> It almost works, except I get a continuous tone.For some reason kOn
>> never becomes 1.
>> I have attached the full csd now...
>>
>> On 18/03/18 22:24, joachim heintz wrote:
>>> sorry, the first if-clause is nonsense. you must ask whether kTrig is
>>> now greater than 0, but the first time.  so should be something like:
>>>
>>> kOn init 0
>>> kPreviousTrig init -1
>>>
>>> if kTrig > 0 && kPreviousTrig <= 0 then
>>>  kOn = 1
>>> endif
>>>
>>> if kOn == 1 then
>>>  kEnv linseg ...
>>> endif
>>>
>>> kPreviousTrig = kTrig ;set for next k-cycle
>>>
>>>
>>>
>>> On 18/03/18 21:50, joachim heintz wrote:
>>>> perhaps you could do something like this:
>>>>
>>>> kOn init 0
>>>>
>>>> if kTrig > 0 && changed(kTrig) == 1 then
>>>>  kOne = 1
>>>> endif
>>>>
>>>> if kOn == 1 then
>>>>  kEnv linseg ...
>>>> endif
>>>>
>>>> in the first if-clause, you ask for the change, to set a "toggle2
>>>> to on.
>>>>  you must seperate this, because the first clause has to be asked for
>>>> ONE moment (k-cycle), but has to switch on a state which is at
>>>> least as
>>>> long as your envelope is.  this is the reason why two if clauses are
>>>> needed (perhaps there are other solutions).  but i don't think any
>>>> reinit is necessary.
>>>>
>>>>
>>>>
>>>> On 18/03/18 21:33, Richard wrote:
>>>>> All communication between UDO's in this project go via zak busses. so
>>>>> the numbers are zak bus numbers.
>>>>> You can read more about it here:
>>>>> https://github.com/gleb812/pch2csd/wiki/Making-a-new-module
>>>>>
>>>>> So LfoA outlet (8) is the first input for EnvAHD (that is the trigger
>>>>> input).
>>>>> That works. When I do printk2 on kTrig I see the values coming in.
>>>>> My question is: how do I trigger the linseg line when KTrig > 0
>>>>> (or any
>>>>> other value)?
>>>>> I guess I have to do something with reninit, since instr 1 (and thus
>>>>> all
>>>>> UDO's) are run continues..
>>>>>
>>>>> Richard
>>>>>
>>>>>
>>>>> On 18/03/18 20:59, joachim heintz wrote:
>>>>>> hm - not sure what i miss but i don't see any ktrig in your code.  i
>>>>>> only see fixed numbers you give to your UDO as input. if you like,
>>>>>> perhaps you can describe as simple as possible what you want to do.
>>>>>>     j
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 18/03/18 20:30, Richard wrote:
>>>>>>> well, it's a bit complicated. This is part of the clavia to csd
>>>>>>> project
>>>>>>> (pch2csd).
>>>>>>> it is a patch with a LFO triggering the envelope that works on an
>>>>>>> oscillator
>>>>>>>
>>>>>>> Here is the UDO:
>>>>>>>
>>>>>>> opcode EnvAHD, 0, kiikikkkkkkk
>>>>>>> ;   parameters                                inputs outputs
>>>>>>> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI,
>>>>>>> kEnvO,kOut
>>>>>>> xin
>>>>>>> ; NOT FORGET ABOUT KEYBOARD KB
>>>>>>> ; NO SHAPE IMPLEMENTED
>>>>>>> kIn zkr kInI
>>>>>>> kAM zkr kAMI
>>>>>>> kTrig zkr kTrigI
>>>>>>>
>>>>>>> ;                0    1     2     3  4   5
>>>>>>> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
>>>>>>> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
>>>>>>> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>>>>>>>
>>>>>>> kEnv init 0
>>>>>>> kTimer init 0
>>>>>>> kSet init 0
>>>>>>> kStage init 0
>>>>>>> iTotal = iAtt+iHold+iDec
>>>>>>>
>>>>>>> if kTrig > 0 then
>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>> iTotal/iDec, 0
>>>>>>> endif
>>>>>>>
>>>>>>> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
>>>>>>> zkw kEnvH, kEnvO
>>>>>>> zkw kIn*kEnvH, kOut
>>>>>>> endop
>>>>>>>
>>>>>>> It is used in instr 1 (continues running) like so:
>>>>>>> instr 1
>>>>>>> ; Module    Parameters                 Modes    Inlets Outlets
>>>>>>> A2K                                             7, 7
>>>>>>> LfoA        0.64,0,0,0.0,0,1,4,1,               1, 8
>>>>>>> K2A                                             9, 9
>>>>>>> OscA        0.0,0.0,1,0.0,2,1,0,                1,1, 7
>>>>>>> Out2        0,1,0,                              8,9
>>>>>>> EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7, 0,9
>>>>>>> K2A                                             9, 8
>>>>>>> endin
>>>>>>>
>>>>>>> Important is that instr1 (and therefore the EnvAHD UDO) is running
>>>>>>> continues.
>>>>>>> What I think is wrong with this code:
>>>>>>> if kTrig > 0 then
>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>> iTotal/iDec, 0
>>>>>>> endif
>>>>>>>
>>>>>>> is that linseg might be triggered at every k value > 0, so also
>>>>>>> on a
>>>>>>> rising sine.
>>>>>>> Or is it triggered only once, since it uses i-rate params?
>>>>>>>
>>>>>>> Richard
>>>>>>> On 18/03/18 19:37, joachim heintz wrote:
>>>>>>>> can you send the code which is not working for you?
>>>>>>>>     j
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 18/03/18 18:47, Richard wrote:
>>>>>>>>> In my UDO I am trying to create a AHD envelope.
>>>>>>>>> I have code like this:
>>>>>>>>>
>>>>>>>>> ; Ktrig could come from a LFO.
>>>>>>>>> iTotal = iAtt + iHold + iDec
>>>>>>>>>
>>>>>>>>> if kTrig > 0 then
>>>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>>>> iTotal/iDec, 0
>>>>>>>>> endif
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> But since linseg ues i-rate arguments I think I have to use
>>>>>>>>> reinit,
>>>>>>>>> but
>>>>>>>>> don't know how in this case..
>>>>>>>>>
>>>>>>>>> Richard
>>>>>>>>>
>>>>>>>>> Csound mailing list
>>>>>>>>> [hidden email]
>>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>>> Send bugs reports to
>>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>>>
>>>>>>>>
>>>>>>>> Csound mailing list
>>>>>>>> [hidden email]
>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>> Send bugs reports to
>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>
>>>>>>> Csound mailing list
>>>>>>> [hidden email]
>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>> Send bugs reports to
>>>>>>>        https://github.com/csound/csound/issues
>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>
>>>>>>
>>>>>> Csound mailing list
>>>>>> [hidden email]
>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>> Send bugs reports to
>>>>>>        https://github.com/csound/csound/issues
>>>>>> Discussions of bugs and features can be posted here
>>>>>
>>>>> Csound mailing list
>>>>> [hidden email]
>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>> Send bugs reports to
>>>>>        https://github.com/csound/csound/issues
>>>>> Discussions of bugs and features can be posted here
>>>>>
>>>>
>>>> Csound mailing list
>>>> [hidden email]
>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>> Send bugs reports to
>>>>        https://github.com/csound/csound/issues
>>>> Discussions of bugs and features can be posted here
>>>>
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

zappfinger
In reply to this post by joachim-3
I changed it a bit, but still not working.
I do not get it, kOn only changes once from 0 to 1, but not after that:

kOn init 0
kCount init 0

if kTrig > 60.0 && kOn==0 then
   kOn = 1
endif

if kOn >= 1 then
     printk2 kOn
      ;kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
      kEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
      kCount += 1
endif
if kCount>10 && kEnv==0 then  ; kEnv becomes 0 again at the end of the
envelope
    kOn = 0
    kCount = 0
    printk2 kOn
endif

Richard

On 19/03/18 07:20, joachim heintz wrote:

> i think this line is wrong:
>
>   if kTrig > 60.0 && kPreviousTrig <= 0 then
>
> try:
>
>   if kTrig > 60.0 && kPreviousTrig <= 60 then
>
>     joachim
>
>
> On 18/03/18 23:12, Richard wrote:
>> It almost works, except I get a continuous tone.For some reason kOn
>> never becomes 1.
>> I have attached the full csd now...
>>
>> On 18/03/18 22:24, joachim heintz wrote:
>>> sorry, the first if-clause is nonsense. you must ask whether kTrig is
>>> now greater than 0, but the first time.  so should be something like:
>>>
>>> kOn init 0
>>> kPreviousTrig init -1
>>>
>>> if kTrig > 0 && kPreviousTrig <= 0 then
>>>  kOn = 1
>>> endif
>>>
>>> if kOn == 1 then
>>>  kEnv linseg ...
>>> endif
>>>
>>> kPreviousTrig = kTrig ;set for next k-cycle
>>>
>>>
>>>
>>> On 18/03/18 21:50, joachim heintz wrote:
>>>> perhaps you could do something like this:
>>>>
>>>> kOn init 0
>>>>
>>>> if kTrig > 0 && changed(kTrig) == 1 then
>>>>  kOne = 1
>>>> endif
>>>>
>>>> if kOn == 1 then
>>>>  kEnv linseg ...
>>>> endif
>>>>
>>>> in the first if-clause, you ask for the change, to set a "toggle2
>>>> to on.
>>>>  you must seperate this, because the first clause has to be asked for
>>>> ONE moment (k-cycle), but has to switch on a state which is at
>>>> least as
>>>> long as your envelope is.  this is the reason why two if clauses are
>>>> needed (perhaps there are other solutions).  but i don't think any
>>>> reinit is necessary.
>>>>
>>>>
>>>>
>>>> On 18/03/18 21:33, Richard wrote:
>>>>> All communication between UDO's in this project go via zak busses. so
>>>>> the numbers are zak bus numbers.
>>>>> You can read more about it here:
>>>>> https://github.com/gleb812/pch2csd/wiki/Making-a-new-module
>>>>>
>>>>> So LfoA outlet (8) is the first input for EnvAHD (that is the trigger
>>>>> input).
>>>>> That works. When I do printk2 on kTrig I see the values coming in.
>>>>> My question is: how do I trigger the linseg line when KTrig > 0
>>>>> (or any
>>>>> other value)?
>>>>> I guess I have to do something with reninit, since instr 1 (and thus
>>>>> all
>>>>> UDO's) are run continues..
>>>>>
>>>>> Richard
>>>>>
>>>>>
>>>>> On 18/03/18 20:59, joachim heintz wrote:
>>>>>> hm - not sure what i miss but i don't see any ktrig in your code.  i
>>>>>> only see fixed numbers you give to your UDO as input. if you like,
>>>>>> perhaps you can describe as simple as possible what you want to do.
>>>>>>     j
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 18/03/18 20:30, Richard wrote:
>>>>>>> well, it's a bit complicated. This is part of the clavia to csd
>>>>>>> project
>>>>>>> (pch2csd).
>>>>>>> it is a patch with a LFO triggering the envelope that works on an
>>>>>>> oscillator
>>>>>>>
>>>>>>> Here is the UDO:
>>>>>>>
>>>>>>> opcode EnvAHD, 0, kiikikkkkkkk
>>>>>>> ;   parameters                                inputs outputs
>>>>>>> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI,
>>>>>>> kEnvO,kOut
>>>>>>> xin
>>>>>>> ; NOT FORGET ABOUT KEYBOARD KB
>>>>>>> ; NO SHAPE IMPLEMENTED
>>>>>>> kIn zkr kInI
>>>>>>> kAM zkr kAMI
>>>>>>> kTrig zkr kTrigI
>>>>>>>
>>>>>>> ;                0    1     2     3  4   5
>>>>>>> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
>>>>>>> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
>>>>>>> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>>>>>>>
>>>>>>> kEnv init 0
>>>>>>> kTimer init 0
>>>>>>> kSet init 0
>>>>>>> kStage init 0
>>>>>>> iTotal = iAtt+iHold+iDec
>>>>>>>
>>>>>>> if kTrig > 0 then
>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>> iTotal/iDec, 0
>>>>>>> endif
>>>>>>>
>>>>>>> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
>>>>>>> zkw kEnvH, kEnvO
>>>>>>> zkw kIn*kEnvH, kOut
>>>>>>> endop
>>>>>>>
>>>>>>> It is used in instr 1 (continues running) like so:
>>>>>>> instr 1
>>>>>>> ; Module    Parameters                 Modes    Inlets Outlets
>>>>>>> A2K                                             7, 7
>>>>>>> LfoA        0.64,0,0,0.0,0,1,4,1,               1, 8
>>>>>>> K2A                                             9, 9
>>>>>>> OscA        0.0,0.0,1,0.0,2,1,0,                1,1, 7
>>>>>>> Out2        0,1,0,                              8,9
>>>>>>> EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7, 0,9
>>>>>>> K2A                                             9, 8
>>>>>>> endin
>>>>>>>
>>>>>>> Important is that instr1 (and therefore the EnvAHD UDO) is running
>>>>>>> continues.
>>>>>>> What I think is wrong with this code:
>>>>>>> if kTrig > 0 then
>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>> iTotal/iDec, 0
>>>>>>> endif
>>>>>>>
>>>>>>> is that linseg might be triggered at every k value > 0, so also
>>>>>>> on a
>>>>>>> rising sine.
>>>>>>> Or is it triggered only once, since it uses i-rate params?
>>>>>>>
>>>>>>> Richard
>>>>>>> On 18/03/18 19:37, joachim heintz wrote:
>>>>>>>> can you send the code which is not working for you?
>>>>>>>>     j
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 18/03/18 18:47, Richard wrote:
>>>>>>>>> In my UDO I am trying to create a AHD envelope.
>>>>>>>>> I have code like this:
>>>>>>>>>
>>>>>>>>> ; Ktrig could come from a LFO.
>>>>>>>>> iTotal = iAtt + iHold + iDec
>>>>>>>>>
>>>>>>>>> if kTrig > 0 then
>>>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>>>> iTotal/iDec, 0
>>>>>>>>> endif
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> But since linseg ues i-rate arguments I think I have to use
>>>>>>>>> reinit,
>>>>>>>>> but
>>>>>>>>> don't know how in this case..
>>>>>>>>>
>>>>>>>>> Richard
>>>>>>>>>
>>>>>>>>> Csound mailing list
>>>>>>>>> [hidden email]
>>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>>> Send bugs reports to
>>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>>>
>>>>>>>>
>>>>>>>> Csound mailing list
>>>>>>>> [hidden email]
>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>> Send bugs reports to
>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>
>>>>>>> Csound mailing list
>>>>>>> [hidden email]
>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>> Send bugs reports to
>>>>>>>        https://github.com/csound/csound/issues
>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>
>>>>>>
>>>>>> Csound mailing list
>>>>>> [hidden email]
>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>> Send bugs reports to
>>>>>>        https://github.com/csound/csound/issues
>>>>>> Discussions of bugs and features can be posted here
>>>>>
>>>>> Csound mailing list
>>>>> [hidden email]
>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>> Send bugs reports to
>>>>>        https://github.com/csound/csound/issues
>>>>> Discussions of bugs and features can be posted here
>>>>>
>>>>
>>>> Csound mailing list
>>>> [hidden email]
>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>> Send bugs reports to
>>>>        https://github.com/csound/csound/issues
>>>> Discussions of bugs and features can be posted here
>>>>
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

joachim-3
i think you do not reset kOn to zero.  you have a counter which probably
becomes 1, but not more.  but you only reset kOn to zero if the counter
is greater than ten.

if you can construct a simple example with the kTrig signal, i am happy
to help if i can.  but i have no idea about zak.

        joachim



On 19/03/18 22:33, Richard wrote:

> I changed it a bit, but still not working.
> I do not get it, kOn only changes once from 0 to 1, but not after that:
>
> kOn init 0
> kCount init 0
>
> if kTrig > 60.0 && kOn==0 then
>   kOn = 1
> endif
>
> if kOn >= 1 then
>     printk2 kOn
>      ;kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>      kEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
>      kCount += 1
> endif
> if kCount>10 && kEnv==0 then  ; kEnv becomes 0 again at the end of the
> envelope
>    kOn = 0
>    kCount = 0
>    printk2 kOn
> endif
>
> Richard
>
> On 19/03/18 07:20, joachim heintz wrote:
>> i think this line is wrong:
>>
>>   if kTrig > 60.0 && kPreviousTrig <= 0 then
>>
>> try:
>>
>>   if kTrig > 60.0 && kPreviousTrig <= 60 then
>>
>>     joachim
>>
>>
>> On 18/03/18 23:12, Richard wrote:
>>> It almost works, except I get a continuous tone.For some reason kOn
>>> never becomes 1.
>>> I have attached the full csd now...
>>>
>>> On 18/03/18 22:24, joachim heintz wrote:
>>>> sorry, the first if-clause is nonsense. you must ask whether kTrig is
>>>> now greater than 0, but the first time.  so should be something like:
>>>>
>>>> kOn init 0
>>>> kPreviousTrig init -1
>>>>
>>>> if kTrig > 0 && kPreviousTrig <= 0 then
>>>>  kOn = 1
>>>> endif
>>>>
>>>> if kOn == 1 then
>>>>  kEnv linseg ...
>>>> endif
>>>>
>>>> kPreviousTrig = kTrig ;set for next k-cycle
>>>>
>>>>
>>>>
>>>> On 18/03/18 21:50, joachim heintz wrote:
>>>>> perhaps you could do something like this:
>>>>>
>>>>> kOn init 0
>>>>>
>>>>> if kTrig > 0 && changed(kTrig) == 1 then
>>>>>  kOne = 1
>>>>> endif
>>>>>
>>>>> if kOn == 1 then
>>>>>  kEnv linseg ...
>>>>> endif
>>>>>
>>>>> in the first if-clause, you ask for the change, to set a "toggle2
>>>>> to on.
>>>>>  you must seperate this, because the first clause has to be asked for
>>>>> ONE moment (k-cycle), but has to switch on a state which is at
>>>>> least as
>>>>> long as your envelope is.  this is the reason why two if clauses are
>>>>> needed (perhaps there are other solutions).  but i don't think any
>>>>> reinit is necessary.
>>>>>
>>>>>
>>>>>
>>>>> On 18/03/18 21:33, Richard wrote:
>>>>>> All communication between UDO's in this project go via zak busses. so
>>>>>> the numbers are zak bus numbers.
>>>>>> You can read more about it here:
>>>>>> https://github.com/gleb812/pch2csd/wiki/Making-a-new-module
>>>>>>
>>>>>> So LfoA outlet (8) is the first input for EnvAHD (that is the trigger
>>>>>> input).
>>>>>> That works. When I do printk2 on kTrig I see the values coming in.
>>>>>> My question is: how do I trigger the linseg line when KTrig > 0
>>>>>> (or any
>>>>>> other value)?
>>>>>> I guess I have to do something with reninit, since instr 1 (and thus
>>>>>> all
>>>>>> UDO's) are run continues..
>>>>>>
>>>>>> Richard
>>>>>>
>>>>>>
>>>>>> On 18/03/18 20:59, joachim heintz wrote:
>>>>>>> hm - not sure what i miss but i don't see any ktrig in your code.  i
>>>>>>> only see fixed numbers you give to your UDO as input. if you like,
>>>>>>> perhaps you can describe as simple as possible what you want to do.
>>>>>>>     j
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 18/03/18 20:30, Richard wrote:
>>>>>>>> well, it's a bit complicated. This is part of the clavia to csd
>>>>>>>> project
>>>>>>>> (pch2csd).
>>>>>>>> it is a patch with a LFO triggering the envelope that works on an
>>>>>>>> oscillator
>>>>>>>>
>>>>>>>> Here is the UDO:
>>>>>>>>
>>>>>>>> opcode EnvAHD, 0, kiikikkkkkkk
>>>>>>>> ;   parameters                                inputs outputs
>>>>>>>> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI,
>>>>>>>> kEnvO,kOut
>>>>>>>> xin
>>>>>>>> ; NOT FORGET ABOUT KEYBOARD KB
>>>>>>>> ; NO SHAPE IMPLEMENTED
>>>>>>>> kIn zkr kInI
>>>>>>>> kAM zkr kAMI
>>>>>>>> kTrig zkr kTrigI
>>>>>>>>
>>>>>>>> ;                0    1     2     3  4   5
>>>>>>>> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
>>>>>>>> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
>>>>>>>> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>>>>>>>>
>>>>>>>> kEnv init 0
>>>>>>>> kTimer init 0
>>>>>>>> kSet init 0
>>>>>>>> kStage init 0
>>>>>>>> iTotal = iAtt+iHold+iDec
>>>>>>>>
>>>>>>>> if kTrig > 0 then
>>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>>> iTotal/iDec, 0
>>>>>>>> endif
>>>>>>>>
>>>>>>>> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
>>>>>>>> zkw kEnvH, kEnvO
>>>>>>>> zkw kIn*kEnvH, kOut
>>>>>>>> endop
>>>>>>>>
>>>>>>>> It is used in instr 1 (continues running) like so:
>>>>>>>> instr 1
>>>>>>>> ; Module    Parameters                 Modes    Inlets Outlets
>>>>>>>> A2K                                             7, 7
>>>>>>>> LfoA        0.64,0,0,0.0,0,1,4,1,               1, 8
>>>>>>>> K2A                                             9, 9
>>>>>>>> OscA        0.0,0.0,1,0.0,2,1,0,                1,1, 7
>>>>>>>> Out2        0,1,0,                              8,9
>>>>>>>> EnvAHD      3,0.477,0.25,0,0.109,0,1,           8,1,7, 0,9
>>>>>>>> K2A                                             9, 8
>>>>>>>> endin
>>>>>>>>
>>>>>>>> Important is that instr1 (and therefore the EnvAHD UDO) is running
>>>>>>>> continues.
>>>>>>>> What I think is wrong with this code:
>>>>>>>> if kTrig > 0 then
>>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>>> iTotal/iDec, 0
>>>>>>>> endif
>>>>>>>>
>>>>>>>> is that linseg might be triggered at every k value > 0, so also
>>>>>>>> on a
>>>>>>>> rising sine.
>>>>>>>> Or is it triggered only once, since it uses i-rate params?
>>>>>>>>
>>>>>>>> Richard
>>>>>>>> On 18/03/18 19:37, joachim heintz wrote:
>>>>>>>>> can you send the code which is not working for you?
>>>>>>>>>     j
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 18/03/18 18:47, Richard wrote:
>>>>>>>>>> In my UDO I am trying to create a AHD envelope.
>>>>>>>>>> I have code like this:
>>>>>>>>>>
>>>>>>>>>> ; Ktrig could come from a LFO.
>>>>>>>>>> iTotal = iAtt + iHold + iDec
>>>>>>>>>>
>>>>>>>>>> if kTrig > 0 then
>>>>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>>>>> iTotal/iDec, 0
>>>>>>>>>> endif
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> But since linseg ues i-rate arguments I think I have to use
>>>>>>>>>> reinit,
>>>>>>>>>> but
>>>>>>>>>> don't know how in this case..
>>>>>>>>>>
>>>>>>>>>> Richard
>>>>>>>>>>
>>>>>>>>>> Csound mailing list
>>>>>>>>>> [hidden email]
>>>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>>>> Send bugs reports to
>>>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Csound mailing list
>>>>>>>>> [hidden email]
>>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>>> Send bugs reports to
>>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>>
>>>>>>>> Csound mailing list
>>>>>>>> [hidden email]
>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>> Send bugs reports to
>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>>
>>>>>>>
>>>>>>> Csound mailing list
>>>>>>> [hidden email]
>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>> Send bugs reports to
>>>>>>>        https://github.com/csound/csound/issues
>>>>>>> Discussions of bugs and features can be posted here
>>>>>>
>>>>>> Csound mailing list
>>>>>> [hidden email]
>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>> Send bugs reports to
>>>>>>        https://github.com/csound/csound/issues
>>>>>> Discussions of bugs and features can be posted here
>>>>>>
>>>>>
>>>>> Csound mailing list
>>>>> [hidden email]
>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>> Send bugs reports to
>>>>>        https://github.com/csound/csound/issues
>>>>> Discussions of bugs and features can be posted here
>>>>>
>>>>
>>>> Csound mailing list
>>>> [hidden email]
>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>> Send bugs reports to
>>>>        https://github.com/csound/csound/issues
>>>> Discussions of bugs and features can be posted here
>>>
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here
>

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

zappfinger
Here's a simple csd that shows the same problem.

This line:

if kCount>10 && kEnv==0 then
    kOn = 0

should in fact wait till the end of the envelope, since then it becomes
0 again. The number 10 is just arbitrary. It should be > 1
since kEnv is also 0 at the start of the envelope

Richard


On 20/03/18 07:57, joachim heintz wrote:

> i think you do not reset kOn to zero.  you have a counter which
> probably becomes 1, but not more.  but you only reset kOn to zero if
> the counter is greater than ten.
>
> if you can construct a simple example with the kTrig signal, i am
> happy to help if i can.  but i have no idea about zak.
>
>     joachim
>
>
>
> On 19/03/18 22:33, Richard wrote:
>> I changed it a bit, but still not working.
>> I do not get it, kOn only changes once from 0 to 1, but not after that:
>>
>> kOn init 0
>> kCount init 0
>>
>> if kTrig > 60.0 && kOn==0 then
>>   kOn = 1
>> endif
>>
>> if kOn >= 1 then
>>     printk2 kOn
>>      ;kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9, iTotal/iDec, 0
>>      kEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
>>      kCount += 1
>> endif
>> if kCount>10 && kEnv==0 then  ; kEnv becomes 0 again at the end of the
>> envelope
>>    kOn = 0
>>    kCount = 0
>>    printk2 kOn
>> endif
>>
>> Richard
>>
>> On 19/03/18 07:20, joachim heintz wrote:
>>> i think this line is wrong:
>>>
>>>   if kTrig > 60.0 && kPreviousTrig <= 0 then
>>>
>>> try:
>>>
>>>   if kTrig > 60.0 && kPreviousTrig <= 60 then
>>>
>>>     joachim
>>>
>>>
>>> On 18/03/18 23:12, Richard wrote:
>>>> It almost works, except I get a continuous tone.For some reason kOn
>>>> never becomes 1.
>>>> I have attached the full csd now...
>>>>
>>>> On 18/03/18 22:24, joachim heintz wrote:
>>>>> sorry, the first if-clause is nonsense. you must ask whether kTrig is
>>>>> now greater than 0, but the first time.  so should be something like:
>>>>>
>>>>> kOn init 0
>>>>> kPreviousTrig init -1
>>>>>
>>>>> if kTrig > 0 && kPreviousTrig <= 0 then
>>>>>  kOn = 1
>>>>> endif
>>>>>
>>>>> if kOn == 1 then
>>>>>  kEnv linseg ...
>>>>> endif
>>>>>
>>>>> kPreviousTrig = kTrig ;set for next k-cycle
>>>>>
>>>>>
>>>>>
>>>>> On 18/03/18 21:50, joachim heintz wrote:
>>>>>> perhaps you could do something like this:
>>>>>>
>>>>>> kOn init 0
>>>>>>
>>>>>> if kTrig > 0 && changed(kTrig) == 1 then
>>>>>>  kOne = 1
>>>>>> endif
>>>>>>
>>>>>> if kOn == 1 then
>>>>>>  kEnv linseg ...
>>>>>> endif
>>>>>>
>>>>>> in the first if-clause, you ask for the change, to set a "toggle2
>>>>>> to on.
>>>>>>  you must seperate this, because the first clause has to be asked
>>>>>> for
>>>>>> ONE moment (k-cycle), but has to switch on a state which is at
>>>>>> least as
>>>>>> long as your envelope is.  this is the reason why two if clauses are
>>>>>> needed (perhaps there are other solutions).  but i don't think any
>>>>>> reinit is necessary.
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 18/03/18 21:33, Richard wrote:
>>>>>>> All communication between UDO's in this project go via zak
>>>>>>> busses. so
>>>>>>> the numbers are zak bus numbers.
>>>>>>> You can read more about it here:
>>>>>>> https://github.com/gleb812/pch2csd/wiki/Making-a-new-module
>>>>>>>
>>>>>>> So LfoA outlet (8) is the first input for EnvAHD (that is the
>>>>>>> trigger
>>>>>>> input).
>>>>>>> That works. When I do printk2 on kTrig I see the values coming in.
>>>>>>> My question is: how do I trigger the linseg line when KTrig > 0
>>>>>>> (or any
>>>>>>> other value)?
>>>>>>> I guess I have to do something with reninit, since instr 1 (and
>>>>>>> thus
>>>>>>> all
>>>>>>> UDO's) are run continues..
>>>>>>>
>>>>>>> Richard
>>>>>>>
>>>>>>>
>>>>>>> On 18/03/18 20:59, joachim heintz wrote:
>>>>>>>> hm - not sure what i miss but i don't see any ktrig in your
>>>>>>>> code.  i
>>>>>>>> only see fixed numbers you give to your UDO as input. if you like,
>>>>>>>> perhaps you can describe as simple as possible what you want to
>>>>>>>> do.
>>>>>>>>     j
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 18/03/18 20:30, Richard wrote:
>>>>>>>>> well, it's a bit complicated. This is part of the clavia to csd
>>>>>>>>> project
>>>>>>>>> (pch2csd).
>>>>>>>>> it is a patch with a LFO triggering the envelope that works on an
>>>>>>>>> oscillator
>>>>>>>>>
>>>>>>>>> Here is the UDO:
>>>>>>>>>
>>>>>>>>> opcode EnvAHD, 0, kiikikkkkkkk
>>>>>>>>> ;   parameters inputs outputs
>>>>>>>>> kShape,iAtt,iHold,kReset,iDec,kSW,kKBT, kTrigI,kAMI,kInI,
>>>>>>>>> kEnvO,kOut
>>>>>>>>> xin
>>>>>>>>> ; NOT FORGET ABOUT KEYBOARD KB
>>>>>>>>> ; NO SHAPE IMPLEMENTED
>>>>>>>>> kIn zkr kInI
>>>>>>>>> kAM zkr kAMI
>>>>>>>>> kTrig zkr kTrigI
>>>>>>>>>
>>>>>>>>> ;                0    1     2     3  4   5
>>>>>>>>> k1[] fillarray 0.5, 0.5,  0.5,  0.5, 1,  1
>>>>>>>>> k2[] fillarray 0.5, -0.5, -0.5, 0.5, 0,  0
>>>>>>>>> k3[] fillarray 1,   -1,     1,   -1, 1, -1
>>>>>>>>>
>>>>>>>>> kEnv init 0
>>>>>>>>> kTimer init 0
>>>>>>>>> kSet init 0
>>>>>>>>> kStage init 0
>>>>>>>>> iTotal = iAtt+iHold+iDec
>>>>>>>>>
>>>>>>>>> if kTrig > 0 then
>>>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>>>> iTotal/iDec, 0
>>>>>>>>> endif
>>>>>>>>>
>>>>>>>>> kEnvH = k1[kSW]*kEnv*(1-kAM)+k2[kSW]*k3[kSW]
>>>>>>>>> zkw kEnvH, kEnvO
>>>>>>>>> zkw kIn*kEnvH, kOut
>>>>>>>>> endop
>>>>>>>>>
>>>>>>>>> It is used in instr 1 (continues running) like so:
>>>>>>>>> instr 1
>>>>>>>>> ; Module    Parameters                 Modes Inlets Outlets
>>>>>>>>> A2K                                             7, 7
>>>>>>>>> LfoA        0.64,0,0,0.0,0,1,4,1,               1, 8
>>>>>>>>> K2A                                             9, 9
>>>>>>>>> OscA        0.0,0.0,1,0.0,2,1,0, 1,1, 7
>>>>>>>>> Out2        0,1,0, 8,9
>>>>>>>>> EnvAHD      3,0.477,0.25,0,0.109,0,1, 8,1,7, 0,9
>>>>>>>>> K2A                                             9, 8
>>>>>>>>> endin
>>>>>>>>>
>>>>>>>>> Important is that instr1 (and therefore the EnvAHD UDO) is
>>>>>>>>> running
>>>>>>>>> continues.
>>>>>>>>> What I think is wrong with this code:
>>>>>>>>> if kTrig > 0 then
>>>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>>>> iTotal/iDec, 0
>>>>>>>>> endif
>>>>>>>>>
>>>>>>>>> is that linseg might be triggered at every k value > 0, so also
>>>>>>>>> on a
>>>>>>>>> rising sine.
>>>>>>>>> Or is it triggered only once, since it uses i-rate params?
>>>>>>>>>
>>>>>>>>> Richard
>>>>>>>>> On 18/03/18 19:37, joachim heintz wrote:
>>>>>>>>>> can you send the code which is not working for you?
>>>>>>>>>>     j
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 18/03/18 18:47, Richard wrote:
>>>>>>>>>>> In my UDO I am trying to create a AHD envelope.
>>>>>>>>>>> I have code like this:
>>>>>>>>>>>
>>>>>>>>>>> ; Ktrig could come from a LFO.
>>>>>>>>>>> iTotal = iAtt + iHold + iDec
>>>>>>>>>>>
>>>>>>>>>>> if kTrig > 0 then
>>>>>>>>>>>     kEnv linseg 0, iTotal/iAtt, 0.9, iTotal/iHold, 0.9,
>>>>>>>>>>> iTotal/iDec, 0
>>>>>>>>>>> endif
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> But since linseg ues i-rate arguments I think I have to use
>>>>>>>>>>> reinit,
>>>>>>>>>>> but
>>>>>>>>>>> don't know how in this case..
>>>>>>>>>>>
>>>>>>>>>>> Richard
>>>>>>>>>>>
>>>>>>>>>>> Csound mailing list
>>>>>>>>>>> [hidden email]
>>>>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>>>>> Send bugs reports to
>>>>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Csound mailing list
>>>>>>>>>> [hidden email]
>>>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>>>> Send bugs reports to
>>>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>>>
>>>>>>>>> Csound mailing list
>>>>>>>>> [hidden email]
>>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>>> Send bugs reports to
>>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>>>
>>>>>>>>
>>>>>>>> Csound mailing list
>>>>>>>> [hidden email]
>>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>>> Send bugs reports to
>>>>>>>>        https://github.com/csound/csound/issues
>>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>
>>>>>>> Csound mailing list
>>>>>>> [hidden email]
>>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>>> Send bugs reports to
>>>>>>>        https://github.com/csound/csound/issues
>>>>>>> Discussions of bugs and features can be posted here
>>>>>>>
>>>>>>
>>>>>> Csound mailing list
>>>>>> [hidden email]
>>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>>> Send bugs reports to
>>>>>>        https://github.com/csound/csound/issues
>>>>>> Discussions of bugs and features can be posted here
>>>>>>
>>>>>
>>>>> Csound mailing list
>>>>> [hidden email]
>>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>>> Send bugs reports to
>>>>>        https://github.com/csound/csound/issues
>>>>> Discussions of bugs and features can be posted here
>>>>
>>>>
>>>> Csound mailing list
>>>> [hidden email]
>>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>>> Send bugs reports to
>>>>        https://github.com/csound/csound/issues
>>>> Discussions of bugs and features can be posted here
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>        https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>>
>
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>        https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here

envAHDtest.csd (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

joachim-3
ok, now i understand better.  in this case, you indeed need reinit,
because otherwise your envelope will only be performed once.

but i am wondering whether another approach is not better: you ask in a
main instrument for the condition.  for instance: the trigger has
crossed 0.5 from below and only once per three times (or whatever you
like).  if this condition is true, you call an instrument which performs
the envelope.  for me, the code would be clearer then.

i append both solutions -

        joachim


SOLUTION 1: UDO

opcode EnvAHD, a, ak
aIn, kTrig xin
kEnv, kCount, kOn init 0
if kTrig > .5 && kOn==0 then
   kOn = 1
endif
env:
if kOn == 1 then
  kEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
  kCount += 1
endif
if kCount>=100 && kEnv==0 then ; basicially waits till the end of the env,
    kOn = 0 ; when kEnv has become 0 again
    kCount = 0
    reinit env
endif
    printk2 kOn
xout aIn*kEnv
endop


SOLUTION 2: TRIGGER ANOTHER INSTRUMENT FOR ENVELOPE

instr Main
ga1      vco2 .9, 440
kLFO lfo 1, 0.6
kLFO_past init 0
kCount init 2
;look whether kLFO has crossed 0.5 from below
if kLFO > .5 && kLFO_past <= .5 then
  kCount += 1
  ;only once per three times
  if kCount == 3 then
   event "i","Env",0,2.5
   kCount = 0
  endif
endif
printk2 kCount
kLFO_past = kLFO
endin

instr Env
aEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
aOut = ga1 * aEnv
outs aOut,aOut
endin

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

zappfinger
Thanks very much Joachim, i'll try it out later today.
The UDO solution suites me best since in this Clavia G2 project all modules are inside an UDO.

Richard

2018-03-21 8:08 GMT+01:00 joachim heintz <[hidden email]>:
ok, now i understand better.  in this case, you indeed need reinit, because otherwise your envelope will only be performed once.

but i am wondering whether another approach is not better: you ask in a main instrument for the condition.  for instance: the trigger has crossed 0.5 from below and only once per three times (or whatever you like).  if this condition is true, you call an instrument which performs the envelope.  for me, the code would be clearer then.

i append both solutions -

        joachim


SOLUTION 1: UDO

opcode EnvAHD, a, ak
aIn, kTrig      xin
kEnv, kCount, kOn init 0
if kTrig > .5 && kOn==0 then
  kOn = 1
endif
env:
if kOn == 1 then
        kEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
        kCount += 1
endif
if kCount>=100 && kEnv==0 then  ; basicially waits till the end of the env,
   kOn = 0                                              ; when kEnv has become 0 again
   kCount = 0
   reinit env
endif
   printk2 kOn
xout aIn*kEnv
endop


SOLUTION 2: TRIGGER ANOTHER INSTRUMENT FOR ENVELOPE

instr Main
ga1      vco2 .9, 440
kLFO    lfo 1, 0.6
kLFO_past init 0
kCount init 2
;look whether kLFO has crossed 0.5 from below
if kLFO > .5 && kLFO_past <= .5 then
 kCount += 1
 ;only once per three times
 if kCount == 3 then
  event "i","Env",0,2.5
  kCount = 0
 endif
endif
printk2 kCount
kLFO_past = kLFO
endin

instr Env
aEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
aOut = ga1 * aEnv
outs aOut,aOut
endin


Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
       https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here

Csound mailing list [hidden email] https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to https://github.com/csound/csound/issues Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

Steven Yi
I think this might be simpler if you implemented your own UDO that
calculated the envelope.  You might look at:

https://github.com/kunstmusik/libsyi/blob/master/adsr140.udo

as an example where it is writing the asig value for the envelope.
(Using linear ramping would result in simpler code.)

On Wed, Mar 21, 2018 at 6:18 AM, Richard van Bemmelen
<[hidden email]> wrote:

> Thanks very much Joachim, i'll try it out later today.
> The UDO solution suites me best since in this Clavia G2 project all modules
> are inside an UDO.
>
> Richard
>
> 2018-03-21 8:08 GMT+01:00 joachim heintz <[hidden email]>:
>>
>> ok, now i understand better.  in this case, you indeed need reinit,
>> because otherwise your envelope will only be performed once.
>>
>> but i am wondering whether another approach is not better: you ask in a
>> main instrument for the condition.  for instance: the trigger has crossed
>> 0.5 from below and only once per three times (or whatever you like).  if
>> this condition is true, you call an instrument which performs the envelope.
>> for me, the code would be clearer then.
>>
>> i append both solutions -
>>
>>         joachim
>>
>>
>> SOLUTION 1: UDO
>>
>> opcode EnvAHD, a, ak
>> aIn, kTrig      xin
>> kEnv, kCount, kOn init 0
>> if kTrig > .5 && kOn==0 then
>>   kOn = 1
>> endif
>> env:
>> if kOn == 1 then
>>         kEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
>>         kCount += 1
>> endif
>> if kCount>=100 && kEnv==0 then  ; basicially waits till the end of the
>> env,
>>    kOn = 0                                              ; when kEnv has
>> become 0 again
>>    kCount = 0
>>    reinit env
>> endif
>>    printk2 kOn
>> xout aIn*kEnv
>> endop
>>
>>
>> SOLUTION 2: TRIGGER ANOTHER INSTRUMENT FOR ENVELOPE
>>
>> instr Main
>> ga1      vco2 .9, 440
>> kLFO    lfo 1, 0.6
>> kLFO_past init 0
>> kCount init 2
>> ;look whether kLFO has crossed 0.5 from below
>> if kLFO > .5 && kLFO_past <= .5 then
>>  kCount += 1
>>  ;only once per three times
>>  if kCount == 3 then
>>   event "i","Env",0,2.5
>>   kCount = 0
>>  endif
>> endif
>> printk2 kCount
>> kLFO_past = kLFO
>> endin
>>
>> instr Env
>> aEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
>> aOut = ga1 * aEnv
>> outs aOut,aOut
>> endin
>>
>>
>> Csound mailing list
>> [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>> Send bugs reports to
>>        https://github.com/csound/csound/issues
>> Discussions of bugs and features can be posted here
>
>
> Csound mailing list [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to
> https://github.com/csound/csound/issues Discussions of bugs and features can
> be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Reply | Threaded
Open this post in threaded view
|

Re: [Csnd] reinit in UDO

zappfinger
Thanks Steven, that looks interesting. OTOH, the Clavia AHD envelope
needs to have linear, exponentional, etc sections, so i think I might be
better off with existing Csound envelopes that have those options.



On 21/03/18 17:43, Steven Yi wrote:

> I think this might be simpler if you implemented your own UDO that
> calculated the envelope.  You might look at:
>
> https://github.com/kunstmusik/libsyi/blob/master/adsr140.udo
>
> as an example where it is writing the asig value for the envelope.
> (Using linear ramping would result in simpler code.)
>
> On Wed, Mar 21, 2018 at 6:18 AM, Richard van Bemmelen
> <[hidden email]> wrote:
>> Thanks very much Joachim, i'll try it out later today.
>> The UDO solution suites me best since in this Clavia G2 project all modules
>> are inside an UDO.
>>
>> Richard
>>
>> 2018-03-21 8:08 GMT+01:00 joachim heintz <[hidden email]>:
>>> ok, now i understand better.  in this case, you indeed need reinit,
>>> because otherwise your envelope will only be performed once.
>>>
>>> but i am wondering whether another approach is not better: you ask in a
>>> main instrument for the condition.  for instance: the trigger has crossed
>>> 0.5 from below and only once per three times (or whatever you like).  if
>>> this condition is true, you call an instrument which performs the envelope.
>>> for me, the code would be clearer then.
>>>
>>> i append both solutions -
>>>
>>>          joachim
>>>
>>>
>>> SOLUTION 1: UDO
>>>
>>> opcode EnvAHD, a, ak
>>> aIn, kTrig      xin
>>> kEnv, kCount, kOn init 0
>>> if kTrig > .5 && kOn==0 then
>>>    kOn = 1
>>> endif
>>> env:
>>> if kOn == 1 then
>>>          kEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
>>>          kCount += 1
>>> endif
>>> if kCount>=100 && kEnv==0 then  ; basicially waits till the end of the
>>> env,
>>>     kOn = 0                                              ; when kEnv has
>>> become 0 again
>>>     kCount = 0
>>>     reinit env
>>> endif
>>>     printk2 kOn
>>> xout aIn*kEnv
>>> endop
>>>
>>>
>>> SOLUTION 2: TRIGGER ANOTHER INSTRUMENT FOR ENVELOPE
>>>
>>> instr Main
>>> ga1      vco2 .9, 440
>>> kLFO    lfo 1, 0.6
>>> kLFO_past init 0
>>> kCount init 2
>>> ;look whether kLFO has crossed 0.5 from below
>>> if kLFO > .5 && kLFO_past <= .5 then
>>>   kCount += 1
>>>   ;only once per three times
>>>   if kCount == 3 then
>>>    event "i","Env",0,2.5
>>>    kCount = 0
>>>   endif
>>> endif
>>> printk2 kCount
>>> kLFO_past = kLFO
>>> endin
>>>
>>> instr Env
>>> aEnv linseg 0, 1, 0.9, .5, 0.9, 1, 0
>>> aOut = ga1 * aEnv
>>> outs aOut,aOut
>>> endin
>>>
>>>
>>> Csound mailing list
>>> [hidden email]
>>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
>>> Send bugs reports to
>>>         https://github.com/csound/csound/issues
>>> Discussions of bugs and features can be posted here
>>
>> Csound mailing list [hidden email]
>> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to
>> https://github.com/csound/csound/issues Discussions of bugs and features can
>> be posted here
> Csound mailing list
> [hidden email]
> https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
> Send bugs reports to
>          https://github.com/csound/csound/issues
> Discussions of bugs and features can be posted here

Csound mailing list
[hidden email]
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here