- From: Joe Berkovitz <joe@noteflight.com>
- Date: Tue, 4 Oct 2016 12:25:42 -0400
- To: Paul Adenot <padenot@mozilla.com>
- Cc: Raymond Toy <rtoy@google.com>, Audio Working Group <public-audio@w3.org>
- Message-ID: <CA+ojG-a3aSOK+ZrUfTMbRsHo3RwoJN6p+JYyuiwvOoXhJzMg3Q@mail.gmail.com>
Well, we are trying to establish rules for observability. Perhaps we're saying, based on the previous example, that the rules are this: a modulation signal alone, in the absence of an input, is not observable. That seems fine to me. Would you agree? . . . . . ...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:57 AM, Paul Adenot <padenot@mozilla.com> wrote: > I suppose we could collect everything here. The key is observability. > Implementors can do anything they feel like as long as the result is not > observable. > > Paul. > > On Tue, Oct 4, 2016 at 5:36 PM, Joe Berkovitz <joe@noteflight.com> wrote: > >> 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 16:26:15 UTC