Mpd : synchroniser plusieurs sorties

suite à ma précédente question sur paprefs, j’ai bien réussi à avoir un deuxième output pulseaudio sur mon rapserrypi
mon souci maintenant c’est que quand je met la sortie du salon et celle de ma chambre en même temps, voire même la sortie sur le serveur mpd, tout est assez désynchronisé.
j’ai google par ci par la, cela semple être un souci d’horloge si je comprend bien, comment procèderiez vous pour régler cela ? installer un serveur ntp sur la machine qui a le serveur mpd et avoir les autres machines utiliser cette heure serait-il une solution ?

Pas certain. L’horloge c’est plusieurs choses.

  • C’est effectivement l’heure de ton système.
  • Mais c’est aussi (au niveau matériel) quelque chose propre à chaque périphérique son, sur lequel il cadence l’échantillonage.

Mais la désynchronisation dont tu parles n’en es pas vraiment une, il s’agit plutôt je pense d’un délai ou d’une latence.

Une désynchronisation, c’est partir au même moment, les sons sont confondus donc la synchro est bonne, puis petit à petit y’a un décalage.
Un retard de latence, c’est vouloir partir au même moment, mais sur les starting blocks y’en a un qui regarde la lune et qui part un peu plus tard. Du coup les autres ont de l’avance.

Et donc la latence dans ton cas est déterminée par plusieurs choses:

  • Le “backend” utilisé par mpd pour envoyer du son. Il s’agit de pulseaudio dans ton cas. S’il s’agit de pulseaudio pour chacun de tes flux audio, alors j’imagine que ça devrait être bon (la latence est la même)
  • La latence réseau. Sauf que tes différents périphériques sont situés sur un réseau local, et que la latence est négligeable (quelques millisecondes ; tandis que pour le son, il faut au moins 20 ms de latence pour entendre un décalage gênant).
  • La latence de la carte son interne à l’ordi. Je ne sais pas comment s’établit la latence de façon classique avec ALSA, mais je ne suis pas sûr que ce soit ça qui joue dans ton cas.
  • Là encore, ça dépends du «backend». Si les deux postes (salon et chambre) utilisent pulseaudio, ils ont a priori les mêmes réglages, donc la même latence.
  • Et ça dépends aussi peut-être du temps de traitement, je n’ai pas entièrement confiance en pulseaudio. Il se peut que sur l’ordi où le CPU est un peu plus faible, pulseaudio mette plus de temps à démarrer son truc.

… ainsi que de nombreux détails

En résumé:

  • Peux-tu confirmer que tu utilises pulseaudio sur tous tes postes ?

Edit: et en solution «bidouille» il serait éventuellement possible d’ajouter une latence artificielle sur l’un des flux, si tant est que la latence constatée est toujours la même. Mais je sais pas si c’est simple à faire avec pulseaudio/mpd, je crains que non :stuck_out_tongue:

oui j’ai pulseaudio sur les 2 ordis avec les mêmes settings.

Sur mpd.wikia.com/wiki/PulseAudio, ils parlent de:

$ pacmd list-sinks

… et ça indique justement la latence pour le flux.
La ligne étant dans l’exemple:

[quote]current latency: 209.85 ms
(… ainsi que…)
configured latency: 210.00 ms; range is 0.50 … 1999.82 ms[/quote]
Je ne sais pas très bien sur quel poste tu devrais essayer cette commande, donc je dirais: sur tous, y compris le raspberry.

Tu peux coller les résultats ici, en pièces jointes si tu mets tout.


Edit: configurer la latence du plugin pulseaudio avec mpd me semble chaud, si je comprends bien ce bugreport, c’est une fonctionnalité souhaitée, mais non implémentée.

sur le rasperrypi, j’utilise alsa_output.usb-Burr-Brown_from_TI_USB_Audio_DAC-00-DAC.analog-stereo dans mon mpd.conf, la première ligne en fait pour le latency ci dessous

pi@raspberrypi ~ $ pacmd list-sinks | grep latency
        current latency: 0,00 ms
        configured latency: 0,00 ms; range is 0,50 .. 2000,00 ms
        current latency: 0,00 ms
        configured latency: 0,00 ms; range is 0,50 .. 371,52 ms

celui de l’output du salon, j’utilise ici alsa_output.pci-0000_00_1b.0.hdmi-surround dans le mpd.conf, la première ligne aussi pour le latency ci dessous

lotsoh@bhtpc:~$ pacmd list-sinks | grep latency
        current latency: 102.81 ms
        configured latency: 123.81 ms; range is 0.50 .. 123.81 ms
                hdmi-output-0: HDMI / DisplayPort (priority 5900, latency offset 0 usec, available: yes)
        current latency: 0.00 ms
        configured latency: 0.00 ms; range is 0.50 .. 2000.00 ms
        current latency: 0.00 ms
        fixed latency: 250.00 ms
        current latency: 0.00 ms
        fixed latency: 250.00 ms
        current latency: 0.00 ms
        fixed latency: 250.00 ms

Si current latency est à 0 (sur le raspberry), je suppose que c’est parce qu’aucun son n’était joué ?

En apparence, les latences sont choisies «au pif», si les “sinks” correspondent bien à ce que tu dis.
Il y a quand même un second flux à 2000ms de configuré (ordi du salon), ne serait-ce pas mpd ?

Enfin, j’pense que tu vois l’idée…

Je pense que la sortie de ton mpd sur raspberry est en avance sur les 2 autres.
Puis que la sortie de ton salon a ~100ms de plus.

Pourtant on lit:
wiki.debian.org/en/PulseAudio

… mais je n’utilise pas pulseaudio et ne sait pas comment.

Après, je fais ptet fausse route. Si tu as envie de creuser d’autres pistes sur la synchronisation et pulseaudio, libre à toi.

Voir aussi comment ils font chez Raspberry, tu ne dois pas être le seul à t’en servir comme bricole multimedia.

Dans le pire des cas, si je voulais vraiment obtenir le résultat que tu décris, soit je passerais par le filaire (une carte son ou une table de mixage avec plusieurs sorties), soit j’installerais jackd sur l’ordi du salon et de la chambre, qui permet un contrôle plus fin de la latence, ainsi que d’ajouter une latence artificielle sur les flux audio. Mais c’est casse-cou. jackd monopolise normalement la carte son donc c’est chiant pour un usage non-exclusif, mais peut-être que combiné à pulseaudio tu peux avoir une flexibilité acceptable.
Je n’installerais pas directement jackd sur le raspberry car il est peu probable que ça fonctionne bien. (expl: raspberrypi.org/phpBB3/viewt … =38&t=7682 )