[chuck-users] record and play multiple LiSa objects on multiple channels

Harald Gutsche hg42 at gmx.net
Fri Apr 8 13:24:30 EDT 2011


Hi chuckers,

Kassen:
>Fortunately that's not correct. You can use quite a few, if you like;
>LiSa a => dac;
>LiSa b => dac;
>//etc
>
>If this gave you trouble there is likely something else that went wrong. If you send a (minimal) example that demonstrates the trouble you had we can look at it and try to help.

ok, I tried again to do the following (as a beginning):

- record stereo sound
- play it back in loops
- save it in parallel

----------------------------------------

I tried many variations and until now didn't find a way to do this all together.
Please use a fast panning stereo sound for all examples (e.g. one
panning cycle in 1 second). I could simulate this in chuck, but then
this would make everything less clear.

Let's start with a first problem. LiSa as you said above can be
instantiated multiple times, you are right, this works (and there are
examples for that).
The chuck crashes I mentioned in a former mail can be reduced to the
following code:

LiSa looper;
// this works: adc => looper => dac;
adc.chan(0) => looper.chan(0) => dac.chan(0);
adc.chan(1) => looper.chan(1) => dac.chan(1);

when running on chuck 1.2.0.8 (which was my first contact with chuck).
Now I compiled 1.2.1.4-dev-2 (from the posted svn repo), which doesn't
crash, "fine" you say.

----------------------------------------

So next thing coming to mind is:

2000::ms => dur record_time;
//1 => int nchannels;
2 => int nchannels;

LiSa looper;

record_time => looper.duration;

for(0 => int c; c < nchannels; c++) { adc.chan(c) => looper.chan(c) =>
dac.chan(c); }

adc => dac;

<<<"record", "">>>;
1 => looper.record;
record_time => now;
0 => looper.record;

adc =< dac;

<<<"play", "">>>;
looper.play(1);
looper.loop(1);
//for(0 => int c; c < nchannels; c++) { looper.chan(c) => dac.chan(c); }

// go
while( true ){ 1000::ms => now; }


this seems to record only one channel which is played on both dac channels.

----------------------------------------

Ok, lets try another one, multiple LiSa objects connected to the
adc/dac channels:

20::ms => dur crossfade;
2000::ms => dur record_time;

fun void loop_sampler(int c)
  {
  LiSa looper;
  adc.chan(c) => looper => dac.chan(c);
  adc.chan(c) => dac.chan(c);

  record_time => looper.duration;

  <<<"record", c>>>;
  1 => looper.record;
  record_time => now;
  0 => looper.record;

  adc.chan(c) =< dac.chan(c);

  <<<"play", c>>>;
  looper.play(1);
  looper.loop(1);
  looper => dac.chan(c);

  2 * record_time => now;
  }

spork ~ loop_sampler(0);
spork ~ loop_sampler(1);

// go
while( true ){ 1000::ms => now; }

surprisingly, this doesn't play back anything in  chuck 1.2.1.4-dev-2.
I checked the general logic by simply replacing all occurencies of
".chan(c)" with nothing in the editor, which works, but is mono.

But in chuck 1.2.0.8 it works unchanged!


More information about the chuck-users mailing list