[chuck-users] record and play multiple LiSa objects on multiple channels
Daniel Trueman
dtrueman at princeton.edu
Fri Apr 8 14:54:39 EDT 2011
haven't time to look closely at this, but a couple things:
* LiSa is mono internally; you can't chuck to separate internal channels. it can do multichannel output, but it's not perfect.
* multichannel in ChucK is a bit dodgy at the moment, at least with LiSa
dt
On Apr 8, 2011, at 6:24 PM, Harald Gutsche wrote:
> 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!
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
More information about the chuck-users
mailing list