45 votes

synchronisation audio sur un réseau

Je suis dans le démarrage de la conception d'un client/serveur de système audio qui peut diffuser de l'audio arbitrairement sur un réseau. Un serveur central pompes sur un flux audio et un nombre x de clients reçoit les données audio et en joue. Jusqu'à présent, aucune magie nécessaire et j'ai même eu ce scénario fonctionne avec VLC media player hors de la boîte.

Cependant, la partie la plus délicate semble être à la synchronisation de la lecture audio ainsi que tous les clients sont audibles de synchronisation (temps de latence peut être autorisée tant qu'elle est perçue pour être synchronisé par un auditeur de l'homme).

Ma question est si il n'y a aucune méthode connue ou l'algorithme à utiliser pour ce type de problème de synchronisation (la vidéo est probablement résolus de la même manière). Ma propre opinion initiale des centres autour de la synchronisation des horloges entre les machines physiques et de créer ainsi une virtuel principal "timer" et en quelque sorte l'alignement audio paquets de données contre elle.

Certains produits déjà à résoudre le problème (mais toujours pas suffisant pour l'ensemble de mon cas d'utilisation):

http://www.sonos.com

http://netchorus.com/

Tous les pointeurs sont la plupart de bienvenue. Merci.

PS: Cette question semble avoir disparu depuis longtemps.

31voto

Kevin Panko Points 4481

Ryan Barrett a écrit les résultats de ses recherches sur son blog.

Sa solution consiste à utiliser NTP comme une méthode pour garder toutes les horloges de synchronisation:

Sérieusement, il n'y a qu'un astuce pour p4sync, et qui est de savoir comment il utilise le protocole NTP. Un hôte actes comme la p4sync serveur. Les autres p4sync clients synchroniser leurs horloges système à l' l'horloge du serveur, à l'aide de SNTP. Lorsque l' serveur démarre la lecture d'une chanson, il enregistre le temps, à la milliseconde près. Les clients récupèrent alors que timestamp, calculer la différence entre temps actuel à partir de ce timestamp, et chercher en avant que, loin dans la chanson.

10voto

Andrew McGregor Points 7641

Problème difficile, mais possible.

Utiliser le NTP ou tictoc pour obtenir vous-même une horloge synchronisée avec un taux connu en termes de votre système de source de temps.

Aussi garder un estimateur de course comme pour le taux de votre son de l'horloge; la manière habituelle de le faire est d'enregistrer avec le même son de l'appareil en cours de lecture, l'enregistrement sur une mémoire tampon pré-chargée avec un nombre magique, et de voir où la carte son arrive à dans un temps mesuré par l'horloge synchronisée (ou vice-versa, voir combien de temps il faut pour faire un nombre connu d'échantillons sur le synchronisée de l'horloge). Vous devez continuer de faire cela, l'horloge de la dérive par rapport à l'heure du réseau.

Alors maintenant, vous savez exactement combien d'échantillons par seconde par votre carte son de l'horloge vous devez de sortie pour correspondre à la fréquence de l'horloge synchronisée. Afin de vous puis interpoler les échantillons reçus à partir du réseau à ce rythme, plus ou moins une correction si vous avez besoin de rattraper ou revenir un peu à partir de là où vous avez obtenu pour le dernier tampon. Vous devez être extrêmement prudent à ce sujet interpolation de telle manière à ne pas introduire des artefacts audio; il y a un exemple de code ici pour les algorithmes dont vous aurez besoin, mais il va être tout à fait un peu de lecture avant de vous lever à la vitesse sur ce point.

Si votre source est un enregistrement live, bien sûr, vous allez avoir à mesurer le taux d'échantillonnage de la carte son et d'interpoler en réseau du temps des échantillons avant de l'envoyer.

10voto

Steve Rowe Points 14688

Découvrez le document de Protocole Internet Système de Son par Tom Vide de Microsoft Research. Il résout le problème exact que vous travaillez sur. Sa solution implique la synchronisation des horloges entre les machines et en utilisant des horodatages de les laisser à chacun de jouer en même temps. L'inconvénient de cette approche est le temps de latence. Pour obtenir toutes les horloges synchronisées exige le marquage de l'heure à la plus grande latence sur le réseau.

7voto

Ants Aasma Points 22921

En fonction de la taille et de la forme de la salle, de tout pour être en synchronisation est la partie la plus facile, de tout à son correcte est une forme d'art en soi, et si possible à tous. Du côté technique, la partie la plus difficile est de trouver le retard de votre synchronisé chronologie réelle de la sortie audio. Avoir un matériel identique et une faible latence cadre de logiciel (ASIO, JACK) contribue certainement ici, comme le fait d'étalonnage. Soit à l'avance ou active. Sinon, c'est juste de synchroniser le calendrier avec le NTP et l'utilisation d'un retour en boucle fermée à la hauteur de la piste audio pour synchroniser la sortie à la date convenue.

Le plus gros problème est que le son prend une quantité considérable de temps pour se propager. 10m de la différence de distance est déjà 30ms de retarder suffisamment à vis de la localisation des sons. Le Double et vous vous retrouvez dans l'ennuyeux echo territoire. L'audio professionnel configurations en fait d'introduire volontairement des retards, l'utilisation d'un nombre plus élevé de tweeter et de jouer avec des échos pour éviter une cacophonie d'échos qui porte l'auditeur hors.

0voto

zaf Points 12350

"...tant qu'il est perçu pour être synchronisé par un auditeur de l'homme" - Très difficile à faire, car l'oreille est moins indulgent que l'œil. Surtout si vous voulez faire cela sur un réseau sans fil.

Je voudrais première expérience avec les technologies web, flash des lecteurs audio contrôlée à distance par un serveur via Javascript.

Si cela a donné de mauvais résultats alors je voudrais essayer d'obtenir plus de contrôle en utilisant quelque chose comme python (avec pygame).

Si des progrès sont réalisés, je voudrais aussi essayer d'utiliser ChucK et essayer un peu de la programmation de bas niveau avec ALSA audio de la bibliothèque.

Si rien de satisfaisant sort j'allais venir et de revenir sur ce post et en fait de lire quelque chose d'intelligent par un expert audio expert en programmation et, si ma vie en dépendait, probablement jusqu'à la fin de bifurquer le 14 livres anglaises pour le commercial NetChorus application ou quelque chose de similaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X