W3C home > Mailing lists > Public > public-audio@w3.org > July to September 2013

Re: Proposal for fixing race conditions

From: Chris Rogers <crogers@google.com>
Date: Thu, 18 Jul 2013 11:54:25 -0700
Message-ID: <CA+EzO0=77TpbQZn+68fcB5hrdAAOLE-1ex_nLdpJTH5oKg8Fww@mail.gmail.com>
To: "K. Gadd" <kg@luminance.org>
Cc: Srikumar Karaikudi Subramanian <srikumarks@gmail.com>, Jer Noble <jer.noble@apple.com>, Olivier Thereaux <Olivier.Thereaux@bbc.co.uk>, WG <public-audio@w3.org>
On Thu, Jul 18, 2013 at 5:00 AM, K. Gadd <kg@luminance.org> wrote:

> I feel I have to take issue with this quote in particular, even though I
> don't necessarily disagree with the conclusion you're drawing here:
> "As the API is designed and has been used for over 2 years, these calling
> patterns are not used and so simply are not an issue.  We do have
> substantial developer experience to support this view, and these developers
> come from a wide range of backgrounds and experience levels from complete
> novices playing with audio for the first time, all the way to seasoned
> professional audio developers."
> If two years of use and experience were sufficient, one could have assumed
> that HTML would never contain images (IIRC <img> was added 2-3 years after
> the original development/specification of HTML). The web platform has
> evolved in (often unpredictable) steps over time and will continue to
> evolve. I do not think it is reasonable to argue that 2 years of the Web
> Audio API's availability - and we should be clear that in this context
> 'availability' simply means 'we shipped a prefixed version of an API
> resembling this one, in one browser' - is sufficient to identify and
> predict any potential issues with the specification, in any area. In an
> area like thread safety (not to mention developer friendliness,
> predictability of results, etc.) I think additional caution is always
> merited.

It's not just one browser, it is three browsers that I know of: Chrome
(mac/win/linux/chromeos/android), Safari (desktop/iOS), and Epiphany

Each of them has substantially different audio back-end code, and there are
two completely different JS engines where it has been implemented (V8 and
JSC).  In the case of Chrome versus Safari, there are two completely
different sandboxing architectures (radically different and complex each in
their own right).  This shows that the API is implementation viable in a
very wide range of environments.

Perhaps you're right that it would be better to have 3 or 4 years of
experience, or more, but 2 years is significant and substantial, and cannot
be simply dismissed as a limited implementation used by a handful of
developers.  The general feedback we've gotten from developers and users
has been quite positive, and they're very eager and excited to see that
Mozilla is now working on an implementation too.

> If you simply wish to argue that the effects of these races can be proven
> to always be limited to corrupt audio output, that diminishes the risk
> significantly, so we're probably fine. However, is corrupt audio output
> actually okay? Out of all the users who've been using the API for 2 years,
> how many of them would consider it acceptable if end-users heard garbled
> noise on some machines/configurations or in certain use cases? As I pointed
> out, the presence of OfflineAudioContext effectively guarantees that at
> some point a developer will use Web Audio to generate samples for offline
> use, and rely on the quality of the results. At that point, I think it is
> impossible to argue that corrupt audio is acceptable, especially if it is
> intermittent depending on thread timing. The <audio> implementation
> problems Chrome has had in the past serve as a useful guidepost here, if we
> observe the way developers and end-users reacted to the corrupt audio
> produced in those situations.

I don't consider garbled noise as a good outcome for any audio system if
the API is used normally.  Nobody wants to hear glitches and audio breakup
if they're just trying to play some content in an <audio> element, for
example.  I think you and I, and probably everyone else wants to get the
best resilience to glitches, etc. on as wide a range of devices as
possible.  Of course, different operating systems present different
low-level audio APIs, some of which are more resilient than others.  And
there are also quite marked differences in the speed/power from low-end
mobile devices all the way up to powerful desktop machines in terms of CPU
performance.  Nobody can guarantee that arbitrarily complex audio
processing can playback in realtime on the very slowest mobile devices any
more than we can guarantee buttery smooth 60fps million polygon WebGL
rendering.  What we can do as browser implementors is to optimize as well
as we can given all of these limitations.  And so far in the current
WebKit/Blink implementations I would say that we have made substantial and
very significant optimizations.

Aside from performance issues in any particular browser, if a developer
makes a mistake in code, then an incorrect audio result can be rendered,
perhaps white noise will be the result instead of a nice drum pattern.
 Mistakes can always be made in code which will render the wrong result -
maybe you wanted to draw a large green circle, but instead a small red
circle was drawn - if so, then you go back and find the bug.  I believe the
Web Audio API in its current form allows for many possibilities, both
simple and complex, and it is about as easy to use as it could be given all
the jobs it has been asked to solve.

Robert O'Callahan's artificial and very unrealistic example of modifying
audio buffer data right after playing it is very unconvincing as the type
of problem which will be worrisome for users of the Web Audio API.

Received on Thursday, 18 July 2013 18:54:53 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 19:03:23 UTC