spencersalazar / chuck

28 stars 8 forks source link

LiSa/LiSa10 and panning. #42

Open ericheep opened 7 years ago

ericheep commented 7 years ago

The panning functions of the LiSa UGen effectively mutes the UGen. These same functions work with LiSa10.

SinOsc sin => LiSa mic => dac;

1::second => dur DURATION;
mic.duration(DURATION);

mic.record(1);
DURATION => now;
mic.record(0);

// both pan and voicePan results in silence
//mic.pan(1.0);
mic.voicePan(0, 0.0);

mic.play(1);
while (true){
    second => now;
}

Also, it'd be nice if when using LiSa (as opposed to LiSa10), that the expected values range from -1.0 to 1.0 instead of 0.0 to 1.0.

heuermh commented 7 years ago

@ericheep interesting, what is LiSa10?

@spencersalazar should this and the other issues here be copied to https://github.com/ccrma/chuck? If so, I can do that and then you may close these.

ericheep commented 7 years ago

@heuermh LiSa10 is a 10 channel version of LiSa, and accepts [0.0 - (numchans - 1.0)], for its panning values.

spencersalazar commented 7 years ago

Basic LiSa is mono output so maybe pan should just do nothing. Or perhaps it switched to stereo output. I remember discussing this with @dantrueman a long time ago but don't remember the specific reasoning for the current design of LiSa/LiSa10. In general LiSa10 can be used for any multichannel situation of 10 channels or fewer simply by not panning to the extra channels, or otherwise dealing with ChucK's folding over of extra channels.

@heuermh Yeah that would make sense, although I see many of the issues you filed are regarding high-level design issues- these are great ideas, but I don't do much with that aspect of the language. If you still feel strongly about them it might be worth reaching out to Ge and Perry directly. I certainly agree that ChucK could use some leveling up in terms of its type system and other general programming language features.

dantrueman commented 7 years ago

right, we mostly use LiSa10 for bussing situations, where we want to be able to bus individual grains to different places, for recording or processing; very very useful. Of course that could be used for panning and multichannel speaker situations too, and we’ve done that as well. having the mono LiSa be able to switch to stereo out would be fine and probably useful, i suppose

On Sep 20, 2016, at 8:07 PM, Spencer Salazar notifications@github.com<mailto:notifications@github.com> wrote:

Basic LiSa is mono output so maybe pan should just do nothing. Or perhaps it switched to stereo output. I remember discussing this with @dantruemanhttps://github.com/dantrueman a long time ago but don't remember the specific reasoning for the current design of LiSa/LiSa10. In general LiSa10 can be used for any multichannel situation of 10 channels or fewer simply by not panning to the extra channels, or otherwise dealing with ChucK's folding over of extra channels.

@heuermhhttps://github.com/heuermh Yeah that would make sense, although I see many of the issues you filed are regarding high-level design issues- these are great ideas, but I don't do much with that aspect of the language. If you still feel strongly about them it might be worth reaching out to Ge and Perry directly. I certainly agree that ChucK could use some leveling up in terms of its type system and other general programming language features.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/spencersalazar/chuck/issues/42#issuecomment-248473021, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AKpmtgdHsiQ2J_0qxHUh04-dy_ZbcB9Gks5qsHVZgaJpZM4KBLUq.

ericheep commented 7 years ago

@dantrueman I would definitely find a stereo LiSa with individual voice panning useful 🙂.

A workaround would be to use LiSa10 as if it were a stereo UGen and just pan from 0.0 to 1.0 for the individual voices, but a basic stereo version would be ideal.

Also, upon more testing, I found that only panning values that are<= 0.0 or >= 1.0 mute the basic LiSa UGen. The values in between lower the amplitude based on how close it they are to 0.0 or 1.0.

SinOsc sin => LiSa mic => dac;

0.1::second => dur DURATION;
mic.duration(DURATION);

mic.record(1);
DURATION => now;
mic.record(0);

mic.play(1);
0.0 => float inc;

while (true){
    (inc + 0.01) % Math.TWO_PI => inc;
    mic.voicePan(0, (Math.sin(inc) + 1.0)/2.0);
    0.01::second => now;
}
dantrueman commented 7 years ago

but a basic stereo version would be ideal

I agree

Also, upon more testing, I found that only panning values that are<= 0.0 or >= 1.0 mutes the basic LiSa UGen. The values in between lower the amplitude based on how close it they are to 0.0 or 1.0.

yeah that’s just weird...

spencersalazar commented 7 years ago

Alright, so @dantrueman would you be alright with these changes:

Thanks to the design of LiSa's underlying implementation any changes like this are super easy to make, so whatever seems best moving forward should be good.

dantrueman commented 7 years ago

yep, i am good with that!

On Sep 21, 2016, at 2:38 PM, Spencer Salazar notifications@github.com<mailto:notifications@github.com> wrote:

Alright, so @dantruemanhttps://github.com/dantrueman would you be alright with these changes:

Thanks to the design of LiSa's underlying implementation any changes like this are super easy to make, so whatever seems best moving forward should be good.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/spencersalazar/chuck/issues/42#issuecomment-248703423, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AKpmtqvFjHpW_Ef9WL0_o53-sI1BpgDvks5qsXm5gaJpZM4KBLUq.