Can I use ADSR UGen to envelope parameters other than gain (e.g. pitch)?
Hello, the ADSR UGen, to me, seems to have effect only over amplitude (which is its original function, I concede). 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? Thanks in advance! -- Jean Menezes da Rocha Compositor Professor Doutorando em Música pela Universidade Federal da Bahia
Yes, I use the following pattern often 220.0 => float f; SinOsc osc => dac; ASDR adsr => blackhole; spork ~ updateAtSampleRate(); fun void updateAtSampleRate() { while (true) { f + adsr.last() * f => osc.freq; 1::samp => now; } } 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) https://github.com/heuermh/lick/blob/master/lick/module/Module.ck https://github.com/heuermh/lick/blob/master/examples/moduleExample.ck Cheers, michael On Wed, Nov 1, 2017 at 11:05 AM, Jean Menezes da Rocha < jean@menezesdarocha.info> wrote:
Hello,
the ADSR UGen, to me, seems to have effect only over amplitude (which is its original function, I concede). 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?
Thanks in advance! -- Jean Menezes da Rocha Compositor Professor Doutorando em Música pela Universidade Federal da Bahia
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
Hi,
yap, the following is a possible solution:
Step step => ADSR adsr => SinOsc oscil => dac;
step.next(500);
adsr.set(5::ms, 150::ms, 1, 500::ms);
while(true){
adsr.keyOn();
400::ms => now;
adsr.keyOff();
1000::ms => now;
}
cheers,
Mario
2017-11-01 16:17 GMT+00:00 Michael Heuer
Yes, I use the following pattern often
220.0 => float f; SinOsc osc => dac; ASDR adsr => blackhole;
spork ~ updateAtSampleRate();
fun void updateAtSampleRate() { while (true) { f + adsr.last() * f => osc.freq; 1::samp => now; } }
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)
https://github.com/heuermh/lick/blob/master/lick/module/Module.ck https://github.com/heuermh/lick/blob/master/examples/moduleExample.ck
Cheers,
michael
On Wed, Nov 1, 2017 at 11:05 AM, Jean Menezes da Rocha < jean@menezesdarocha.info> wrote:
Hello,
the ADSR UGen, to me, seems to have effect only over amplitude (which is its original function, I concede). 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?
Thanks in advance! -- Jean Menezes da Rocha Compositor Professor Doutorando em Música pela Universidade Federal da Bahia
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
Great! That was exactly what I wanted (and suspected but couldn't figure out)! Thank you very much, guys! Em qua, 1 de nov de 2017 às 15:04, Mario Buoninfante < mario.buoninfante@gmail.com> escreveu:
Hi,
yap, the following is a possible solution:
Step step => ADSR adsr => SinOsc oscil => dac;
step.next(500); adsr.set(5::ms, 150::ms, 1, 500::ms);
while(true){ adsr.keyOn();
400::ms => now;
adsr.keyOff();
1000::ms => now; }
cheers, Mario
2017-11-01 16:17 GMT+00:00 Michael Heuer
: Yes, I use the following pattern often
220.0 => float f; SinOsc osc => dac; ASDR adsr => blackhole;
spork ~ updateAtSampleRate();
fun void updateAtSampleRate() { while (true) { f + adsr.last() * f => osc.freq; 1::samp => now; } }
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)
https://github.com/heuermh/lick/blob/master/lick/module/Module.ck https://github.com/heuermh/lick/blob/master/examples/moduleExample.ck
Cheers,
michael
On Wed, Nov 1, 2017 at 11:05 AM, Jean Menezes da Rocha < jean@menezesdarocha.info> wrote:
Hello,
the ADSR UGen, to me, seems to have effect only over amplitude (which is its original function, I concede). 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?
Thanks in advance! -- Jean Menezes da Rocha Compositor Professor Doutorando em Música pela Universidade Federal da Bahia
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
-- Jean Menezes da Rocha Compositor Professor Doutorando em Música pela Universidade Federal da Bahia
This might be shameless plug for a few Chugins I created, but I thought it might be up your alley. 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. This is the power based Chugin. PowerADSR pow => blackhole; // envelope durations pow.set(10::ms, 10::ms, 1.0, 10::ms); // curves for attack, decay, and release pow.setCurves(0.5, 2.0, 0.5); spork ~ printValue(); pow.keyOn(); 20::ms => now; pow.keyOff(); 10::ms => now; fun void printValue() { while (true) { <<< "Power ADSR Value:", pow.value() >>>; 1::ms => now; } } And here is the window function based Chugin. WinFuncEnv win => dac; // set for a Blackman window win.setBlackman(); // envelope durations win.attackTime(25::ms); win.releaseTime(25::ms); spork ~ printValue(); win.keyOn(); 25::ms => now; win.keyOff(); 25::ms => now; fun void printValue() { while (true) { <<< "Window Value:", win.windowValue() >>>; 1::ms => now; } } On Wed, Nov 1, 2017 at 10:13 AM, Jean Menezes da Rocha < jean@menezesdarocha.info> wrote:
Great! That was exactly what I wanted (and suspected but couldn't figure out)!
Thank you very much, guys!
Em qua, 1 de nov de 2017 às 15:04, Mario Buoninfante < mario.buoninfante@gmail.com> escreveu:
Hi,
yap, the following is a possible solution:
Step step => ADSR adsr => SinOsc oscil => dac;
step.next(500); adsr.set(5::ms, 150::ms, 1, 500::ms);
while(true){ adsr.keyOn();
400::ms => now;
adsr.keyOff();
1000::ms => now; }
cheers, Mario
2017-11-01 16:17 GMT+00:00 Michael Heuer
: Yes, I use the following pattern often
220.0 => float f; SinOsc osc => dac; ASDR adsr => blackhole;
spork ~ updateAtSampleRate();
fun void updateAtSampleRate() { while (true) { f + adsr.last() * f => osc.freq; 1::samp => now; } }
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)
https://github.com/heuermh/lick/blob/master/lick/module/Module.ck https://github.com/heuermh/lick/blob/master/examples/moduleExample.ck
Cheers,
michael
On Wed, Nov 1, 2017 at 11:05 AM, Jean Menezes da Rocha < jean@menezesdarocha.info> wrote:
Hello,
the ADSR UGen, to me, seems to have effect only over amplitude (which is its original function, I concede). 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?
Thanks in advance! -- Jean Menezes da Rocha Compositor Professor Doutorando em Música pela Universidade Federal da Bahia
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
-- Jean Menezes da Rocha Compositor Professor Doutorando em Música pela Universidade Federal da Bahia
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
participants (4)
-
Eric Heep
-
Jean Menezes da Rocha
-
Mario Buoninfante
-
Michael Heuer