W3C home > Mailing lists > Public > whatwg@whatwg.org > October 2014

Re: [whatwg] Gapless playback problems with web audio standards

From: Dale Curtis <dalecurtis@chromium.org>
Date: Tue, 28 Oct 2014 12:34:54 -0700
Message-ID: <CAPUDrwfXJJ4-HB6j+6Dt_VMjvprK8=2JpQCvWraNN2MCVQjmSw@mail.gmail.com>
To: Ashley Gullen <ashley@scirra.com>
Cc: "whatwg@whatwg.org" <whatwg@whatwg.org>
Unfortunately, making loop in the bare audio tag sample accurate in Chrome
is non-trivial for a variety of reasons, so it's unlikely to happen anytime
soon. The MSE based approach should work great in the meantime; I've used
the approach described above for seamless audio+video looping.

- dale

On Tue, Oct 28, 2014 at 11:59 AM, Ashley Gullen <ashley@scirra.com> wrote:

> Web Audio is unsuitable for music tracks due to needing to download and
> fully decompress in to memory the entire track before starting playback. It
> would be nice if this could "just work" with the HTML5 audio loop tag.
>
> Ashley
>
>
> On 28 October 2014 18:06, Dale Curtis <dalecurtis@chromium.org> wrote:
>
>> Yes, both WebAudio and MSE can do that, though I'd probably lean towards
>> WebAudio for anything game related. Using WebAudio just create a buffer
>> source and set the loop attribute:
>>
>>
>> https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.loop
>>
>> The way you could do it with MediaSource would be to "double buffer" the
>> track such that you're creating an infinite stream. I.e. append a new copy
>> of the track as time reaches the end of the previously appended track. To
>> avoid unnecessary memory usage you would remove stale copies of the data
>> once played.
>>
>> - dale
>>
>> On Tue, Oct 28, 2014 at 9:55 AM, Ashley Gullen <ashley@scirra.com> wrote:
>>
>>> Can this be used for gapless looping of the same track? This is a common
>>> request for game developers looking to seamlessly loop a music or ambience
>>> track: https://code.google.com/p/chromium/issues/detail?id=353072
>>>
>>> Ashley
>>>
>>>
>>> On 27 October 2014 20:09, Dale Curtis <dalecurtis@chromium.org> wrote:
>>>
>>>> Hi,
>>>>
>>>> Chrome developer here, gapless playback should work with both WebAudio
>>>> and
>>>> Media Source Extensions (MSE). I've fixed bugs in both implementations,
>>>> so
>>>> if you have some test cases in Chrome that fail, I'd love to see them.
>>>> As
>>>> luck has it, I've recently put an article together on how to use MSE for
>>>> gapless playback:
>>>>
>>>> http://dalecurtis.github.io/llama-demo/index.html
>>>>
>>>> We'll be posting it to HTML5Rocks in the near future. Feel free to
>>>> contact
>>>> me if you have any questions. You also note that setTimeout() is not
>>>> precise enough for your usage; you should take a look at the WebAudio
>>>> scheduler or using WebWorkers:
>>>>
>>>> http://www.html5rocks.com/en/tutorials/audio/scheduling/
>>>> https://github.com/chrisguttandin/worker-timers
>>>>
>>>> If you only need your project to work in the foreground using
>>>> requestAnimationFrame is also an option. I'd first try to schedule as
>>>> much
>>>> as you can in advance though.
>>>>
>>>> - dale
>>>>
>>>
>>>
>>
>
Received on Tuesday, 28 October 2014 19:35:40 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 17:00:24 UTC