| Generally, envelope arguments are all i-time. However you can construct your envelope
generators that would work differently. Here’s one example, an ADSD that works
with a trigger (gate) signal. It will allow parameters to be tweaked on the fly.
Envelope parameters are self-explanatory; the trig parameter starts the envelope
when high (1) and sends it into release when low (0).
 opcode ADSD,k,kkkkk
 kmax,katt,kdec,ksus,ktrig    xin 
 ktime init 0
 kv init 0
 iper = 1/kr
 if (ktrig == 1) then
   if ktime <= katt then
     kt = katt 
     kv = kmax
   else 
     kt = kdec
     kv = ksus
   endif
   ktime += iper
 else
   kt = kdec
   kv = 0
   ktime = 0
 endif
 kenv  portk  kv, kt
       xout  kenv
endop
It’s adapted from http://www.csounds.com/udo/displayOpcode.php?opcode_id=131, so
not fully tested but I think it works as expected.
========================
Dr Victor Lazzarini
Dean of Arts, Celtic Studies and Philosophy,
Maynooth University,
Maynooth, Co Kildare, Ireland
Tel: 00 353 7086936
Fax: 00 353 1 7086952 
> On 3 Nov 2016, at 19:48, Zephyr  wrote:
> 
> Hello!
> 
> I've been learning CSound off and on for about a month, mostly for the purpose of making MIDI controlled instruments.
> 
> Here's a shortened version of my current monosynth and its problems:
> 
> 1. The envelopes take an extra note press to become 'active' after you change a parameter
> 
> 2. The envelopes won't react to the current MIDI CC value without restarting the envelope. I realize that this is because all of the madsr envelope parameters are set with 'i-time'. Is there some sort of workaround with reinit that will make this possible, or a clever use of looseg?
> 
> For example, if you play a note with the release set to max, then shorten the release time, the outputted value should reflect that value as in an traditional analog synth.
> 
> 3. filter cutoff has to be set before any notes sound, initc7 doesn't work with moogladder as it does elsewhere
> 
> 
> 
> Thanks for your help! Excited about this!
> Also if anyone can point me to a good example for monosynth note handling (lowest note priority, handling gate triggers etc) I would be forever grateful!
> 
> 
> 
> 
> 
> -odac -+rtmidi=virtual -+rtaudio=portaudio  -M1
> 
> 
> 
> sr = 48000
> ksmps = 32
> nchnls = 2
> 0dbfs = 1
> 
> connect "VCO",   "output",     "LPF",     	"input"
> connect "LPF",   "output",     "Outputs",     	"input"
> 
> alwayson "VCO"
> alwayson "LPF"
> alwayson "Outputs"
> 
> instr noteTrigger
> 	icps     cpsmidi
> 	gkcps = icps
> 	initc7 1, 1, 0.0001
> 	initc7 1, 2, 1
> 	initc7 1, 3, 1
> 	initc7 1, 4, 1
> 	kFiltAttack ctrl7 1, 1, 0.0001, 1
> 	kFiltDecay ctrl7 1, 2, 0.001, 1
> 	kFiltSustain ctrl7 1, 3, 0.001, 1
> 	kFiltRelease ctrl7 1, 4, 0.05, 1
> 	gkFiltEnv     madsr  i(kFiltAttack),  i(kFiltDecay), i(kFiltSustain), i(kFiltRelease)
> endin
> 
> instr VCO
> 	aosc1 vco2 0dbfs * 0.4, gkcps, 0, 0.6
> 	outleta "output", aosc1
> endin
> 
> instr LPF
> 	initc7 1, 5, 1
> 	initc7 1, 6, 0.0001
> 	kCutoff ctrl7 1, 5, 0, 1
> 	kRes ctrl7 1, 6, 0, 0.96
> 	ainput inleta "input"
> 	afilt moogladder ainput, ((gkFiltEnv * kCutoff) * 5000), kRes
> 	denorm afilt
> 	outleta "output", afilt
> endin
> 
> instr Outputs
>  ainput inleta "input"
>  alimitedL wrap ainput, -0dbfs, 0dbfs
>  alimitedR wrap ainput, -0dbfs, 0dbfs
>  outs alimitedL, alimitedR
> endin
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Csound mailing list
> Csound@listserv.heanet.ie
> 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
Csound@listserv.heanet.ie
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
 |