Jack vs Pulseaudio: ¿cómo es más rápido?

27

Veo un montón de afirmaciones de que Jack es más rápido que Pulse y tiene menos latencia. ¿Cómo es eso así? ¿Por qué Pulse se llama a sí mismo ligero, y los chicos de Jack lo llaman gordo? ¿Alguien podría romper las partes internas de estos dos demonios a un laico?

Evan Carroll
fuente
2
Según tengo entendido, están diseñados para diferentes propósitos que podrían explicar el problema de compararlos.
NN

Respuestas:

30

Jack requiere que usted, el usuario experto, configure el servidor para determinar la latencia de procesamiento más baja posible para su máquina. (La latencia de procesamiento es el tiempo que le toma al servidor mover datos hacia / desde las aplicaciones del cliente y luego enviar / recibir el próximo "fragmento" de muestras de audio fuera del sistema). Jack entregará esos fragmentos de datos de audio a tiempo, o fallará y le dará una falta de funcionamiento del búfer (a veces llamado "abandono" o pops y clics) Si Jack sufre insuficientes constantemente, es su trabajo reiniciar el servidor con diferentes configuraciones o cambiar algo en las aplicaciones del cliente para que sean más eficientes para que pueda cumplir con sus plazos de audio. Dado que la configuración de su servidor se aplica de manera uniforme a todos los clientes, Jack es bastante útil para enrutar audio entre múltiples aplicaciones de audio y obtener resultados predecibles . (Es decir, es como conectar "jacks" en varios componentes de audio).

Pulse está diseñado para minimizar la cantidad de veces que el audio se cae debido a que el servidor no cumple con una fecha límite para enviar / recibir audio fuera del sistema. Al parecer, trata de hacer esto eligiendo un búfer grande para aplicaciones de cliente que no solicitan baja latencia de procesamiento , luego "inyectando" muestras en ese búfer para aplicaciones de clientes que tienen una fecha límite más pronto. Si intenta inyectar muestras tan pronto que no cumple con una fecha límite y causa un retraso, Pulse aumentará automáticamente la menor cantidad de tiempo que le permitirá al cliente enviar una actualización de audio al servidor. Los documentos de Pulse indican explícitamente que la latencia ultrabaja es decir, menos de 10 ms de latencia de procesamiento- No es un objetivo de diseño. Dado que Linux en sí (y probablemente su hardware) no fue diseñado para la programación de audio en tiempo real, sería capaz de creerlos.

En términos de configuración del usuario, Pulse es "ligero". (Se podría decir que Pulse tiene una latencia de configuración baja , algo que desafortunadamente muchas aplicaciones de audio de Linux aparentemente ignoran). En términos de su complejidad subyacente en comparación con Jack, Pulse es "gordo".

Para obtener una respuesta definitiva sobre cuál es más rápido, solo tendrá que obtener un dispositivo de bucle invertido y medir la latencia de ida y vuelta en su propio sistema para saber la verdad. La latencia de ida y vuelta es el tiempo que le toma a su sistema procesar audio y recibir lo que procesó nuevamente en el sistema. Hay tutoriales en línea que explican cómo hacer esto en Linux. Eso le dará una idea de lo que realmente está buscando, que es la latencia percibida : el tiempo que lleva desde el momento en que activa un evento (por ejemplo, rasguear las cuerdas de una guitarra) hasta el momento en que escucha el sonido por primera vez. eso resulta (por ejemplo, escuchar el acorde de la guitarra).

Finalmente, tenga en cuenta que Pulse y Jack se ubican por encima de ALSA en la mayoría de las distribuciones de GNU / Linux. Sé que solo preguntas por Jack vs. Pulse. Pero si está utilizando una sola aplicación de audio que se puede conectar directamente a ALSA, no hay forma concebible de que al agregar Pulse o Jack obtenga una latencia percibida más baja que ALSA solo. En ese sentido, tanto Pulse como Jack son "gordos".

tldr; ALSA solo es el más rápido, Jack es útil para encadenar múltiples aplicaciones de audio, y Pulse es probablemente el más fácil de usar cuando no te importa la latencia ultra baja. Ignore cualquier documentación o discusión que use el término latencia sin explicar qué tipo de latencia se entiende. (Desafortunadamente, tanto los documentos oficiales de Jack como las entradas de blog de Lennart sobre Pulse entran en esta categoría).

Nota : Puede haber casos extremos en los que desee utilizar una sola aplicación de audio y tenga una interfaz ALSA horrible y una interfaz Jack decente. En ese caso, usar Jack puede reducir la latencia. Pero si hablamos de aplicaciones diseñadas para minimizar la latencia, esos casos deberían ser raros. ¡Pero conecte un dispositivo loopback y pruebe mi hipótesis!

jancsika
fuente
9

En realidad son similares en ser servidores de sonido . JACK está diseñado para una respuesta en tiempo real / de baja latencia, que requieren las soluciones de audio de nivel profesional. PulseAudio se dirige más al escritorio general (donde se aplican necesidades menos estrictas). PA parece ser más pesado que JACK : ser más complejo induce más sobrecarga. En Linux, ambos usan ALSA para una salida real al final. Con PA, los datos a menudo se enrutan de ALSA (salida de la aplicación) a PA (procesamiento) a ALSA (salida), que por supuesto es más lento que la ruta JACK-ALSA. Por otro lado, es transparente para aplicaciones que no pueden usarlo de forma nativa, ya que les presenta una tarjeta de sonido virtual con una interfaz ALSA.

