[HN Gopher] Web Assembly audio decoders highly optimized for siz...
___________________________________________________________________
Web Assembly audio decoders highly optimized for size and
performance
Author : ctoth
Score : 92 points
Date : 2024-10-28 16:37 UTC (3 days ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| wg0 wrote:
| Interesting. What would be the use case for these? Audio editors?
| duped wrote:
| Browser support of some codecs is inconsistent, for example
| Safari's support for opus has been pretty bad/nonexistent (iirc
| this recently changed)
| cupofjoakim wrote:
| I used to work at a place that developed a DAW in the
| browser, and yeah, we used a WASM Ogg Opus decoder to save on
| storage costs for our sound library. We earlier had to have
| mp3s for safari devices. With opus being opus we really
| wanted to provide it for the majority of devices as well as
| our server side streaming, and being able to provide opus
| support for safari ourselves was a godsend.
|
| Edit: Should note that our decoder was developed in house and
| I have nothing to do with the project OP linked to.
| duped wrote:
| bandlab?
| pier25 wrote:
| This. Even FLAC support isn't great.
| lifthrasiir wrote:
| Is that true even for mp3 though? Apparently it actually has
| a universal browser support up to MSIE 9 (!), while Ogg
| Vorbis and FLAC are now supported by all modern browsers
| after MSIE [1]. Opus seems to be the earliest format with
| less support than that, while this library only dates back to
| 2020.
|
| [1] https://caniuse.com/?search=audio%20format
| duped wrote:
| Sure, but what if you don't want to use mp3... codecs
| aren't created equal. For anything latency sensitive mp3 is
| a non starter. For anything under bandwidth constraints,
| flac isn't great.
|
| OPUS is a descendant of CELT (which never caught on, for
| reasons) which is an open/unhindered by patents low latency
| lossy codec suitable for VoIP and live streaming. It's
| relatively recent, but also, those use cases are more
| popular recently in the browser.
|
| And to go even more extreme, some applications really care
| about bit-exactness in their decoders, which you don't get
| by relying on other vendors.
| lifthrasiir wrote:
| I mean, WebAssembly Opus decoder seems meaningful even to
| this day, but I wondered why earlier formats are there in
| the first place. The bit-exactness is a good argument but
| as you've said that's a very specific requirement, and
| the library only seems to care about performance and
| minified size anyway.
| ctoth wrote:
| Being able to decode audio in a Web Worker rather than
| the main UI thread is also a nice use case.
| nsteel wrote:
| They look great for https://github.com/badaix/snapweb which is
| missing decoders for some formats.
| austin-cheney wrote:
| So, the JavaScript audio/video APIs already available in the
| browser are fully competent to build any kind of media player.
| The major limitation is that media players reliant on the
| browser APIs are limited to the codecs and containers supported
| by the browsers, which turns out to be a huge limitation.
|
| A media library written for WASM with supplied codecs would not
| have that limitation, such that you could have an equivalent to
| VLC directly in a browser supporting immediate playback of any
| video/audio codec/container supplied in the WASM payload. The
| major advantage of a browser based application versus a desktop
| app is immediate playback of media via hyperlink without the
| soul crushing limitations Apple imposes on iOS.
| xfalcox wrote:
| I wish the author would do the same for image decoding. iOS
| inability to draw a canvas with 4096x4097 dimensions means you
| can't use an Off screen canvas to go from file to RGBA array.
| nilslice wrote:
| awesome! would love to help get distributions of these as Extism
| wasm plugins so they can be used in
| Go/Rust/PHP/Ruby/OCaml/Java/C++/C#/bunch more languages...
| jauntywundrkind wrote:
| Probably a good basis for a shoutcast client! So little info on
| it & I really doubt it's supported in any browsers. Even though
| it's mp3 with a little metadata sprinkled in every X bytes.
| https://www.radiotoolbox.com/community/forums/viewtopic.php?...
| doublerebel wrote:
| There are lots of docs and info available for shoutcast/icecast
| servers and clients. Here's a couple implementations in
| javascript:
|
| https://github.com/livebassmusicrightnow/even-nicercast/blob...
|
| https://github.com/TooTallNate/node-icy
|
| WASM would be total overkill. The mpeg stream is readable
| natively in the browser -- that's how I served the client when
| I was running livebassmusicrightnow.
| eshaz wrote:
| Hey, author of the wasm-audio-decoders library here. Actually,
| I wrote this library for this very reason to supplement my
| other library, icecast-metadata-player which is an Icecast
| (Shoutcast) browser client with ICY metadata support.
| https://github.com/eshaz/icecast-metadata-js
| hoten wrote:
| If I'm already compiling ogg vorbis/opus/minimp3/etc via
| emscripten (allegro app), is there still big benefit to using
| these instead?
| beepbooptheory wrote:
| If they are all web workers, how do you use them in an Audio
| Worklet?
___________________________________________________________________
(page generated 2024-10-31 23:01 UTC)