GroovyMorning_RLAC

Calcul de la latence et synchronisation Master-Slave

Dans un système distribué comme GroovyMorning, où l’audio capturé par un enregistreur Java est analysé par un segmenteur Python, la synchronisation constitue un défi permanent. Le mécanisme de Master Sync a été conçu pour assurer la correspondance exacte entre le flux Java et le segmenteur Python.

Le problème : La dérive des flux (Stream Drift)

Plusieurs facteurs introduisent un décalage (latence) entre deux serveurs écoutant la même URL de flux radio :

La solution : Le Fingerprinting Audio “On-the-fly”

Une technique d’empreinte acoustique simplifiée est utilisée pour calculer le décalage réel entre les deux instances. Le processus technique se déroule comme suit :

1. Génération de l’empreinte (Côté Java)

L’enregistreur Java attend l’écriture des premiers segments de l’enregistrement continu sur le disque. Dès la disponibilité du segment n° 5 (environ 5 secondes après le démarrage), une empreinte est extraite :

2. La requête de synchronisation (/api/sync_offset)

Ce binaire est transmis par requête POST au segmenteur Python, accompagnée de l’information positionInSeconds=5. Cela indique au segmenteur Python l’état de l’audio côté Java à l’instant T=5s.

3. Calcul du Delta (Côté Python)

Un rolling buffer (mémoire tampon circulaire) de l’audio en cours de traitement est maintenu par le segmenteur Python. À la réception de l’empreinte :

recalibreur.png

4. Application du recalibrage

Le delta reçu par l’enregistreur Java est stocké sous la variable masterOffsetSeconds.

Pourquoi ne pas se limiter à l’heure système ?

Bien que l’heure système (NTP) synchronise les horloges, elle ne garantit pas la synchronisation du contenu des flux. Un flux radio peut présenter un retard variable dû aux serveurs de diffusion (CDN). Le fingerprinting s’avère être la seule méthode fiable pour assurer un découpage basé sur le contenu sonore réellement perçu des deux côtés.

Ce mécanisme de Master Sync permet à GroovyMorning d’atteindre une précision élevée dans l’extraction des chroniques.