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

herman verbaeten hverb54 at hotmail.com
Fri Feb 7 14:26:33 EST 2020


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:


  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<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

_______________________________________________
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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cs.princeton.edu/pipermail/chuck-users/attachments/20200207/3580f236/attachment-0001.html>


More information about the chuck-users mailing list