⚡ Latence

Comprendre les chiffres de latence

⏱ 7 min de lecture · Intermédiaire
L'essentiel en 15 secondes
  • La latence audio temps réel ne peut physiquement pas être nulle — il y a toujours un minimum de 15-25 ms incompressibles.
  • Le chiffre dans Mes Studios (ex. "~26 ms") = ta contribution one-way vers le serveur. Le chiffre sur la tranche d'un musicien dans le studio = la vraie latence note→oreille entre vous deux.
  • Le seuil 25 ms est la limite physique de la perception synchrone démontrée par la recherche (Stanford CCRMA). Au-dessus, l'oreille commence à percevoir un décalage.

Pourquoi je vois "26 ms" et pas "0 ms" ?

Parce que la latence c'est de la physique, pas du logiciel. Entre le moment où ta corde de guitare vibre et celui où le son sort du casque de ton pote, le signal traverse plusieurs étapes — chacune avec son temps de traitement incompressible.

TOI (CAPTURE + ENVOI) RÉSEAU + RELAI TON POTE (RÉCEPTION) 🎤 ⚙️ 📤 ☁️ 📥 ⚙️ 🎧 ~15-25 ms ~2-6 ms ~15-25 ms
De ta corde de guitare à l'oreille de ton partenaire, le signal traverse 3 zones — total typique 35-55 ms en mode agent natif.

Voici les 5 étapes audio (côté ton ordi) qui s'ajoutent à la latence réseau :

Capture
Ton micro / instrument → le buffer de ta carte audio (mémoire tampon).
~1-3 ms
Encodage Opus
Compression du signal en paquets envoyables sur le réseau (codec audio temps réel).
~3-7 ms
Jitter buffer
Petite "réserve" côté réception qui absorbe les variations du réseau (sinon ça crachote).
~8-15 ms
Sortie audio
Le buffer de sortie de ta carte audio vers le DAC (conversion numérique → analogique).
~1-3 ms
Hardware
Le trajet USB / Thunderbolt entre l'ordi, la carte audio et le casque.
~1-3 ms
Total audio
Incompressible avec un setup pro (carte audio externe + agent natif Jamodio).
~15-25 ms

À ces ~20 ms s'ajoute le réseau : le temps que tes paquets audio mettent à atteindre le serveur Jamodio le plus proche. Sur une connexion résidentielle en Île-de-France vers nos serveurs européens, c'est typiquement 2-3 ms one-way (chiffre mesuré, pas estimé).

Total affiché ≈ 25 ms. C'est l'ordre de grandeur que tu vois dans Mes Studios, et c'est déjà très proche de la limite physique théorique pour une connexion résidentielle.

💡
Pour aller plus bas que 25 ms, il faudrait soit être physiquement dans le même datacenter que nos serveurs (impossible chez soi), soit utiliser une carte audio avec des buffers ultra-courts (ASIO 32 samples, ~1 ms) et une connexion fibre directe vers nos POPs. À ce stade on parle de tuning marginal.

"Mes Studios" vs. dans le studio — ce ne sont pas les mêmes chiffres

Jamodio affiche deux chiffres de latence à des endroits différents. Ils mesurent deux choses sémantiquement distinctes.

📂 MES STUDIOS 🎛️ DANS LE STUDIO 🎸 🖥️ ton signal estimation théorique badge ~25 ms ta contribution one-way 🎸 🖥️ 🎧 pote A toi badge ~35-45 ms vraie note→oreille A→toi
Le badge Mes Studios = ton aller-retour théorique vers le serveur. Le badge sur la tranche d'un musicien dans le studio = la vraie latence note→oreille de lui vers toi.
📂 Mes Studios

~25 ms yellow

Affiché avant d'entrer dans un studio, sur chaque carte. C'est ta contribution one-way vers nos serveurs + ta chaîne audio locale.

ton réseau + ton audio
(estimation pré-session)

Utilité : choisir le serveur le plus proche / vérifier que ta connexion est viable avant de t'engager dans une session.

🎛️ Tranche d'un musicien

~35 ms yellow

Affiché pendant la session, sur la tranche de mixer de chaque musicien. C'est la vraie latence note→oreille entre lui et toi.

son audio + son réseau + relai +
ton réseau + ton jitter buffer + ton audio

Utilité : comprendre si tu es en phase avec ce musicien précis. Survole le badge pour voir la décomposition.

