1 of 19

WAM-studio, une station de travail audio-numérique pour le Web

Journées d’Informatique Musicales 2023

24-26 Mai 2023

(Lien de la présentation : �https://tinyurl.com/3jv6rhpa)

Michel Buffa, Antoine Vidal-Mazuy

Université Côte d’Azur / Laboratoire I3S / INRIA, WIMMICS group,

michel.buffa@univ-cotedazur.fr, @micbuffa�

2 of 19

Qui suis-je ?

  • Professeur à l’Université Côte d’Azur (UCA), France
    • Membre de l’équipe WIMMICS commune à INRIA et au laboratoire I3S du CNRS
    • W3C Advisory Committee Representative pour UCA
    • Membre du W3C WebAudio Working �Group depuis 2014
    • michel.buffa@univ-cotedazur.fr, @micbuffa�
  • Membre du groupe qui a créé les�Web Audio Modules aka�“Plugins audio pour la plateforme Web
    • Sorte de “VST pour le Web”

3 of 19

WebAudio, WebMidi, etc.

4 of 19

Concepts de l’API WebAudio

Opérations audio dans un Audio Context

let ctx = new AudioContext();

Conception modulaire :

  • Opérations audio : audio nodes�…qui forment un graphe audio

let osc1 = ctx.createOscillator();

osc1.frequency.value = 440;

let gain1 = ctx.createGain();

gain1.gain.value = 0.1;

osc1.connect(gain1).connect(ctx.destination);

5 of 19

Architecture interne

  • Un thread de rendu appelé "audio thread" est seul en charge du rendu sonore du graphe audio
    • Contraintes temps réel fortes : thread de haute priorité. Si il ne parvient pas à fournir le prochain bloc d’échantillons sonores à temps : glitches, dropouts etc.
  • Un thread de contrôle, exécutant en général du code JavaScript code pour la GUI, fait les appels à l’API WebAudio, gère la création et modification du graphe audio.
    • connexion/déconnexion des nœuds, modifications de leurs paramètres.
  • Les noeuds “standards” traitent le son dans l’audio thread
    • Les algorithmes DSP sont fixes, seuls les paramètres peuvent être modifiés.
  • Le nœud AudioWorklet (2018) fournit une solution pour implémenter des traitements DSP personnalisés dans l’audio thread.
    • AudioWorkletNode code: main thread
    • AudioWorkletProcessor code: audio thread (avec constraintes/limitations)

6 of 19

WebAudioModules (WAM)

audio plugins pour le Web

7 of 19

8 of 19

WAMs dans des logiciels hôtes

9 of 19

DAWs commerciaux

Soundtrap.com (spotify)

Ampedstudio.com

Bandlab.com

Soundation.com

10 of 19

DAWs: le photoshop de l’audio

Enregistrer, éditer, mixer des pistes audio et MIDI

Pistes associées à des plugins (effets audio, instruments)

Automation des paramètres

Gérer le temps-réel et la latence!

11 of 19

WAM-Studio: un DAW open source compatible WAM !

Motivation:

  • Démonstrateur des APIs du W3C�
  • Pas de DAW web open source complet disponible�
  • Développer un DAW web: problèmes spécifiques lié à l’environnement sandboxé

12 of 19

Challenge 1: concevoir un framework host/plugin Web

13 of 19

Challenge 2 : host/plugin communication (i.e 44.1Khz)

Contrôle bas-niveau de la lecture nécessaire.�Chaque piste est un AudioWorklet (WAMNode+WAMProcessor)

  • Le processeur d’une piste communique avec les plugins à la fréquence d'échantillonnage (WAM SDK) sans quitter le thread audio !
    • Automation des paramètres : DEMO
    • Envoyer des notes MIDI : DEMO

No need to schedule ahead in time like in the famous article “A tale of two clocks” by C.Wilson.

14 of 19

Challenge 3 : gérer la latence

Latence = RETARD !

1 - Latency Round-trip: la durée qu'il faut pour qu'un signal, tel qu'une voix chantée ou un solo de guitare, passe d'une entrée analogique sur une interface audio, à travers les convertisseurs analogique-numérique, jusqu'au DAW, puis retourne ressorte par l'interface audio. Si cette durée est élevée, cela impacte négativement la capacité du musicien à jouer en rythme, par exemple. Elle devrait être < 20 ms.

2 - Latence de sortie : temps mis à un son émis par le DAW pour atteindre la sortie audio

3 - latence d’entrée : temps écoulé avant que l'enregistrement ne démarre dans le DAW lorsque l'on joue d'un instrument ou que l'on chante dans un microphone. Doit être prise en compte lors de l'enregistrement !

Latence d’entrée = latence round-trip - latence de sortie

15 of 19

Challenge 3: compenser la latence d’entrée

  1. Mesurer la latence round-trip :
    1. Solution matérielle (micros en entrée et en sortie, enregistreur numérique),
    2. Solution logicielle : emmetre un son du DAW, l’enregistrer et mesurer le temps écoulé (vidéo ci-dessous)
  2. La latence de sortie est fournie� par la WebAudio API,
  3. Calculer la latence d’entrée,�Entrée = Round-trip - Sortie
  4. Décaler en arrière dans le temps� les buffers audio enregistrés.�

SOLUTION INTÉGRÉE DANS LE DAW !

16 of 19

Challenge 4: enregistrer plusieurs pistes en même temps de manière robuste, pendant la lecture d’autres pistes…

17 of 19

A small projet from recording to mixing

18 of 19

CONCLUSION + WAM-Studio disponibilité

WAM-Studio est en développement mais fonctionnel et stable

  • Bonne démonstration des technologies du W3C pour développeurs audio
  • La conception et le code montrent des bonnes pratiques pour enregistrer et gérer la latence dans un environnement sandboxé.�

WAM-Studio a des mises à jour hebdomadaires…�

  • Code source et image Docker disponibles sur GitHub (front-end et back-end)
  • Démo en ligne
  • Les parties principales de WAM-studio font l’objet de tutoriaux en ligne.�
  • Tous les plugins présents dans WAM-Studio sont open-source et publiés sur le dépôt GitHub wam-community. Ils sont aussi disponibles dans d’autres hôtes (sequencer.party par ex.)
  • WAM-Studio plugin manager aussi disponible séparément (source and demo)

19 of 19

WAM-Studio travail en cours…

Bientôt disponible:

  • Sauvegarde des projets dans le cloud,
  • Viewports sur les pistes (zoom, support pour pistes de longues durées)
  • Macros par type de piste (presets voix/guitare etc.), CTRL-Z,
  • GUI pour le routage audio (support de cartes sons > 4 entrées/sorties)
  • Edition des pistes audio (split/merge, normalize, reverse etc.)
  • Pistes MIDI (déjà fonctionnelles en dehors du DAW), avec mesures / signatures rythmiques, tempo etc.
  • Sauvegarde incrémentale des projets (en tâche de fond), smart cache (PouchDB/IndexedDB)
    • Les pistes sont de gros fichiers .wav !

Plus tard:

  • Support des WebCodecs
  • Fonctionnalités collaboratives