- From: Alex Russell <slightlyoff@google.com>
- Date: Thu, 25 Jul 2013 11:47:36 -0700
- To: Janessa Det <jandet@gmail.com>
- Cc: "www-tag@w3.org List" <www-tag@w3.org>
- Message-ID: <CANr5HFW=TrQjgNeeCvayOgKUNcYucadyi+T2KQAw_Qr3wkiGZA@mail.gmail.com>
On Wed, Jul 24, 2013 at 11:05 PM, Janessa Det <jandet@gmail.com> wrote:
> Thank you for the detailed responses -- excited to see how this feedback
> document could affect the Web Audio specs (yay Open Standards!). A quick
> clarification re: the .connect chaining response below:
>
> > I feel like I don't have a great proposal here. Returning from connect
> seems like it's not exactly what you want; although returning both and
> allowing you to use destructuring in ES6 to get closer to the mark might be
> better.
>
> The simple solution of returning the destination node (as you propose)
> would be a huge first step for cleaning up graph composition code. As an
> example:
>
> Currently connecting up nodes often looks something like this:
>
> oneShotSound.connect(lowpass);
> lowpass.connect(panner);
> panner.connect(gainNode2);
> gainNode2.connect(compressor);
> compressor.connect(destination);
>
> With chaining it could look like this -- a one liner -- formatted here for
> extra clarity:
>
> oneShotSound
> .connect(lowpass)
> .connect(panner)
> .connect(gainNode2)
> .connect(compressor)
> .connect(destination);
>
> This is a huge win in expressiveness and readability.
>
And a great example. Adding it to the document. Thanks so much!
> Admittedly, things may still remain a bit complex for more complex audio
> graphs with many diverging paths, although being able to at least chain up
> linear paths would contribute to simplifying & modularly organizing the
> definition of these complex graphs as well.
>
Right. I think I get a bit worried that the JQuery experience might
convince you that you're dealing in terms of "oneShotSound" the whole time,
but I don't think it matters here; and honestly I wish DOM returned
appended nodes in the same way.
> I have to give it a little more thought, but I am not sure that ES6
> destructuring will help in cleaning up the connection of audio graphs.
> First, for code clarity, I think it is important to encourage separation
> of the node creation and graph construction imo. Second, if we are trying
> to simplify the definition of branches in a complex audio graph via use of
> destructuring, I feel like it would not really address the problem as
> neatly as we'd hope. As an example:
>
> var [branch1, branch2] = [
> node1.connect(node1b),
> node2.connect(node2b)
> ];
>
> My instinct here would be then wanting to connect the source node to all
> these branches I have defined which doesn't work as branch1 and branch2 now
> represent the destination nodes node1b and node2b, respectively. In this
> case I would have wanted .connect to return the source then, which is
> rather arbitrary and specific to only this use case. We could use this to
> connect to the destination, however, as in: branch1.connect(dest) and
> branch2.connect(dest), but this could be done in each of the branch
> definitions anyways. It does not simplify the code or clarify it imo.
>
I think I was going for something more like:
{ node1.in, node1.out } = node1b.someOperation(node2b);
It's not much better and you're right, I don't think it helps. In/out props
would need to be getter/setter pairs and it's not great. What we really
want, I think, are hierarchy properties: "children", "parents", or similar.
> If we return both source and destination nodes to solve this
> unidirectional problem, I agree that it could possibly enable a more
> powerful solution for being able to connect complex audio graphs in one
> fell swoop.
>
Right
> However, I think it would be overly complex and would make the simple
> chaining demonstrated above impossible. It would be more of a confusing
> lose than a win.
>
> Please do correct me if I misunderstand what you were thinking in terms of
> ES6 destructuring helping in this context.
>
>
> ~Janessa
>
Received on Thursday, 25 July 2013 18:48:34 UTC