Donc si dans Mes Studios tu vois "26 ms" et que dans le studio le badge de ton pote affiche "37 ms", ce n'est pas une erreur. Les deux mesurent des choses différentes. La règle d'inégalité : la note→oreille (badge musicien) est toujours supérieure à ta contribution seule (badge Mes Studios), parce qu'elle additionne sa chaîne ET la tienne.

Et si on est 3 musiciens ou plus ?

Chaque musicien du studio a SA propre tranche avec SON propre badge. Le calcul est refait indépendamment pour chacun, à partir de SA distance réseau vers nos serveurs + la tienne. Tu ne vois donc pas un chiffre moyen : tu vois la vraie latence avec chaque musicien individuellement.

Exemple concret — toi à Paris, en session à 3 :

MusicienSa positionSon badge dans ta mixetteVerdict
🎸 PierreParis~24 msgreen
🎹 PaulParis~24 msgreen
🥁 JacquesToulouse~45 msorange

Conséquence pratique : tu sais instantanément avec qui tu peux groover et avec qui il faudra compenser. Si Jacques décroche sur les morceaux rapides, c'est sa latence — pas son jeu.

Constantes vs mesures réelles : qu'est-ce qui change en live ?

Tu pourrais penser que les chiffres affichés sont tous calculés en temps réel. La réalité est plus nuancée :

ComposantComment c'est obtenuVarie en live ?
Réseau (one-way) Mesuré en continu via des pings WebSocket vers nos serveurs, médiane glissante sur les derniers échantillons. ✅ Oui, mis à jour toutes les 1,5 s.
Jitter buffer (agent) Lu en direct depuis l'agent natif : la cible adaptative ajustée en temps réel selon la qualité du flux reçu. ✅ Oui, mis à jour à 1 Hz.
Sortie audio (browser) Lu en direct via AudioContext.outputLatency de ton navigateur. ✅ Oui, valeur réelle.
Capture micro Estimation conservatrice basée sur le mode (agent ou browser). ⚠️ Constante.
Encodage / décodage Opus Estimation : Opus en 20 ms frame = ~2.5 ms encode + ~2.5 ms decode. ⚠️ Constante.
Hardware (USB/TB) Estimation : 2 ms typique pour USB 2.0 / Thunderbolt. ⚠️ Constante.

Les 3 valeurs marquées "constante" sont des estimations pessimistes calibrées sur les setups les plus courants. Le réel peut varier de ±5 ms autour du chiffre affiché selon ta carte audio précise. Mais les 3 valeurs dynamiques sont, elles, mesurées en live — c'est elles qui expliquent pourquoi ton badge bouge quand ta connexion bouge.

🔬 Pour aller plus loin — pourquoi ne pas tout mesurer en live ?

Mesurer la capture et le hardware en temps réel demanderait soit une boucle de calibration au démarrage (= friction utilisateur), soit un appel à l'API RTCRtpReceiver.getStats() toutes les 5 s. Cette dernière option ajoute un cycle d'appel asynchrone à la pipeline audio temps réel — ce qu'on refuse par principe : aucun nouveau process runtime ne doit toucher le chemin audio.

Le compromis retenu : constantes pessimistes pour ce qui est ~stable (capture/opus/hw), mesures live pour ce qui bouge vraiment (réseau, jitter buffer, sortie). Cette honnêteté affichée vaut mieux qu'une fausse précision.

Wi-Fi vs Ethernet : le mythe à dégonfler

Beaucoup de musiciens pensent que le Wi-Fi ajoute de la latence. C'est partiellement faux :

En clair : en Wi-Fi de bonne qualité, ton badge peut très bien afficher la même valeur qu'en Ethernet. Mais dès qu'un voisin lance Netflix ou que ton point d'accès est saturé, le badge grimpe en quelques secondes — et tu commences à entendre des crachotements.

👉 Pour le détail, voir l'article Ethernet vs Wi-Fi.

Mode agent vs mode navigateur : pourquoi l'écart de 40 ms ?

Jamodio fonctionne dans deux modes :

ModeCaptureOpusJitterSortieTotal audio
Agent natif (macOS / Windows) 1-3 ms 3-7 ms 8-15 ms 1-3 ms ~15-25 ms
Navigateur seul 20-30 ms 8-15 ms 15-30 ms 4-8 ms ~55-70 ms

Le navigateur ajoute 30 à 50 ms incompressibles par rapport à l'agent natif. Ce n'est pas un défaut de Jamodio — c'est une limite physique du navigateur :

