class: center, middle # News from the W3C _A transmission from the Web standards side_ Paul Adenot,
mozilla
Web Audio Conference — IRCAM, Paris 2025-11-21 --- # Me ? -- Mozilla + W3C
--- class: biggest # Agenda
New in an audio-related spec...
--
...new in a non-audio-related spec
--- # A bit about the W3C
- Consortium -- - Browser vendors but not only! -- - Universities, research labs, companies, governments... --- # Group types - **Working groups**: **can** publish standards, patent policy, requires (paid) membership, or to be an invited expert -- - **Community group**: **cannot** publish standards, no patent policy, free + easy to join, often incubates texts that will become standards later -- - **Interest group**: **cannot** publish standards, free + easy to join, produces "notes" that are often input to standards documents. --- # In our field(s) - **Audio Working Group**: publishes the Web Audio API, Web MIDI API, soon the Web Speech API (Speech recognition & synthesis) -- - **Media Working Group**: publishes MSE, EME, Web Codecs, various other items such as autoplay policies, etc. -- - **Web Real-time communication working group**: WebRTC networky things (but not protocols, done by IETF), `MediaStream` things, audio input (historical) --- class: bigger # Outside our field - **Web Transport Working Group**: Web Transport (!) -- - **Web Assembly Working Group**: Web Assembly (!!) -- - ...lots of other groups --- # Outside W3C - **WHATWG**: mostly HTML and DOM (e.g. `HTMLMediaElement`) -- - **TC39**: EcmaScript -- - **IETF**: networky things --- class: small # Join the CG A couple clicks, participate to a~~n~~ ~~exciting~~ monthly online meeting
--- # This year in the Audio Working Group - Web Audio API - Web MIDI API - Web Speech API
NEW
--- # Web Audio API implementations Total count of complete & independant implementations: 6.5 - In **browsers**: Gecko, WebKit, Blink, ~~Edge~~ -- - **Stand-alone**: `web-audio-api-rs`, Netflix's (proprietary) -- - Partial: `react-native-audio-api` --- # Testing
-- Anybody can contribute tests! --- class: bigger # New features - `AudioContext` `"interrupted"` state - New `MessagePort` on the global - Audio playout stats - High-resolution timestamps - Render quantum size selection --- # AudioContext Interrupted State - Enables browsers to **pause or resume audio** during system interruptions (e.g., phone call, lid close, exclusive hardware use) - Origin trial in Chromium underway --
Approved
--- # `MessagePort` on the global ```webidl [Global=(Worklet,AudioWorklet),Exposed=AudioWorklet] interface AudioWorkletGlobalScope : WorkletGlobalScope { [Throws] undefined registerProcessor (DOMString name, AudioWorkletProcessorConstructor processorCtor); readonly attribute unsigned long long currentFrame; readonly attribute double currentTime; readonly attribute float sampleRate; readonly attribute MessagePort port; }; ``` --
←
-- No need to create a "dummy" `AudioWorkletNode` to set things up! --
Approved
--
--- class: smallest # Audio Playout Stats API - New API for monitoring audio quality metrics - Glitch counts - Statistics about latency - Anti-fingerprinting measures under discussion ```webidl interface AudioPlaybackStats { readonly attribute double underrunDuration; readonly attribute unsigned long underrunEvents; readonly attribute double totalDuration; readonly attribute double averageLatency; readonly attribute double minimumLatency; readonly attribute double maximumLatency; undefined resetLatency(); [Default] object toJSON(); }; partial interface AudioContext { [SameObject] readonly attribute AudioPlaybackStats playbackStats; }; ``` --
Under review
--- # High-Resolution Timing Finally! - `performance.now()` exposed in `AudioWorklet` - Needed for **accurate performance measurement** - Dedicated TPAC 2025 meeting planned last week -- Fingerprinting protection: lowest granularity with in Cross Origin Isolated documents, same as `SharedArrayBuffer` --
Approved
--
Easy to implement
--- # High-Resolution Timing Finally! - `performance.now()` exposed in `AudioWorklet` - Needed for **accurate performance measurement** - Dedicated TPAC 2025 meeting planned last week Fingerprinting protection: lowest granularity with in Cross Origin Isolated documents, same as `SharedArrayBuffer`
Approved
Easy to implement
--
Implemented
--
--- # Render quantum Allow breaking free of the 128-frames block size. -- Higher or lower latency, or more importantly, aligned on the native block size. --
Approved
--
Hard to implement
--- # Web MIDI API New editor, spec changes underway, no big implementation change... -- ... except prompt + secure origin required. --- class: center, middle # Non-Audio WG specs -- ... that we use and rely on --- class: small # Web Codecs Not too recent, but important for us audio developers. - `f32-planar` sample format required (mandatory to implement) -- - `u8`, `s16`, `s24` — planar AND interleaved (supported everywhere) -- - BYOD BHTD (`libavcodec` for the Web, **not** `libavformat`) -- - Low level, composes well with other APIs on the Web Platform -- - Much better than `decodeAudioData(...)`, easy to use --
No excuse
--- # Web Speech API - Adopted by the Audio Community Group -- - Will likely be adopted as a Audio Working Group deliverable next rechartering -- - **Local** recognition -- - **Low-latency** (< 1000ms) -- - `MediaStream`-based, compatible w/ the Web Audio API -- - High quality low-latency local speech synthesis up next ! --
Soon
--- # Web Transport Low latency client-server (for now) communication, good for real time! -- Low-latency, bidirectional, reliable or unreliable data transport over HTTP/3 --
Some excuses
--
Not for long!
--- # `WASM` -- - Memory64 -- - Multi-memory -- - `WASM gc` -- - Tail call optimizations --
No excuse
--
No GC on the audio thread though
--- # `Atomics` -- - `waitAsync` -- - Relaxed SIMD --
No excuse
--
Be careful
--- class: small # Thanks !
Slides
https://padenot.github.io/wac-25/
Email
padenot@mozilla.com