[chuck-users] Create a pause and gradualy shift pan from left to right and back

Tom Lieber tom at alltom.com
Sat Feb 8 12:22:18 EST 2020


ChucK's home page <https://chuck.cs.princeton.edu> links to the unit
generators reference <https://chuck.cs.princeton.edu/doc/program/ugen.html>,
which links to the unit generators section of the language reference
<https://chuck.cs.princeton.edu/doc/language/ugen.html>, which has:

"*last()* (of type float): get the last sample computed by the UGen. if
UGen has more than one channel, the average of all components channels are
returned."

You might use it like this:

SinOsc s => dac;
<<< s.last() >>>;
second => now;
<<< s.last() >>>;

Or, if you want it to oscillate but not be audible:

SinOsc s => blackhole;
<<< s.last() >>>;
second => now;
<<< s.last() >>>;

You can chuck it to dac and blackhole in the same program, but it would be
the same as just chucking it to dac.

On Sat, Feb 8, 2020 at 8:40 AM herman verbaeten <hverb54 at hotmail.com> wrote:

> Thanks again Michael but this brings along a lot of other questions:
> - the difference between blackhole and dac. Can you use them together?
> - SinOsc doesn't have ".last()" as a member eighter. Where can i find ".next()",
> ".last()" ... etc...  and their use.
> - If i refer to  ".last()"  in case of a sinewave does it give the last
> freq, sfreq, phase or sync member.
>
> Kind regards,
> Herman
>
> ------------------------------
> *Van:* chuck-users-bounces at lists.cs.princeton.edu <
> chuck-users-bounces at lists.cs.princeton.edu> namens Michael Heuer <
> heuermh at gmail.com>
> *Verzonden:* vrijdag 7 februari 2020 19:52
> *Aan:* ChucK Users Mailing List <chuck-users at lists.cs.princeton.edu>
> *Onderwerp:* Re: [chuck-users] Create a pause and gradualy shift pan from
> left to right and back
>
> Sorry, guess my email client needs a ChucK interpreter.  ;)
>
> lfo.next() should be lfo.last()
>
>
> On Feb 7, 2020, at 1:26 PM, herman verbaeten <hverb54 at hotmail.com> wrote:
>
> Hi Michael,
>
> Sorry for all the trouble but when i do as you told me :
>
> SinOsc lfo => blackhole;
> 0.5 => lfo.freq;
> //…
> while (true)
> {
>   // ...
>   lfo.next() => pan.pan;
> .....
>
> Console tells me sinOsc doesn't have a member .next()
>
> Kind regards,
> Herman
>
>
>
>
> ------------------------------
> *Van:* chuck-users-bounces at lists.cs.princeton.edu <
> chuck-users-bounces at lists.cs.princeton.edu> namens Michael Heuer <
> heuermh at gmail.com>
> *Verzonden:* donderdag 6 februari 2020 17:02
> *Aan:* ChucK Users Mailing List <chuck-users at lists.cs.princeton.edu>
> *Onderwerp:* Re: [chuck-users] Create a pause and gradualy shift pan from
> left to right and back
>
> On Feb 6, 2020, at 10:41 AM, herman verbaeten <hverb54 at hotmail.com> wrote:
>
>
> Hello Michael,
>
> Thanks a lot for your help. I don't know if i can reply to you with other
> questions or if i should use "chuck-users at lists.cs.princeton.edu".
>
>
> The ChucK mailing list is probably best.
>
>
> In the meantime i found a solution for my "pause" problem in the use of
> ADSR. But i still have some general questions and some about the program
> that follows:
>
>
>    1. Where can i find a chuck editor  with the possibility to find words
>    and replace them (all) and that also gives the colors for reserved words
>    etc.
>
> Have you seen the miniAudicle?  That is the official IDE for ChucK
>
> http://audicle.cs.princeton.edu/mini/
>
> I personally use a mode for Emacs to provide syntax highlighting
>
> https://github.com/heuermh/chuck-mode
>
> There is support for other editors out there; I seem to remember a wiki
> with links to such somewhere but I can't find it.
>
>
>    1. Is there a way to debug line per line to discover logical errors?
>
> Not that I know of.  My bit of advice is to not run a ChucK script with
> headphones on without trying it on speakers first.  I learned that the hard
> way from a mis-configured filter.
>
>
>    1.  i discovered by accident that sometimes i can use "p.puf" but on
>    other occasions i have to write "p.buf()" why is this?
>
> In general, to read from a function/value, use the version with params
>
> p.buf() => float f;
>
> To set a value, use the chuck operator into the version without params
>
> 1.0 => p.buf;
>
> This is equivalent to making a single-argument function call (but the
> former is more ChucK-y)
>
> p.buf(1.0);
>
>
>    1. in the program hereby, is there a way to have the pan do it's job
>    independantely from the note-envelope-flow? to go faster or slower?
>
> Yes, you can use an oscillator as an LFO modulator
>
> SinOsc lfo => blackhole;
> 0.5 => lfo.freq;
>
> //…
> while (true)
> {
>   // ...
>   lfo.next() => pan.pan;
>
>
> If you want to update the pan at sample rate or at a rate independent from
> your main while loop, create a new shred
>
> spork ~ _updateAtSampleRate();
>
> fun void _updateAtSampleRate()
> {
>   while (true)
>   {
>     1::samp => now;
>     lfo.next() => pan.pan;
>   }
> }
>
> Hope this helps!
>
>
>    1. When i run this program it does what i want but i can't figure out
>    why it says 2 times "p.pan = 1.000000" and 2 times "p.pan= -1.000000" (see
>    below)
>
> Please let me know if i have to address all my questions to the general
> email address.  thanks a lot !!
>
> Herman
>
> // sound file
> me.sourceDir() + "wavefile.wav" => string filename;
> if( me.args() ) me.arg(0) => filename;
> <<<me.sourceDir()>>>;
>
> // the patch
> SndBuf buf => ADSR e => Pan2 p => dac;
>
> // set attack time, decay time, release time and pause time
> dur attack; dur decay ; dur release; dur pauze;
> 12::ms => attack ; 90::ms => decay ; 100::ms => release ; 5::ms => pauze ;
>
> // load  file in buf
> filename => buf.read;
>
> // set gain
> .5 => buf.gain;
>
> // set a, d, s and r
> e.set( attack, decay, 0.001, release );
>
> // switch is needed to stay in the "else" step untill p.pan = -1
> 0 => int switch;
>
> // begin pan extreme left
> -1 => p.pan;
>
> // time loop
> while( true )
> {
>     Math.random2(0,900000) => buf.pos;
>     Math.random2f(1.0,1.2) => buf.rate;
>     if( p.pan() < 1.0 && switch == 0)
>     {
>         p.pan() + .10 => p.pan;
>         <<<"if p.pan = ",p.pan()>>>;
>     }
>     else
>     {
>         p.pan() - .10 => p.pan;
>         <<<"else p.pan = ", p.pan()>>>;
>         1 => switch;
>         if (p.pan() == -1)
>         {
>             0 => switch;
>         }
>     }
>     // key on - start attack
>     e.keyOn();
>     attack + decay => dur ontime;
>     ontime => now;
>
>      // key off - start release
>      e.keyOff();
>
>      // advance time by releasetime + pausetime
>      release + pauze => now;
> }
> ---------------------------------------------------------console result
> print----------------------------------------------------
> if p.pan = -0.900000
>
> if p.pan = -0.800000
> if p.pan = -0.700000
> if p.pan = -0.600000
> if p.pan = -0.500000
> if p.pan = -0.400000
> if p.pan = -0.300000
> if p.pan = -0.200000
> if p.pan = -0.100000
> if p.pan = -0.000000
> if p.pan = 0.100000
> if p.pan = 0.200000
> if p.pan = 0.300000
> if p.pan = 0.400000
> if p.pan = 0.500000
> if p.pan = 0.600000
> if p.pan = 0.700000
> if p.pan = 0.800000
> if p.pan = 0.900000
> if p.pan = 1.000000
> if p.pan = 1.000000
> else p.pan = 0.900000
> else p.pan = 0.800000
> else p.pan = 0.700000
> else p.pan = 0.600000
> else p.pan = 0.500000
> else p.pan = 0.400000
> else p.pan = 0.300000
> else p.pan = 0.200000
> else p.pan = 0.100000
> else p.pan = 0.000000
> else p.pan = -0.100000
> else p.pan = -0.200000
> else p.pan = -0.300000
> else p.pan = -0.400000
> else p.pan = -0.500000
> else p.pan = -0.600000
> else p.pan = -0.700000
> else p.pan = -0.800000
> else p.pan = -0.900000
> else p.pan = -1.000000
> else p.pan = -1.000000
> if p.pan = -0.900000
>
> if p.pan = -0.800000
> if p.pan = -0.700000
> if p.pan = -0.600000
> if p.pan = -0.500000
> if p.pan = -0.400000
>
>
>
> ------------------------------
> *Van:* chuck-users-bounces at lists.cs.princeton.edu <
> chuck-users-bounces at lists.cs.princeton.edu> namens Michael Heuer <
> heuermh at gmail.com>
> *Verzonden:* woensdag 5 februari 2020 15:42
> *Aan:* ChucK Users Mailing List <chuck-users at lists.cs.princeton.edu>
> *Onderwerp:* Re: [chuck-users] Create a pause of e.g. 2 seconds between
> notes or samples to be played
>
> Hello Herman,
>
> ChucK supports advancing time by chucking a duration to now, e.g.
>
> note.play();
> 2::second => now;
> note.play();
>
> LiCK (a Library for ChucK) <https://github.com/heuermh/lick> has a
> TimeSignature class, which provides static durations
>
> TimeSignature.common(120) @=> TimeSignature ts;
>
> note.play();
> ts.q => now;
> note.play();
>
> and those that are dynamic to tempo changes, with anticipation and delay
> humanization
>
> TimeSignature.common(120) @=> TimeSignature ts;
> ts.quarterProvider() @=> QuarterProvider q;
> 0.1 => q.anticipation;
> 0.0 => q.delay;
>
> while (true)
> {
>   note.play();
>   q.get() => now;
>   ts.tempo() - 1 => ts.tempo;
> }
>
> Cheers!
>
>    michael
>
>
> On Feb 5, 2020, at 9:24 AM, herman verbaeten <hverb54 at hotmail.com> wrote:
>
> Hi,
>
> I've only recentely started studiing ChucK and i'm looking for an easy way
> to integrate a pause between notes to be played in a "while()" loop. Could
> someone  tell me in what direction to look for a solution? thanks in
> advance!
>
> Herman
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>
>
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>
>
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>
>
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cs.princeton.edu/pipermail/chuck-users/attachments/20200208/c5f97d03/attachment-0001.html>


More information about the chuck-users mailing list