En cualquier caso, a menos que tenga la intención de producir música o no pueda vivir sin el control de volumen por aplicación (o reenviar el sonido a otra máquina a través de la red), ALSA simple funcionará bien, con menos sobrecarga. Algunos controladores pueden mezclar hardware e incluso si no, ALSA puede mezclar a través de un complemento (posiblemente no sea tan ágil como JACK, pero el uso "normal" debería estar bien).

Peterph
fuente
¿El enlace a la imagen PA está mal dirigido?
NN
@NN funcionó para mí, pero lo cambié ahora, así que espero que mejore.
Peter
@Sukminder el error parece ser bastante aleatorio.
Peter
1
No creo que esta respuesta sea corta: primero no dices cómo Jack es más rápido, y segundo complica la respuesta con un ejemplo que involucra un controlador pseudo-alsa, en lugar de un Pulse Sink directo. La pregunta es bastante clara, pero para ser más directo: ¿cómo es JACK más rápido en su forma más rápida en comparación con Pulse en su forma más rápida?
Evan Carroll
Estoy cansado de escuchar al equipo de Jack decir que es más rápido porque no tiene peso pesado sin explicar por qué el peso pesado, y qué en peso pesado, hace que Pulse sea más lento. Esta respuesta se siente como una reafirmación cartesiana de la premisa en la pregunta.
Evan Carroll
4

Jack es para aplicaciones que necesitan baja latencia, por ejemplo: creación / ingeniería de audio para músicos, creadores de video, etc.

  • sin remuestreo!
  • forzar fuentes de mezcla de software
  • Enrutamiento adecuado (sonido, sincronización de tiempo, etc.) entre aplicaciones, dispositivos, complementos ladspa / lv2 / vst, etc.
  • se puede usar con pulseaudio (puente)

Pulse es para aplicaciones de escritorio normales (no espere baja latencia)

  • Proporcionar compatibilidad con aRts y esd
  • se puede usar como alsay osssalida
  • forzar el remuestreo de software
  • forzar fuentes de mezcla de software
  • software upmix, downmix, etc.
  • da una buena API para complementos (por ejemplo: pulseeffects )
  • enrutamiento simple (para conectar la salida a otro dispositivo o aplicación)
  • control de volumen por aplicación

La capa de espacio de usuario de Alsa (no un controlador) hace mínimo (latencia entre [*])

  • [*] remuestreo de hardware, mezcla de fuentes, mezcla ascendente, etc. (necesita una tarjeta de sonido adecuada para usarlo, de lo contrario se utilizará el software )
  • complementos de ladspa que puede configurar en formato de configuración feo
  • control de niveles de volumen simple / global

En la mayoría de los casos, Pulse es la mejor opción para usuarios habituales de escritorio. Jack es la mejor opción para músicos, etc.

3ED
fuente
Dejé un voto a favor, pero no estoy seguro de que sea una respuesta a la pregunta tanto como una buena comparación. ¿Por qué PulseAudio es más lento si no está haciendo un nuevo muestreo?
Evan Carroll
> ¿Por qué PulseAudio es más lento si no está haciendo un nuevo muestreo?
3ED
¿No? Hacen cosas en el software, por ejemplo: muestreo forzado (puede elegir entre 2). Jack en parte pasa por alto a Alsa. Jack es algo similar a asio. Pulso similar al sonido estándar de Windows desde vista hacia arriba. No es lo mismo pero conceptos similares. Pulse es brillante para tarjetas de sonido baratas / integradas / no compatibles que no pueden hacer cosas en hardware.
3ED
2

No es realmente una cuestión de "vs". A primera vista, podemos ver que ambos son "Servidores de sonido". Por lo tanto, tal vez, concluya que uno simplemente necesita elegir entre ellos. Ese no es el caso. Compare, por ejemplo, una cámara de video y una cámara FLIR, ambas son cámaras. Pero, uno no solo "elige" entre ellos. Sirven roles muy diferentes, esos roles pueden ser complementarios, pero de ninguna manera son competitivos. Uno necesita jack, o uno necesita pulso, o uno puede necesitar ambos. La elección depende del dominio del problema, no de características como latencia específica.

En cuanto a "FAT" versus no, el término se usa de muchas maneras para ser verdaderamente significativo. Pero, en general, el término FAT se usa cuando la aplicación "lo hace todo por usted", más o menos. "Ligero" tiende a que usted cargue la funcionalidad que desea, posiblemente eligiendo entre una paleta de opciones y descartando el resto. Pulse es un programa de "gran blob" al que le da algunos parámetros y, más o menos, desaparece. Lo necesita, o no, se carga una gran cantidad de funcionalidades cuando inicia el pulso. Jack es un programa pequeño e inútil por sí mismo en el que puedes pegar cualquier cantidad de complementos, programas, etc. para construir lo que deseas. Los programadores tienden a ver el mundo desde el lado de los recursos de la máquina.

Entonces, el pulso es un servidor de latencia variable y el jack es uno de latencia fija. Esos son sus dominios problemáticos específicos. Si solo está mirando televisión o escuchando música a través de una red, seguramente querrá pulso. Si estás tratando de reproducir música electrónica en vivo, seguramente necesitas jack. Si está viendo televisión y está haciendo un procesamiento pesado en las secuencias de sonido, seguramente necesitará ambas.

Será
fuente
1
Algo subjetivo: creo que el servidor de sonido debería seguir el diseño JACK, ya que es imposible deshacerse de las latencias agregadas por el servidor. Luego, corresponde al desarrollador de la aplicación utilizar memorias intermedias más grandes para E / S de disco o red, conversión de frecuencia de muestreo, etc. Las latencias por encima de la marca de 10 ms son demasiado altas.
user877329