[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