Jack vs Pulseaudio - como é mais rápido?

23

Eu vejo um monte de afirmações de que o Jack é mais rápido que o Pulse e tem menos latência. Como isso é assim? Por que o Pulse chama a si mesmo de leve, e os caras do Jack chamam de gordo? Alguém poderia quebrar o interior desses dois daemons para um leigo?

    
por Evan Carroll 22.03.2013 / 08:27

3 respostas

23

Jack exige que você - o usuário experiente - configure o servidor para determinar a latência de processamento mais baixa possível para a sua máquina. (A 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 "fragmento" de amostras de áudio fora do sistema.) Jack entrega esses blocos de dados de áudio a tempo ou ele falhará e dará a você um buffer underrun (às vezes chamado de "dropout", ou pops e cliques ). Se o Jack consistentemente sofre underruns, é seu trabalho reiniciar o servidor com configurações diferentes ou alterar algo no (s) aplicativo (s) do cliente para torná-lo mais eficiente, para que você possa cumprir seus prazos de áudio. Como as configurações do servidor se aplicam uniformemente a todos os clientes, o Jack é bastante útil para rotear áudio entre vários aplicativos de áudio e obter resultados previsíveis . (Por exemplo, é como ligar "tomadas" em vários componentes de áudio.)

O Pulse foi projetado para minimizar o número de vezes que o áudio é interrompido devido ao servidor não cumprir um prazo para envio / recebimento de áudio fora do sistema. Ele aparentemente tenta fazer isso escolhendo um buffer grande para aplicativos clientes que não requerem baixa latência de processamento , depois "injetando" amostras nesse buffer para aplicativos de clientes que possuem um prazo mais rápido. Se ele tentar injetar amostras tão cedo que não cumpra um prazo e cause um déficit, o Pulse aumentará automaticamente o menor tempo possível para que um cliente envie uma atualização de áudio para o servidor. Documentos de pulso afirmam explicitamente que a latência baixa ultra - digamos, menos de 10 ms de latência de processamento - não é uma meta de design. Dado que o próprio Linux (e provavelmente o seu hardware) não foi projetado para agendamento em tempo real de áudio, eu estaria apto a acreditar neles.

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

Para obter uma resposta definitiva sobre o que é mais rápido, você só precisará obter um dispositivo de loopback e medir a latência de ida e volta em 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 é processado de volta no sistema. Existem tutoriais on-line que explicam como fazer isso no Linux. Isso lhe dará uma idéia do que você realmente quer, qual é a latência percebida - o tempo que leva do momento em que você dispara um evento (por exemplo, dedilhando as cordas de uma guitarra) no momento em que você ouvir o som resultante (por exemplo, ouvir o acorde da guitarra).

Finalmente, tenha em mente que tanto o Pulse quanto o Jack estão no 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 é possível que a adição do Pulse ou do Jack reduza a latência percebida em relação à ALSA. 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 ser usado quando você não se importa com latência ultrabaixa. Ignore qualquer documentação ou discussões que usem o termo latência sem explicar que tipo de latência significa. (Infelizmente, tanto os documentos oficiais de Jack quanto as entradas de Lennart no blog se enquadram nessa categoria.)

Nota : Pode haver casos extremos em que você deseja usar um único aplicativo de áudio e ele tem uma interface ALSA crummy e uma interface Jack decente. Nesse caso, usando Jack você pode obter menor 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!

    
por 28.01.2015 / 19:48
9

Eles são similares em ser servidores de som . O JACK foi projetado para resposta em tempo real / baixa latência, exigida por soluções de áudio de nível profissional. O PulseAudio é voltado mais para a área de trabalho geral (onde as necessidades menos rigorosas se aplicam). PA parece ser mais pesado que JACK - ser 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 de ALSA (saída de aplicativo) para PA (processamento) para ALSA (saída), o que é mais lento que a rota JACK-ALSA. Por outro lado, é transparente para aplicativos que não podem usá-lo nativamente, já que apresenta uma placa de som virtual com uma interface ALSA.

Em qualquer caso, a menos que você pretenda produzir música ou não possa viver sem o controle de volume por aplicativo (ou encaminhando o som para outra máquina pela rede), o ALSA simples funcionará bem, com menos sobrecarga. Alguns drivers podem fazer mixagem de hardware e, mesmo que não, o ALSA pode mixar através de um plugin (sem dúvida, não é tão rápido quanto o JACK, mas o uso "normal" deve ser ok).

    
por 22.03.2013 / 12:00
2

Não é realmente uma questão de "vs". À primeira vista, podemos ver que ambos são "Servidores de Som". Assim, talvez, conclua que basta 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, um não apenas "escolhe" 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 jack, ou um precisa de pulso, ou um pode precisar de ambos. A escolha é impulsionada pelo domínio do problema, e não por características 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 para você", mais ou menos. "Leve" tende a você conseguir carregar a funcionalidade desejada, possivelmente escolhendo entre uma palete de opções, e descartando o resto. O Pulse é um programa de "big blob" para o qual você dá alguns parâmetros e, praticamente, vai embora. 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ê cole qualquer número de plugins, programas, etc. para construir o que você quer. 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 conector é um de latência fixa. Esses são seus domínios de problema específicos. Se você está apenas assistindo TV ou ouvindo música em uma rede, certamente quer pulsar. Se você está tentando tocar música eletrônica ao vivo, certamente precisa de jack. Se você está assistindo TV e fazendo algum processamento pesado na (s) transmissão (ões) de som, certamente precisará dos dois.

    
por 09.06.2016 / 21:50