[chuck-users] Latest on subclassing UGen within ChucK?

Michael Heuer heuermh at gmail.com
Fri Feb 22 14:12:14 EST 2013


Chris Harris <ryguasu at gmail.com> wrote:
> On Fri, Feb 22, 2013 at 7:55 AM, Kassen <signal.automatique at gmail.com> wrote:
>
>>> If this sort of subclasses can't work, a nice improvement would be for
>>> ChucK to provide an error here. Is there any legitimate reason to
>>> subclass a UGen in ChucK language? If not, attempting to do so should
>>> generate a compile error. Alternatively, maybe trying to chuck a
>>> non-C++ Ugen subclass into another Ugen (and especially into dac)
>>> should throw a runtime error.
>>>
>>
>> As I see things there are valid reasons to want this and wanting to
>> extend UGen or a particular type of UGen makes sense, both
>> syntactically and as a way of working with sound.
>>
>> While it is not a "error" I could this see being grounds for a
>> "warning" that points the user towards ChuGins. For me a "error" is
>> going too far; these are classes and classes can be extended, while
>> the end result is not what we'd intuitively want there is no error on
>> the syntax level as such, I feel. I can see how this might be grounds
>> for debate though.
>
> Agree that you might want to be able to extend a particular UGen. For
> example, something like this might be useful for something or other:
>
> class MyCosine extends SinOsc
> {
>     1 => int timesPlayed;
>
>     fun void increment()
>     {
>         1 +=> timesPlayed;
>     }
> }

You can do something similar with

class MyCosine extends Chugen
{
  SinOsc _osc => blackhole;
  1 => int timesPlayed;

  fun void increment()
  {
    1 +=> timesPlayed;
  }

  fun float tick(float in)
  {
    return _osc.last();
  }

  fun float gain()
  {
    return _osc.gain();
  }

  fun void gain(float gain)
  {
    gain => _osc.gain();
  }

  ...etc.
}

but of course MyCosine would not be an instance of UGen.


> And clearly you should also be able to have a variable of type UGen,
> that could hold any concrete ugen.
>
> I think if we were handling this sort of situation in Java, then UGen
> would be an abstract class; you can't instantiate it, only subclasses
> that actually implement certain critical methods. And you can't
> actually write the relevant methods in the ChucK language, so
> attempting to extend a UGen in ChucK would fail. Of course, that would
> require abstract classes, which may not be worth adding for for that.
>
>> I recommend a mail to the list over staring at things for hours.
>
> Oh, you must mean the dev list? I was wondering if I was getting too
> technical here anyway.

Too technical for this mailing list?  Not possible.  :)

   michael


More information about the chuck-users mailing list