👉 C'est pour ça que Jamodio fournit un agent natif téléchargeable. Il contourne complètement la stack du navigateur et accède directement aux APIs audio bas niveau du système. Gain : plusieurs dizaines de ms qui font passer une session de "frustrante" à "agréable".

⚠️
En navigateur seul, le seuil EPT de 25 ms est physiquement inatteignable. Tu joueras quand même, mais avec un décalage perceptible. C'est utile pour tester / découvrir Jamodio, pas pour des sessions sérieuses. Le badge "jaune" ou "orange" en mode navigateur n'est pas un bug, c'est une honnête restitution de la réalité physique.

Sur Windows : pourquoi ASIO change tout

Si tu es sur Windows, il y a un détail technique à comprendre — il n'est pas spécifique à Jamodio, il s'applique à tous les outils de jam en ligne (JackTrip, FarPlay, JamKazam, Jamulus…). Windows propose deux chemins audio très différents :

Pile audioQuand elle est utiliséeLatence bufferQui en bénéficie
WASAPI Shared
(par défaut Windows)
Toutes les apps grand public — Chrome, Spotify, Zoom, Discord. Le sound engine Windows mixe les sorties de toutes les apps. ~10 ms plancher Carte son intégrée, jack onboard, HDMI, USB sans driver ASIO.
ASIO
(driver fabricant)
Logiciels musicaux pros — Cubase, Ableton, Reaper, FL Studio… et l'agent Jamodio quand un driver ASIO est installé. ~2-3 ms Cartes audio externes USB / Thunderbolt (Focusrite, MOTU, Behringer, Steinberg, RME…) avec leur driver officiel.

La différence vient du sound engine Windows. En mode WASAPI Shared (le défaut), Windows mixe en interne avec un buffer fixe de 480 samples (= 10 ms à 48 kHz), impossible à descendre plus bas. C'est une limitation de l'OS, pas un choix d'éditeur. ASIO contourne complètement ce mixeur en parlant directement au matériel via le driver fabricant.

💡
Conséquence pratique pour Jamodio. Sans carte audio externe avec driver ASIO, un utilisateur Windows paie environ 10-14 ms d'overhead audio par rapport à un utilisateur Mac ou Windows+ASIO équivalent. Jamodio fonctionne quand même — l'agent gère ce cas avec un fallback automatique — mais tu perds une marge précieuse sur le total note→oreille. Sur un duo Paris↔Paris, ça fait la différence entre badge vert et badge jaune.

Tous les concurrents Jamodio recommandent ASIO sur Windows : c'est la recette standard pour la jam en ligne. La bonne nouvelle : ça ne demande pas un gros budget — une Focusrite Scarlett Solo (~110 €), une Behringer UMC22 (~50 €) ou une Steinberg UR22C (~150 €) suffisent largement, drivers ASIO inclus côté constructeur.

👉 Pour la procédure d'installation détaillée des drivers ASIO, voir Carte audio · Section Windows ASIO.

Le seuil 25 ms — pourquoi cette valeur précise ?

Tu as peut-être remarqué que les badges Jamodio passent du vert au jaune à 25 ms. Cette valeur n'est pas arbitraire : elle vient de la recherche académique sur la "Networked Music Performance" (jeu musical en réseau).

L'Ensemble Performance Threshold (EPT) a été démontré expérimentalement par plusieurs études indépendantes :

Les seuils Jamodio (< 25 · 25-40 · ≥ 40) sont alignés sur cette littérature :

🔬 Pour aller plus loin — la latence dans une vraie pièce

Tu pourrais te dire : "OK 25 ms en ligne, mais dans une vraie pièce on est à 0 ms, non ?". Non. Le son voyage à ~340 m/s dans l'air. Entre deux musiciens à 3 mètres l'un de l'autre = ~9 ms de latence acoustique naturelle. Sur une scène de concert avec un bassiste à 10 m du batteur = ~30 ms. Les musiciens compensent ça depuis toujours.

Jamodio à 25 ms one-way ≈ jouer avec quelqu'un à 8 mètres dans une pièce. C'est complètement praticable. C'est même la norme dans 90% des contextes de scène.

Pour aller plus loin

Maintenant que tu comprends les chiffres, les trois articles suivants te donnent les leviers concrets pour optimiser ta latence :

1
Pourquoi le câble Ethernet stabilise ton badge même si la latence moyenne est identique. Effets du jitter en pratique.
2
5 points concrets à vérifier avant chaque session — Ethernet, carte audio, casque filaire, agent lancé, secteur branché.
3
Le composant qui a le plus d'impact sur ta latence audio (capture + sortie).