Jack vs Pulseaudio - comment est-ce plus rapide?

27

Je vois un tas d'affirmations selon lesquelles Jack est plus rapide que Pulse et a moins de latence. Comment en est-il ainsi? Pourquoi Pulse se dit-il léger et les gars de Jack l'appellent-ils gros? Quelqu'un pourrait-il décomposer les éléments internes de ces deux démons en un profane?

Evan Carroll
la source
2
Si je comprends bien, ils sont conçus à des fins différentes, ce qui pourrait expliquer le problème de les comparer.
NN

Réponses:

30

Jack vous oblige - l'utilisateur averti - à configurer le serveur pour déterminer la latence de traitement la plus faible possible pour votre machine. (La latence de traitement est le temps nécessaire au serveur pour déplacer des données vers / depuis les applications clientes, puis envoyer / recevoir le prochain "morceau" d'échantillons audio en dehors du système.) Jack fournira ces morceaux de données audio à temps, ou il échouera et vous donnera un tampon de sous-exécution (parfois appelé "abandon", ou pops et clics). Si Jack subit systématiquement des sous-exécutions, il vous appartient soit de redémarrer le serveur avec des paramètres différents, soit de modifier quelque chose dans les applications clientes pour les rendre plus efficaces afin que vous puissiez respecter vos délais audio. Étant donné que vos paramètres de serveur s'appliquent uniformément à tous les clients, Jack est très utile pour acheminer l'audio entre plusieurs applications audio et obtenir des résultats prévisibles . (C'est-à-dire, c'est comme brancher des "jacks" dans divers composants audio.)

Pulse est conçu pour minimiser le nombre de fois où l'audio est interrompu car le serveur ne respecte pas la date limite d'envoi / réception audio en dehors du système. Il essaie apparemment de le faire en choisissant un grand tampon pour les applications clientes qui ne demandent pas une faible latence de traitement , puis en "injectant" des échantillons dans ce tampon pour les applications clientes qui ont un délai plus tôt. S'il essaie d'injecter des échantillons si tôt qu'il manque une échéance et provoque un sous-dépassement, Pulse augmentera automatiquement le temps le plus court qu'il permettra à un client d'envoyer une mise à jour audio au serveur. Pulse docs état explicitement que ultra faible latency-- disent, moins de 10 ms de latence de traitement- n'est pas un objectif de conception. Étant donné que Linux lui-même (et probablement votre matériel) n'a pas été conçu pour la planification audio en temps réel, je serais enclin à les croire.

En termes de configuration utilisateur, Pulse est "léger". (On pourrait dire que Pulse a une faible latence de configuration , ce que malheureusement de nombreuses applications Linux Audio semblent ignorer.) En termes de complexité sous-jacente par rapport à Jack, Pulse est "gras".

Pour obtenir une réponse définitive sur ce qui est le plus rapide, il vous suffit d'obtenir un périphérique de bouclage et de mesurer la latence aller-retour sur votre propre système pour connaître la vérité. La latence aller-retour est le temps nécessaire à votre système pour traiter l'audio et recevoir ce qu'il a traité dans le système. Il existe des didacticiels en ligne qui expliquent comment procéder sous Linux. Cela vous donnera une idée de ce que vous recherchez réellement, c'est-à-dire la latence perçue - le temps qu'il faut entre le moment où vous déclenchez un événement (par exemple, le grattage des cordes d'une guitare) jusqu'au moment où vous entendez le son pour la première fois. qui en résulte (par exemple, entendre l'accord de guitare).

Enfin, gardez à l'esprit que Pulse et Jack se trouvent tous les deux au-dessus d'ALSA sur la plupart des distributions GNU / Linux. Je sais que tu ne demandes que Jack contre Pulse. Mais si vous utilisez une seule application audio pouvant se connecter directement à ALSA, il n'y a aucun moyen concevable que l'ajout de Pulse ou Jack vous obtienne une latence perçue inférieure à celle d'ALSA seul. En ce sens, Pulse et Jack sont tous deux "gros".

