Sorry, I wasn’t very clear.
I was trying to be more precise about the word ‘notation’, which I’d been using a bit ambiguously.
I.e. ‘notation’ as distinct from ‘syntax’: the same notation is also nice in languages with very different syntaxes.
And distinct from ‘implementation’: the same notation works well when implemented in a completely different way, say as plain value construction rather than the framed manner SC does it.
I didn’t mean to suggest it was a nice notation for writing interfaces…
Only that it is a very nice and perspicuous notation!
And yes, I do think that SC2 was a very beautiful system!
And you’re right it’s connected.
For instance that none of the SC2 Texture functions, or the very many SC2 examples that were written using them, are in SC3.
And that there are at least three different ways to write those functions in SC3, none quite so elegant and clear as the SC2 way.
But of course there are things that are the other way about.
And simple UGen graphs are much less expressive.
I like SC3 very much and am very grateful for it, but also it’s model is inherently a bit complicated.
If GUI objects are created within UGen graph code, who “owns” them?
I’m confused about this.
I think the general idea for auto-guis is that when writing the UGen graph (or the graph of UGen graphs) we already say (in a sense) what values can be set dynamically.
Interface builders use that information to derive an interface.
The Synthdef builder is only interested in the name, and index and default value for each control, all of which it fetches from the Function object.
But interfaces work better if they have more information.
It’d be nice to be able to annotate the existing control declarations in a simple manner, but it’s not obvious how to, so they need to be stored somewhere else.
And yes, I don’t mean dynamic graphs aren’t nice, only that they’re more complicated, and harder to make very clear notations for.
I tried out you example, and it works (of course!), but I’m not expert enough to say anything useful I’m afraid.
The .playWithUi
above is the best way I know to do this.