Jack vs Pulseaudio - como é mais rápido?


27

Vejo várias alegações de que Jack é mais rápido que o Pulse e tem menos latência. Como é isso? Por que o Pulse chama a si mesmo de leve, e os caras do Jack chamam de gordo? Alguém poderia dividir as partes internas desses dois daemons a um leigo?


2
Pelo que entendi, eles são projetados para diferentes propósitos, o que pode explicar o problema de compará-los.
NN

Respostas:


30

Jack exige que você - o usuário experiente - configure o servidor para determinar a menor latência de processamento possível para sua máquina. (Latência de processamento é o tempo que o servidor leva para mover dados de / para os aplicativos clientes e depois enviar / receber o próximo "pedaço" de amostras de áudio fora do sistema.) Jack entregará esses pedaços de dados de áudio a tempo, ou ele falhará e causará uma falha no buffer (às vezes chamado de "abandono" ou pop e cliques) Se Jack estiver constantemente com falhas de desempenho, é seu trabalho reiniciar o servidor com configurações diferentes ou alterar algo nos aplicativos clientes para torná-los mais eficientes, para que você possa cumprir seus prazos de áudio. Como as configurações do servidor se aplicam uniformemente a todos os clientes, Jack é bastante útil para rotear o áudio entre vários aplicativos de áudio e obter resultados previsíveis . (Ou seja, é como conectar "tomadas" em vários componentes de áudio.)

O Pulse foi projetado para minimizar o número de vezes que o áudio cai devido ao servidor não cumprir um prazo para enviar / receber áudio para fora do sistema. Aparentemente, ele tenta fazer isso escolhendo um buffer grande para aplicativos clientes que não solicitam baixa latência de processamento e , em seguida, "injetando" amostras nesse buffer para aplicativos clientes com prazo mais curto. Se tentar injetar amostras tão cedo que perder um prazo e causar uma falha, o Pulse aumentará automaticamente o menor tempo possível para permitir que um cliente envie uma atualização de áudio ao servidor. Os documentos do Pulse afirmam explicitamente que a latência é extremamente baixa - digamos, menos de 10ms de latência de processamento- não é um objetivo de design. Como o próprio Linux (e provavelmente o seu hardware) não foi projetado para agendamento de áudio em tempo real, eu acreditaria neles.

Em termos de configuração do usuário, o Pulse é "leve". (Pode-se dizer que o Pulse possui baixa latência de configuração , algo que infelizmente muitos aplicativos de áudio do Linux aparentemente desconsideram.) Em termos de complexidade subjacente, em comparação com Jack, o Pulse é "gordo".

Para obter uma resposta definitiva e mais rápida, você só precisa obter um dispositivo de loopback e medir a latência de ida e volta no seu próprio sistema para saber a verdade. Latência de ida e volta é o tempo que o sistema leva para processar o áudio e receber o que foi processado de volta no sistema. Existem tutoriais online que explicam como fazer isso no Linux. Isso lhe dará uma idéia do que realmente está buscando, que é a latência percebida - o tempo que leva desde o momento em que você aciona um evento (por exemplo, tocando as cordas de um violão) até o momento em que você ouve o som pela primeira vez. que resulta (por exemplo, ouvir o acorde da guitarra).

Por fim, lembre-se de que Pulse e Jack estão no topo da ALSA na maioria das distribuições GNU / Linux. Eu sei que você está apenas perguntando sobre Jack vs. Pulse. Mas se você estiver usando um único aplicativo de áudio que possa se conectar diretamente ao ALSA, não há maneira concebível de que a adição de Pulse ou Jack apresente menor latência percebida do que o ALSA sozinho. Nesse sentido, tanto Pulse quanto Jack são "gordos".

tldr; Somente o ALSA é o mais rápido, o Jack é útil para encadear vários aplicativos de áudio e o Pulse é provavelmente mais fácil de usar quando você não se importa com latência ultra baixa. Ignore qualquer documentação ou discussão que use o termo latência sem explicar o tipo de latência. (Infelizmente, os documentos oficiais de Jack e as entradas de blog de Lennart sobre o Pulse se enquadram nessa categoria.)

Nota : Pode haver casos extremos em que você deseja usar um único aplicativo de áudio e ele possui uma interface ALSA ruim e uma interface Jack decente. Nesse caso, usar Jack pode reduzir a latência. Mas se estamos falando de aplicativos projetados para minimizar a latência, esses casos devem ser raros. Mas conecte um dispositivo de loopback e teste minha hipótese!


9

Eles são realmente semelhantes em serem servidores de som . O JACK foi projetado para resposta em tempo real / baixa latência, exigida pelas soluções de áudio de nível profissional. O PulseAudio é voltado mais para a área de trabalho geral (onde necessidades menos estritas se aplicam). O PA parece ser mais pesado que o JACK - sendo mais complexo induz mais sobrecarga. No Linux, ambos usam ALSA para saída real no final. Com o PA, os dados geralmente são roteados do ALSA (saída do aplicativo) para o PA (processamento) para o ALSA (saída), o que é obviamente mais lento que a rota JACK-ALSA. Por outro lado, é transparente para aplicativos que não podem ser usados ​​de forma nativa, pois apresenta uma placa de som virtual com uma interface ALSA.

