[chuck-users] chuck-users Digest, Vol 103, Issue 5

Julien Saint-Martin julien.saintmartin at googlemail.com
Wed Feb 5 12:01:10 EST 2014


Hi Phillip,

I agree with Stephan, your original code will create new instance of SinOsc
and ADSR each time the while loop is processed.

I just want to warn you about the fact that the solution you implemented is
not totally safe.
When adding e=<dac, SinOsc and ADSR created just before are disconnected
from the dac. So they will not use CPU anymore.
That's why your problem seems to be solved.
But SinOsc and ADSR are just disconnected. ChucK keeps them in memory. So
if you plan to use your code for long time, you might run out of memory on
your system.

My advise is simply to move SinOsc s => ADSR e => dac; outside of the while
loop.

Have fun,

Julien





2014-02-05 Philipp Blume <pgbluster at gmail.com>

> Thanks, Stefan! That did take care of my problem! I didn't even trigger a
> new note, I simply added the line e=<dac; at the end of my function iGen.
>
>
> On Wed, Feb 5, 2014 at 2:57 AM, <
> chuck-users-request at lists.cs.princeton.edu> wrote:
>
>> Send chuck-users mailing list submissions to
>>         chuck-users at lists.cs.princeton.edu
>>
>> To subscribe or unsubscribe via the World Wide Web, visit
>>         https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>> or, via email, send a message with subject or body 'help' to
>>         chuck-users-request at lists.cs.princeton.edu
>>
>> You can reach the person managing the list at
>>         chuck-users-owner at lists.cs.princeton.edu
>>
>> When replying, please edit your Subject line so it is more specific
>> than "Re: Contents of chuck-users digest..."
>>
>> Today's Topics:
>>
>>    1. Matrix of Impulse Generators (Philipp Blume)
>>    2. Re: Matrix of Impulse Generators (Stefan Blixt)
>>
>>
>> ---------- Forwarded message ----------
>> From: Philipp Blume <pgbluster at gmail.com>
>> To: chuck-users at lists.cs.princeton.edu
>> Cc:
>> Date: Tue, 4 Feb 2014 18:11:56 -0600
>> Subject: [chuck-users] Matrix of Impulse Generators
>> Dear all,
>>
>> Question from a rank ChucK beginner
>>
>> There's something about envelopes or gain or shreduling that I don't
>> understand.
>>
>> I created a Cartesian matrix of impulse generators, whose frequencies are
>> given as mx+ny {x,y btw -3 and 3) where the gain & 'tempo' of each
>> generator is correlated with its distance from a line segment (a1,b1 -
>> a2,b2) - later on I will be manipulating x,y,a1,b1,a2, and b2.
>>
>> This code runs well for a while, but within a few seconds or minutes it
>> starts to get overwhelmed. The death is both spectacular and quite moving,
>> but how do I keep it within bounds so it sounds perpetually like it does in
>> the first 5-10 seconds?
>>
>> 550 => float x;
>> 440 => float y;
>> 3 => float a1;
>> 0 => float b1;
>> 0 => float a2;
>> -2 => float b2;
>>
>> fun void iGen(int i1, int j1) {
>>     while(true) {
>>         Euclid(i1,j1,a1,b1) + Euclid(i1,j1,a2,b2) => float dist;
>>         <<< dist >>>;
>>         SinOsc s => ADSR e => dac;
>>         e.set(35::ms, 8::ms, .1, 200::ms);
>>         Math.pow(0.65,(dist)) => s.gain;
>>         i1*x + j1*y => s.freq;
>>         e.keyOn();
>>         (440)::ms => now;
>>         e.keyOff();
>>         (440*Math.pow(1.2,dist))::ms => now;
>>     }
>> }
>>
>> fun float Euclid(float p, float q, float r, float s) {
>>     return Math.sqrt(Math.pow((p-r),2) + Math.pow((q-s),2));
>> }
>>
>> for(-3 => int i; i<4; i++) {
>>     for (-3 => int j; j<4; j++) {
>>         if (i != 0 && j != 0) {
>>             spork ~ iGen(i,j);
>>         }
>>     }
>> }
>>
>> while (x != y) {
>>     500::ms=>now;
>> }
>>
>> --
>> Philipp Blume
>>
>>
>> ---------- Forwarded message ----------
>> From: Stefan Blixt <stefan.blixt at gmail.com>
>> To: ChucK Users Mailing List <chuck-users at lists.cs.princeton.edu>
>> Cc:
>> Date: Wed, 5 Feb 2014 09:57:45 +0100
>> Subject: Re: [chuck-users] Matrix of Impulse Generators
>> I sometimes get this wrong, but I think that this line:
>>
>> SinOsc s => ADSR e => dac;
>>
>> will make new connections between s, e and dac each time it's run in the
>> while loop - possibly creating new instances of SinOsc and ADSR each time.
>> Since you never disconnect from dac, this means an increasing load that may
>> explain the breakdown.
>>
>>
>> Since you want some release on the ADSR, you could make a second shred
>> function that deals with playing a single note, which could make sure to
>> disconnect e from dac one the release time has passed. Trigger the note
>> playing shred from your iGen function.
>>
>> /Stefan
>>
>>
>> On Wed, Feb 5, 2014 at 1:11 AM, Philipp Blume <pgbluster at gmail.com>wrote:
>>
>>> Dear all,
>>>
>>> Question from a rank ChucK beginner
>>>
>>> There's something about envelopes or gain or shreduling that I don't
>>> understand.
>>>
>>> I created a Cartesian matrix of impulse generators, whose frequencies
>>> are given as mx+ny {x,y btw -3 and 3) where the gain & 'tempo' of each
>>> generator is correlated with its distance from a line segment (a1,b1 -
>>> a2,b2) - later on I will be manipulating x,y,a1,b1,a2, and b2.
>>>
>>> This code runs well for a while, but within a few seconds or minutes it
>>> starts to get overwhelmed. The death is both spectacular and quite moving,
>>> but how do I keep it within bounds so it sounds perpetually like it does in
>>> the first 5-10 seconds?
>>>
>>> 550 => float x;
>>> 440 => float y;
>>> 3 => float a1;
>>> 0 => float b1;
>>> 0 => float a2;
>>> -2 => float b2;
>>>
>>> fun void iGen(int i1, int j1) {
>>>     while(true) {
>>>         Euclid(i1,j1,a1,b1) + Euclid(i1,j1,a2,b2) => float dist;
>>>         <<< dist >>>;
>>>         SinOsc s => ADSR e => dac;
>>>         e.set(35::ms, 8::ms, .1, 200::ms);
>>>         Math.pow(0.65,(dist)) => s.gain;
>>>         i1*x + j1*y => s.freq;
>>>         e.keyOn();
>>>         (440)::ms => now;
>>>         e.keyOff();
>>>         (440*Math.pow(1.2,dist))::ms => now;
>>>     }
>>> }
>>>
>>> fun float Euclid(float p, float q, float r, float s) {
>>>     return Math.sqrt(Math.pow((p-r),2) + Math.pow((q-s),2));
>>> }
>>>
>>> for(-3 => int i; i<4; i++) {
>>>     for (-3 => int j; j<4; j++) {
>>>         if (i != 0 && j != 0) {
>>>             spork ~ iGen(i,j);
>>>         }
>>>     }
>>> }
>>>
>>> while (x != y) {
>>>     500::ms=>now;
>>> }
>>>
>>> --
>>> Philipp Blume
>>>
>>> _______________________________________________
>>> chuck-users mailing list
>>> chuck-users at lists.cs.princeton.edu
>>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>>>
>>>
>>
>>
>> --
>> Release me, insect, or I will destroy the Cosmos!
>>
>> _______________________________________________
>> chuck-users mailing list
>> chuck-users at lists.cs.princeton.edu
>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>>
>>
>
>
> --
> Philipp Blume
>
> _______________________________________________
> 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/20140205/4ce356fe/attachment-0001.html>


More information about the chuck-users mailing list