- From: Joe Berkovitz <joe@noteflight.com>
- Date: Tue, 4 Oct 2016 11:36:22 -0400
- To: Paul Adenot <padenot@mozilla.com>
- Cc: Raymond Toy <rtoy@google.com>, Audio Working Group <public-audio@w3.org>
- Message-ID: <CA+ojG-a8BbfTAMSA3iN4c13BsxmnLbNeOCuihpsWVHFdJWgwgA@mail.gmail.com>
Sorry, I meant to remove amp from reachability. Updated example: var mod = new OscillatorNode(...); // modulation source var sig = new OscillatorNode(...); // signal source sig.connect(amp); var amp = new GainNode(); mod.connect(amp.gain); amp.connect(ctx.destination); mod.start(); sig.start(); sig.stop(ctx.currentTime + 1); sig = null; // note: mod is still playing, and is also retained by a JS reference amp = null; . . . . . ...Joe Joe Berkovitz President Noteflight LLC +1 978 314 6271 49R Day Street Somerville MA 02144 USA "Bring music to life" www.noteflight.com On Tue, Oct 4, 2016 at 11:35 AM, Paul Adenot <padenot@mozilla.com> wrote: > In your example, `amp` is till reachable, so it stays alive. > > Paul. > > On Tue, Oct 4, 2016 at 5:32 PM, Joe Berkovitz <joe@noteflight.com> wrote: > >> I agree with this outcome, but the reasoning still feels murky. It seems >> that you are saying that an active connection from some source to some node >> via an AudioParam doesn't count as an "input reference" to keep it alive, >> but a connection via its input does. Perhaps that's true, but I want to >> make sure. >> >> Let's try this example. In this one, there are three nodes: two >> oscillators and a GainNode. One oscillator is being amplified, the other is >> modulating the gain node. The source oscillator becomes stopped and has no >> JS references, but the modulation oscillator sticks around. Does the >> GainNode stick around too? >> >> var mod = new OscillatorNode(...); // modulation source >> var sig = new OscillatorNode(...); // signal source >> sig.connect(amp); >> var amp = new GainNode(); >> mod.connect(amp.gain); >> amp.connect(ctx.destination); >> mod.start(); >> sig.start(); >> sig.stop(ctx.currentTime + 1); >> sig = null; // note: mod is still playing, and is also retained by a >> JS reference >> >> Question: does the gain node `amp` remain in the graph or can it be GCed? >> >> >> . . . . . ...Joe >> >> Joe Berkovitz >> President >> Noteflight LLC >> >> +1 978 314 6271 >> >> 49R Day Street >> Somerville MA 02144 >> USA >> >> "Bring music to life" >> www.noteflight.com >> >> On Tue, Oct 4, 2016 at 4:21 AM, Paul Adenot <padenot@mozilla.com> wrote: >> >>> Agreed with Raymond here. >>> >>> Paul. >>> >>> On Tue, Oct 4, 2016 at 12:20 AM, Raymond Toy <rtoy@google.com> wrote: >>> >>>> Once oscB has stopped, and because you've dropped all references to >>>> both A and B, does it matter anymore? Nothing is observable anymore and >>>> you can't make them observable, so it seems to me we don't have to say >>>> anything. The implementation can do whatever it wants now. >>>> >>>> On Mon, Oct 3, 2016 at 8:04 AM, Joe Berkovitz <joe@noteflight.com> >>>> wrote: >>>> >>>>> But in that case, A and B both have "playing" references as per the >>>>> Lifetime section of the spec, so JS references are irrelevant. >>>>> >>>>> So here is an improved and hopefully more troubling statement of the >>>>> question: >>>>> >>>>> Let's say that osc A is modulating the frequency of osc B, but that B >>>>> reached its stop time (and A has no stop time). Would we keep B alive >>>>> anyway, because retained node A is modulating it, in spite of the fact that >>>>> B can only produce silence? >>>>> >>>>> Example: >>>>> var oscA = new OscillatorNode(...); >>>>> var oscB = new OscillatorNode(...); >>>>> oscA.connect(oscB.frequency); >>>>> oscB.connect(ctx.destination); >>>>> oscA.start(); >>>>> oscB.start(); >>>>> oscB.stop(ctx.currentTime + 1); >>>>> oscA = oscB = null; >>>>> >>>>> >>>>> . . . . . ...Joe >>>>> >>>>> Joe Berkovitz >>>>> President >>>>> Noteflight LLC >>>>> >>>>> +1 978 314 6271 >>>>> >>>>> 49R Day Street >>>>> Somerville MA 02144 >>>>> USA >>>>> >>>>> "Bring music to life" >>>>> www.noteflight.com >>>>> >>>>> On Fri, Sep 30, 2016 at 7:18 PM, Raymond Toy <rtoy@google.com> wrote: >>>>> >>>>>> I think it should. If A and B are both oscillators and A is >>>>>> connected to, say, B.frequency, I expect to hear the modulated B even if A >>>>>> and B have no Javascript references to them. >>>>>> >>>>>> On Fri, Sep 30, 2016 at 1:22 PM, Joe Berkovitz <joe@noteflight.com> >>>>>> wrote: >>>>>> >>>>>>> I sat down to work on https://github.com/WebAudio/we >>>>>>> b-audio-api/issues/944 and discovered a question. >>>>>>> >>>>>>> So: we already know (I think) that when AudioNode A's output is >>>>>>> connected to AudioNode B's input, then A has a "connection reference" to B. >>>>>>> Thus, if A is retained, B is retained too. >>>>>>> >>>>>>> But what about the case where AudioNode A is connected to an >>>>>>> AudioParam exposed by AudioNode B? Does A keep B alive in this case? >>>>>>> >>>>>>> . . . . . ...Joe >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >
Received on Tuesday, 4 October 2016 15:36:52 UTC