De qualquer forma, a menos que você pretenda produzir música ou não possa viver sem o controle de volume por aplicativo (ou encaminhar o som para outra máquina pela rede), o ALSA simples funcionará perfeitamente, com menos sobrecarga. Alguns drivers podem fazer mixagem de hardware e, mesmo se não, o ALSA pode mixar através de um plug-in (sem dúvida não tão ágil quanto o JACK, mas o uso "normal" deve ser bom).


O link para a imagem PA foi mal direcionado?
NN

A @NN funcionou para mim, mas eu mudei agora, então espero que melhore.
Peterph

@ Sukminder, o erro parece ser bastante aleatório.
Peterph

11
Eu não acho que essa resposta seja correta: primeiro você não diz como Jack é mais rápido e, depois, convolui a resposta com um exemplo que envolve um driver de pseudo-alsa, em vez de um dissipador de pulso direto. A pergunta é bem clara, mas para ser mais direta - como o JACK é mais rápido no seu mais rápido, comparado ao Pulse no seu mais rápido?
Evan Carroll

Estou cansado de ouvir a equipe de Jack dizer que é mais rápido porque não tem peso pesado, sem explicar por que o peso pesado - e o que o peso pesado - torna o Pulse mais lento. Essa resposta parece uma reafirmação cartesiana da premissa na pergunta.
Evan Carroll

4

Jack é para aplicativos que precisam de baixa latência, por exemplo: engenharia / criação de áudio para músicos, criadores de vídeo, etc.

  • sem reamostragem!
  • forçar fontes de mistura de software
  • coisas de roteamento adequadas (som, sincronização de tempo, etc.) entre aplicativos, dispositivos, plugins ladspa / lv2 / vst, etc.
  • pode ser usado com pulseaudio (bridge)

O Pulse é para aplicativos de desktop comuns (não espere baixa latência)

  • fornecer compatibilidade com aRts e esd
  • pode ser usado como alsae osssaída
  • forçar a reamostragem de software
  • forçar fontes de mistura de software
  • upmix de software, downmix, etc
  • dá uma boa API para plugins (por exemplo: pulseeffects )
  • roteamento simples (para conectar a saída a outro dispositivo ou aplicativo)
  • controle de volume por aplicativo

A camada de espaço de usuário Alsa (não um driver) faz o mínimo (latência entre [*])

  • [*] reamostragem de hardware, fontes de mixagem, upmixing, etc (você precisa de uma placa de som adequada para usá-la, caso contrário, o software será usado)
  • plugins ladspa que você pode definir no formato feio de configuração
  • controle de níveis de volume simples / global

Na maioria dos casos, o Pulse é a melhor opção para usuários comuns de desktop. Jack é a melhor escolha para músicos, etc.


Fiz uma votação inicial, mas não tenho certeza de que seja uma resposta para a pergunta, mas uma boa comparação. Por que o PulseAudio é mais lento se não está realizando nova amostragem?
Evan Carroll

> Por que o PulseAudio é mais lento se não está realizando nova amostragem?
3ED 27/02

Não? Eles fazem coisas no software, por exemplo: forçar a reamostragem (você pode escolher entre 2). Jack ignora parcialmente Alsa. Jack é algo semelhante ao asio. Pulso semelhante ao som padrão do Windows, da vista para cima. Não são os mesmos, mas conceitos semelhantes. O Pulse é brilhante para placas de som baratas / integradas / não suportadas adequadamente, que não podem fazer coisas no hardware.
3ED 27/02

2

Não é realmente uma questão de "vs". À primeira vista, podemos ver que ambos são "servidores de som". Assim, talvez, conclua-se que é preciso simplesmente escolher entre eles. Esse não é o caso. Compare, por exemplo, uma câmera de vídeo e uma câmera FLIR, ambas são câmeras. Mas, não basta "escolher" entre eles. Eles desempenham papéis muito diferentes; esses papéis podem ser elogios, mas não são de forma alguma competitivos. Um precisa de tomada, ou um pulso, ou um pode precisar de ambos. A escolha é orientada pelo domínio do problema, não por alianças de recursos como latência específica.

Quanto a "FAT" versus não, o termo é usado de muitas maneiras para ser verdadeiramente significativo. Mas, geralmente, o termo FAT usado quando o aplicativo "faz tudo por você", mais ou menos. "Leve" tende a você carregar a funcionalidade desejada, possivelmente escolhendo entre um palete de opções e descartando o resto. O Pulse é um programa de "grande bolha", para o qual você fornece alguns parâmetros e, praticamente, vai lá. Precisa ou não, uma grande quantidade de funcionalidade é carregada quando você inicia o pulso. Jack é um programa pequeno e inútil, por si só, no qual você cola vários plugins, programas etc. para criar o que deseja. Os programadores tendem a ver o mundo do lado dos recursos da máquina.

Portanto, o pulso é um servidor de latência variável e o jack é o de latência fixa. Esses são os domínios de problemas específicos. Se você está apenas assistindo TV ou ouvindo música em uma rede, certamente deseja pulso. Se você está tentando tocar música eletrônica ao vivo, certamente precisa de um jack. Se você estiver assistindo TV e fazendo algum processamento pesado no (s) fluxo (s) de som, certamente precisará dos dois.


11
Um pouco subjetivo: acho que o servidor de som deve seguir o design do JACK, pois é impossível livrar-se de todas as latências adicionadas pelo servidor. Cabe ao desenvolvedor do aplicativo usar buffers maiores para E / S de disco ou rede, conversão de taxa de amostragem etc. As latências acima da marca de 10 ms são altas.
user877329
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.