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

Michael Heuer heuermh at gmail.com
Fri Feb 7 14:52:27 EST 2020


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 <mailto: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 <mailto: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:
>> 
>> 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/ <http://audicle.cs.princeton.edu/mini/>
> 
> I personally use a mode for Emacs to provide syntax highlighting
> 
> https://github.com/heuermh/chuck-mode <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.
> 
>> 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.
> 
>>  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);
> 
>> 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!
> 
>> 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 <mailto:chuck-users-bounces at lists.cs.princeton.edu> <chuck-users-bounces at lists.cs.princeton.edu <mailto:chuck-users-bounces at lists.cs.princeton.edu>> namens Michael Heuer <heuermh at gmail.com <mailto:heuermh at gmail.com>>
>> Verzonden: woensdag 5 februari 2020 15:42
>> Aan: ChucK Users Mailing List <chuck-users at lists.cs.princeton.edu <mailto: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 <mailto: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 <mailto:chuck-users at lists.cs.princeton.edu>
>>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users <https://lists.cs.princeton.edu/mailman/listinfo/chuck-users>
>> _______________________________________________
>> chuck-users mailing list
>> chuck-users at lists.cs.princeton.edu <mailto:chuck-users at lists.cs.princeton.edu>
>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users <https://lists.cs.princeton.edu/mailman/listinfo/chuck-users>
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu <mailto:chuck-users at lists.cs.princeton.edu>
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users <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/20200207/2f286e7b/attachment-0001.html>


More information about the chuck-users mailing list