tldr; ALSA seul est le plus rapide, Jack est utile pour chaîner plusieurs applications audio et Pulse est probablement plus facile à utiliser lorsque vous ne vous souciez pas de la latence ultra faible. Ignorez toute documentation ou discussion qui utilise le terme latence sans expliquer de quel type de latence il s'agit. (Malheureusement, les documents officiels de Jack et les articles de blog de Lennart sur Pulse entrent dans cette catégorie.)

Remarque : Il peut y avoir des cas extrêmes où vous souhaitez utiliser une seule application audio et elle a une interface ALSA minable et une interface Jack décente. Dans ce cas, l'utilisation de Jack peut réduire la latence. Mais si nous parlons d'applications conçues pour minimiser la latence, ces cas devraient être rares. Mais connectez un périphérique de bouclage et testez mon hypothèse!

jancsika
la source
9

Ils sont en fait similaires en tant que serveurs sonores . JACK est conçu pour une réponse en temps réel / à faible latence, qui est requise par les solutions audio de niveau professionnel. PulseAudio cible davantage le bureau général (où des besoins moins stricts s'appliquent). PA semble être plus lourd que JACK - être plus complexe induit plus de surcharge. Sous Linux, les deux utilisent finalement ALSA pour une sortie réelle. Avec PA, les données sont souvent acheminées d'ALSA (sortie d'application) vers PA (traitement) vers ALSA (sortie), ce qui est bien sûr plus lent que la route JACK-ALSA. En revanche, il est transparent pour les applications qui ne peuvent pas l'utiliser nativement, car il leur présente une carte son virtuelle avec une interface ALSA.

Dans tous les cas, à moins que vous n'ayez l'intention de produire de la musique ou que vous ne puissiez pas vivre sans le contrôle du volume par application (ou le transfert de son vers une autre machine via le réseau), ALSA ordinaire fonctionnera très bien, avec moins de surcharge. Certains pilotes peuvent faire du mixage matériel et même si ce n'est pas le cas, ALSA peut mixer via un plugin (sans doute pas aussi accrocheur que JACK, mais une utilisation "normale" devrait être correcte).

peterph
la source
Le lien vers l'image PA est-il mal dirigé?
NN
@NN a fonctionné pour moi, mais je l'ai changé maintenant, alors j'espère que ça ira mieux.
peterph
@Sukminder, l'erreur semble être assez aléatoire.
peterph
1
Je ne pense pas que cette réponse le coupe: premièrement, vous ne dites pas comment Jack est plus rapide, et deuxièmement, vous compliquez la réponse avec un exemple qui implique un pilote pseudo-alsa, plutôt qu'un puits d'impulsion direct. La question est assez claire, mais pour être plus direct - comment JACK est-il plus rapide à son plus rapide, par rapport à Pulse à son plus rapide?
Evan Carroll
Je suis juste fatigué d'entendre l'équipe Jack dire que c'est plus rapide parce qu'il n'a pas de poids lourd sans expliquer pourquoi le poids lourd - et, ce qui en poids lourd - rend Pulse plus lent. Cette réponse ressemble à une réaffirmation cartésienne de la prémisse de la question.
Evan Carroll
4

Jack est destiné aux applications nécessitant une faible latence, par exemple: ingénierie / création audio pour les musiciens, les vidéastes, etc.

  • pas de rééchantillonnage!
  • forcer les sources de mixage logiciel
  • des choses de routage appropriées (son, synchronisation horaire, etc.) entre les applications, les appareils, les plugins ladspa / lv2 / vst, etc.
  • peut être utilisé avec pulseaudio (bridge)

Pulse est destiné aux applications de bureau standard (ne vous attendez pas à une faible latence)

  • assurer la compatibilité avec aRts et esd
  • peut être utilisé en tant alsaque osssortie
  • forcer le rééchantillonnage logiciel
  • forcer les sources de mixage logiciel
  • upmix logiciel, downmix, etc.
  • donne une belle api pour les plugins (ex: pulseeffects )
  • routage simple (pour brancher la sortie sur un autre appareil ou application)
  • contrôle du volume par application

La couche d'espace utilisateur Alsa (pas un pilote) fait le minimum (latence entre [*])

  • [*] rééchantillonnage matériel, mixage des sources, surmixage, etc. (vous avez besoin d' une carte son adéquate pour l'utiliser, sinon le logiciel sera utilisé)
  • plugins ladspa que vous pouvez définir au format de configuration laid
  • contrôle des niveaux de volume simple / global

Dans la plupart des cas, Pulse est le meilleur choix pour les utilisateurs de bureau réguliers. Jack est le meilleur choix pour les musiciens, etc.

3ED
la source
J'ai abandonné un vote positif, mais je ne suis pas sûr que ce soit une réponse à la question autant qu'une bonne comparaison. Pourquoi PulseAudio est-il plus lent s'il ne fait pas de rééchantillonnage?
Evan Carroll le
> Pourquoi PulseAudio est-il plus lent s'il ne fait pas de rééchantillonnage?
3ED le
Ne pas? Ils font des choses dans le logiciel, par exemple: forcer le rééchantillonnage (vous pouvez choisir entre 2). Jack contourne en partie alsa. Jack est quelque chose de similaire à asio. Impulsion similaire au son des fenêtres standard de Vista vers le haut. Pas les mêmes concepts mais similaires. Pulse est génial pour les cartes son bon marché / intégrées / mal prises en charge qui ne peuvent pas faire les choses dans le matériel.
3ED le
2

Ce n'est pas vraiment une question de "vs". À première vue, nous pouvons voir qu'ils sont tous les deux des "serveurs de son". Ainsi, peut-être, conclure qu'il suffit de choisir entre eux. Ce n'est pas le cas. Comparez, par exemple, une caméra vidéo et une caméra FLIR, les deux sont des caméras. Mais, on ne fait pas que "choisir" entre eux. Ils jouent des rôles très différents, ces rôles peuvent être complémentaires, mais ils ne sont en aucune façon compétitifs. On a besoin d'une prise jack, ou d'une impulsion, ou on peut avoir besoin des deux. Le choix est déterminé par le domaine problématique, et non par des fonctionnalités comme la latence spécifique.

Quant à «FAT» ou non, le terme est utilisé de trop de façons pour être vraiment significatif. Mais, généralement, le terme FAT utilisé lorsque l'application "fait tout pour vous", plus ou moins. «Léger» a tendance à vous charger de charger la fonctionnalité que vous voulez, en choisissant éventuellement parmi une palette d'options et en jetant le reste. Pulse est un programme "big blob" auquel vous donnez quelques paramètres et, à peu près, il disparaît. Si vous en avez besoin ou non, une grande quantité de fonctionnalités est chargée lorsque vous démarrez le pouls. Jack est un tout petit programme, inutile en soi, auquel vous collez un nombre illimité de plugins, de programmes, etc. pour construire ce que vous voulez. Les programmeurs ont tendance à voir le monde du côté des ressources de la machine.

Donc, pulse est un serveur à latence variable et jack est à latence fixe. Ce sont leurs domaines de problèmes spécifiques. Si vous regardez la télévision ou écoutez de la musique sur un réseau, vous voulez sûrement du pouls. Si vous essayez de jouer de la musique électronique en direct, vous avez sûrement besoin d'une prise jack. Si vous regardez la télévision et effectuez un traitement lourd sur le ou les flux sonores, vous aurez certainement besoin des deux.

Volonté
la source
1
Assez subjectif: je pense que le serveur de son devrait suivre la conception JACK, car il est impossible de se débarrasser des latences ajoutées par le serveur. Il appartient ensuite au développeur de l'application d'utiliser des tampons plus importants pour les E / S disque ou réseau, la conversion de la fréquence d'échantillonnage, etc. Les latences au-dessus de la marque de 10 ms sont trop élevées.
user877329