<div dir="ltr">This might be shameless plug for a few Chugins I created, but I thought it might be up your alley.<div><br></div><div>I made two Chugins a while back that deal with atypical envelope types, one for power based envelopes, and one based on window functions. I enjoy using window function envelopes for sine sweeps other types of control; here are two short examples.<br><div><br></div><div><br></div><div>This is the power based Chugin.</div><div><br></div><div><div><font face="monospace, monospace">PowerADSR pow =&gt; blackhole;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">// envelope durations</font></div><div><font face="monospace, monospace">pow.set(10::ms, 10::ms, 1.0, 10::ms);</font></div><div><font face="monospace, monospace">// curves for attack, decay, and release</font></div><div><font face="monospace, monospace">pow.setCurves(0.5, 2.0, 0.5);</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">spork ~ printValue();</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">pow.keyOn();</font></div><div><font face="monospace, monospace">20::ms =&gt; now;</font></div><div><font face="monospace, monospace">pow.keyOff();</font></div><div><font face="monospace, monospace">10::ms =&gt; now;</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">fun void printValue() {</font></div><div><font face="monospace, monospace">    while (true) {</font></div><div><font face="monospace, monospace">        &lt;&lt;&lt; &quot;Power ADSR Value:&quot;, pow.value() &gt;&gt;&gt;;</font></div><div><font face="monospace, monospace">        1::ms =&gt; now;</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace">}</font></div></div></div><div><br></div><div><br></div><div><font face="arial, helvetica, sans-serif">And here is the window function based Chugin.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><div style=""><font face="monospace, monospace">WinFuncEnv win =&gt; dac;</font></div><div style=""><font face="monospace, monospace"><br></font></div><div style=""><font face="monospace, monospace">// set for a Blackman window</font></div><div style=""><font face="monospace, monospace">win.setBlackman();</font></div><div style=""><font face="monospace, monospace"><br></font></div><div style=""><font face="monospace, monospace">// envelope durations</font></div><div style=""><font face="monospace, monospace">win.attackTime(25::ms);</font></div><div style=""><font face="monospace, monospace">win.releaseTime(25::ms);</font></div><div style=""><font face="monospace, monospace"><br></font></div><div style=""><font face="monospace, monospace">spork ~ printValue();</font></div><div style=""><font face="monospace, monospace"><br></font></div><div style=""><font face="monospace, monospace">win.keyOn();</font></div><div style=""><font face="monospace, monospace">25::ms =&gt; now;</font></div><div style=""><font face="monospace, monospace">win.keyOff();</font></div><div style=""><font face="monospace, monospace">25::ms =&gt; now;</font></div><div style=""><font face="monospace, monospace"><br></font></div><div style=""><font face="monospace, monospace">fun void printValue() {</font></div><div style=""><font face="monospace, monospace">    while (true) {</font></div><div style=""><font face="monospace, monospace">        &lt;&lt;&lt; &quot;Window Value:&quot;, win.windowValue() &gt;&gt;&gt;;</font></div><div style=""><font face="monospace, monospace">        1::ms =&gt; now;</font></div><div style=""><font face="monospace, monospace">    }</font></div><div style=""><font face="monospace, monospace">}</font></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 1, 2017 at 10:13 AM, Jean Menezes da Rocha <span dir="ltr">&lt;<a href="mailto:jean@menezesdarocha.info" target="_blank">jean@menezesdarocha.info</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Great! That was exactly what I wanted (and suspected but couldn&#39;t figure out)!<div><br></div><div>Thank you very much, guys!</div></div><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">Em qua, 1 de nov de 2017 às 15:04, Mario Buoninfante &lt;<a href="mailto:mario.buoninfante@gmail.com" target="_blank">mario.buoninfante@gmail.com</a>&gt; escreveu:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>Hi,<br><br></div>yap, the following is a possible solution:<br><br>Step step =&gt; ADSR adsr =&gt; SinOsc oscil =&gt; dac;<br><br>step.next(500);<br>adsr.set(5::ms, 150::ms, 1, 500::ms);<br><br>while(true){<br>    adsr.keyOn();<br>       <br>    400::ms =&gt; now;<br>    <br>    adsr.keyOff();<br>    <br>    1000::ms =&gt; now;<br>}<br><br></div>cheers,<br></div>Mario<br></div><div class="gmail_extra"><br><div class="gmail_quote">2017-11-01 16:17 GMT+00:00 Michael Heuer <span dir="ltr">&lt;<a href="mailto:heuermh@gmail.com" target="_blank">heuermh@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div>Yes, I use the following pattern often<br></div><div><br></div><div>220.0 =&gt; float f;<br></div>SinOsc osc =&gt; dac;<br></div>ASDR adsr =&gt; blackhole;<br><br></div>spork ~ updateAtSampleRate();<br><br></div>fun void updateAtSampleRate() {<br></div>  while (true) {</div><div>    f + adsr.last() * f =&gt; osc.freq;<br></div>    1::samp =&gt; now;<br><div>  }<br><div>}<br></div><div><br></div><div>There is also this pattern, which tries to encapsulate the above (whatever you chuck into cv Gain(s) are provided as float parameter(s) to the tick method)<br><br><a href="https://github.com/heuermh/lick/blob/master/lick/module/Module.ck" target="_blank">https://github.com/heuermh/<wbr>lick/blob/master/lick/module/<wbr>Module.ck<br></a><a href="https://github.com/heuermh/lick/blob/master/examples/moduleExample.ck" target="_blank">https://github.com/heuermh/<wbr>lick/blob/master/examples/<wbr>moduleExample.ck<br></a></div><div><br></div><div>Cheers,</div><div><br></div><div>   michael</div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_-718742107686910551m_-8394645868391976956h5">On Wed, Nov 1, 2017 at 11:05 AM, Jean Menezes da Rocha <span dir="ltr">&lt;<a href="mailto:jean@menezesdarocha.info" target="_blank">jean@menezesdarocha.info</a>&gt;</span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-718742107686910551m_-8394645868391976956h5"><div dir="ltr">Hello,<div><br></div><div>the ADSR UGen, to me, seems to have effect only over amplitude (which is its original function, I concede).</div><div>However, is there any use case where I can use ADSR to map, say, pitch instead of amplitude, in order to avoid recurring to functions and for loops?</div><div><br></div><div>Thanks in advance!</div></div><span class="m_-718742107686910551m_-8394645868391976956m_9033115338625127387HOEnZb"><font color="#888888"><div dir="ltr">-- <br></div><div class="m_-718742107686910551m_-8394645868391976956m_9033115338625127387m_-5045327889894351668gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Jean Menezes da Rocha<div>Compositor</div><div>Professor</div><div>Doutorando em Música pela Universidade Federal da Bahia</div></div></div>
</font></span><br></div></div>______________________________<wbr>_________________<br>
chuck-users mailing list<br>
<a href="mailto:chuck-users@lists.cs.princeton.edu" target="_blank">chuck-users@lists.cs.<wbr>princeton.edu</a><br>
<a href="https://lists.cs.princeton.edu/mailman/listinfo/chuck-users" rel="noreferrer" target="_blank">https://lists.cs.princeton.<wbr>edu/mailman/listinfo/chuck-<wbr>users</a><br>
<br></blockquote></div><br></div>
<br>______________________________<wbr>_________________<br>
chuck-users mailing list<br>
<a href="mailto:chuck-users@lists.cs.princeton.edu" target="_blank">chuck-users@lists.cs.<wbr>princeton.edu</a><br>
<a href="https://lists.cs.princeton.edu/mailman/listinfo/chuck-users" rel="noreferrer" target="_blank">https://lists.cs.princeton.<wbr>edu/mailman/listinfo/chuck-<wbr>users</a><br>
<br></blockquote></div><br></div>
______________________________<wbr>_________________<br>
chuck-users mailing list<br>
<a href="mailto:chuck-users@lists.cs.princeton.edu" target="_blank">chuck-users@lists.cs.<wbr>princeton.edu</a><br>
<a href="https://lists.cs.princeton.edu/mailman/listinfo/chuck-users" rel="noreferrer" target="_blank">https://lists.cs.princeton.<wbr>edu/mailman/listinfo/chuck-<wbr>users</a><br>
</blockquote></div><div dir="ltr">-- <br></div><div class="m_-718742107686910551gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Jean Menezes da Rocha<div>Compositor</div><div>Professor</div><div>Doutorando em Música pela Universidade Federal da Bahia</div></div></div>
</div></div><br>______________________________<wbr>_________________<br>
chuck-users mailing list<br>
<a href="mailto:chuck-users@lists.cs.princeton.edu">chuck-users@lists.cs.<wbr>princeton.edu</a><br>
<a href="https://lists.cs.princeton.edu/mailman/listinfo/chuck-users" rel="noreferrer" target="_blank">https://lists.cs.princeton.<wbr>edu/mailman/listinfo/chuck-<wbr>users</a><br>
<br></blockquote></div><br></div>