Jack vs Pulseaudio - come è più veloce?


27

Vedo molte affermazioni secondo cui Jack è più veloce di Pulse e ha meno latenza. Com'è così? Perché Pulse si definisce leggero e Jack lo chiama grasso? Qualcuno potrebbe abbattere gli interni di questi due demoni per un laico?


2
A quanto ho capito, sono progettati per scopi diversi che potrebbero spiegare il problema di confrontarli.
NN,

Risposte:


30

Jack richiede all'utente, l'utente competente, di configurare il server per determinare la latenza di elaborazione più bassa possibile per la propria macchina. (La latenza di elaborazione è il tempo impiegato dal server per spostare i dati da / verso le applicazioni client e quindi inviare / ricevere il successivo "blocco" di campioni audio all'esterno del sistema.) Jack consegnerà quei blocchi di dati audio in tempo, oppure fallirà e ti darà un buffer underrun (a volte chiamato "dropout", o pop e click). Se Jack ottiene costantemente underrun, il tuo compito è riavviare il server con impostazioni diverse o modificare qualcosa nelle applicazioni client per renderle più efficienti in modo da poter rispettare le scadenze audio. Poiché le impostazioni del tuo server si applicano in modo uniforme a tutti i client, Jack è abbastanza utile per instradare l'audio tra più applicazioni audio e ottenere risultati prevedibili . (Cioè, è come collegare "jack" a vari componenti audio.)

Pulse è progettato per ridurre al minimo il numero di interruzioni dell'audio a causa del mancato rispetto da parte del server di una scadenza per l'invio / la ricezione dell'audio all'esterno del sistema. Apparentemente tenta di farlo scegliendo un buffer di grandi dimensioni per le applicazioni client che non richiedono una bassa latenza di elaborazione , quindi "iniettando" campioni in quel buffer per le applicazioni client che hanno una scadenza prima. Se tenta di iniettare campioni così presto da non rispettare una scadenza e causare un superamento, Pulse aumenterà automaticamente il minor tempo possibile e consentirà a un client di inviare un aggiornamento audio al server. I documenti Pulse dichiarano esplicitamente che una latenza ultra bassa, ad esempio meno di 10 ms di latenza di elaborazione- non è un obiettivo di design. Dato che Linux stesso (e probabilmente il tuo hardware) non è stato progettato per la programmazione in tempo reale dell'audio, sarei propenso a crederci.

In termini di configurazione dell'utente, Pulse è "leggero". (Si potrebbe dire che Pulse ha una bassa latenza di configurazione , qualcosa che sfortunatamente molte app di Linux Audio sembrano ignorare.) In termini di complessità sottostante rispetto a Jack, Pulse è "grasso".

Per ottenere una risposta definitiva su quale è più veloce, devi solo ottenere un dispositivo di loopback e misurare la latenza di andata e ritorno sul tuo sistema per conoscere la verità. La latenza di andata e ritorno è il tempo impiegato dal sistema per elaborare l'audio e ricevere ciò che è stato elaborato nel sistema. Ci sono tutorial online che spiegano come farlo sotto Linux. Questo ti darà un'idea di ciò che stai effettivamente cercando, ovvero la latenza percepita - il tempo necessario dal momento in cui attivi un evento (ad esempio, strimpellando le corde di una chitarra) al momento in cui senti il ​​suono per la prima volta che risulta (ad esempio, sentire l'accordo della chitarra).

Infine, tieni presente che sia Pulse che Jack sono in cima ad ALSA sulla maggior parte delle distribuzioni GNU / Linux. So che stai solo chiedendo di Jack vs. Pulse. Ma se stai utilizzando una singola applicazione audio che può connettersi direttamente ad ALSA, non è immaginabile che l'aggiunta di Pulse o Jack ti riduca una latenza percepita inferiore rispetto a ALSA da sola. In tal senso, sia Pulse che Jack sono "grassi".

TLDR; Il solo ALSA è il più veloce, Jack è utile per concatenare più applicazioni audio e Pulse è probabilmente il più facile da usare quando non ti interessa la latenza ultra bassa. Ignora qualsiasi documentazione o discussione che utilizzi il termine latenza senza spiegare che tipo di latenza si intende. (Sfortunatamente, sia i documenti ufficiali di Jack che i post sul blog di Lennart su Pulse rientrano in questa categoria.)

Nota : potrebbero esserci casi limite in cui si desidera utilizzare una singola applicazione audio e ha un'interfaccia ALSA scadente e un'interfaccia Jack decente. In tal caso, l'utilizzo di Jack potrebbe ridurre la latenza. Ma se stiamo parlando di app progettate per ridurre al minimo la latenza, questi casi dovrebbero essere rari. Ma collegare un dispositivo di loopback e testare la mia ipotesi!


9

In realtà sono simili nell'essere server audio . JACK è progettato per una risposta in tempo reale / a bassa latenza, richiesta da soluzioni audio di livello professionale. PulseAudio è più mirato al desktop generale (dove si applicano esigenze meno rigide). La PA sembra essere più pesante di JACK - essere più complessa provoca più spese generali. Alla fine entrambi usano ALSA per un vero output. Con PA, i dati vengono spesso instradati da ALSA (output dell'applicazione) a PA (elaborazione) ad ALSA (output), che ovviamente è più lento della rotta JACK-ALSA. D'altra parte è trasparente per le applicazioni che non possono utilizzarlo in modo nativo, poiché presenta loro una scheda audio virtuale con un'interfaccia ALSA.

In ogni caso, a meno che tu non intenda produrre musica o non riesca a vivere senza il controllo del volume per applicazione (o inoltrare l'audio a un'altra macchina sulla rete), il semplice ALSA andrà bene, con un sovraccarico minore. Alcuni driver possono eseguire il mixaggio hardware e, in caso contrario, ALSA può mixare tramite un plug-in (probabilmente non è scattante come JACK, ma l'uso "normale" dovrebbe essere ok).


Il collegamento all'immagine PA è indirizzato in modo errato?
NN,

@NN ha funzionato per me, ma l'ho cambiato ora, quindi spero che migliorerà.
peterph

@Sukminder l'errore sembra essere abbastanza casuale.
peterph

1
Non credo che questa risposta la tagli: prima non dici quanto Jack sia più veloce, e in secondo luogo contorti la risposta con un esempio che coinvolge un driver pseudo-alsa, piuttosto che un Pulse Sink diretto. La domanda è piuttosto chiara, ma per essere più diretti: come è JACK più veloce al suo più veloce, rispetto a Pulse al suo più veloce?
Evan Carroll,

Sono solo stanco di sentire il team di Jack dire che è più veloce perché non ha pesi massimi senza spiegare perché i pesi massimi - e, cosa nei pesi massimi - rende Pulse più lento. Questa risposta sembra una riaffermazione cartesiana della premessa nella domanda.
Evan Carroll,

4

Jack è per le applicazioni che richiedono una bassa latenza, ad es. Enginering / creazione audio per musicisti, produttori di video, ecc

  • nessun ricampionamento!
  • forzare il software che mescola le fonti
  • routing corretto (suono, sincronizzazione, ecc.) tra app, dispositivi, plugin ladspa / lv2 / vst, ecc
  • può essere utilizzato con pulseaudio (bridge)

Pulse è per le normali applicazioni desktop (non aspettarti una bassa latenza)

  • fornire compatibilità con aRts ed esd
  • può essere usato come alsae ossoutput
  • forzare il ricampionamento del software
  • forzare il software che mescola le fonti
  • software upmix, downmix, ecc
  • dà una bella API per i plugin (ad esempio: pulseeffects )
  • routing semplice (per collegare l'output a un altro dispositivo o app)
  • controllo del volume per app

Alsa userspace layer (non un driver) fa il minimo (latenza tra [*])

  • [*] ricampionamento hardware, mixaggio di sorgenti, upmix, ecc. (per utilizzarlo è necessaria una scheda audio adeguata , altrimenti verrà utilizzato il software )
  • plugin ladspa che puoi impostare in un brutto formato di configurazione
  • controllo livelli volume semplice / globale

Nella maggior parte dei casi Pulse è la scelta migliore per gli utenti desktop regolari. Jack è la scelta migliore per musicisti, ecc.


Ho lasciato cadere un voto, ma non sono sicuro che sia una risposta alla domanda quanto un buon confronto. Perché PulseAudio è più lento se non esegue il ricampionamento?
Evan Carroll,

> Perché PulseAudio è più lento se non esegue il ricampionamento?
3ED

Non? Fanno cose nel software, ad esempio: ricampionamento forzato (puoi scegliere tra 2). Jack ignora in parte alsa. Jack è qualcosa di simile ad asio. Impulso simile al suono standard di Windows da Vista verso l'alto. Non concetti uguali ma simili. Pulse è eccezionale per schede audio economiche / integrate / non supportate in modo adeguato che non possono fare cose nell'hardware.
3ED

2

Non è davvero una questione di "vs". A prima vista possiamo vedere che sono entrambi "Sound Server". Quindi, forse, concludere che bisogna semplicemente scegliere tra di loro. Non è così. Confronta, ad esempio, una videocamera e una videocamera FLIR, entrambe sono videocamere. Ma non si "sceglie" solo tra di loro. Servono ruoli molto diversi, quei ruoli possono essere complimenti, ma non sono in alcun modo competitivi. Uno ha bisogno di jack, o uno ha bisogno di impulsi, o uno potrebbe aver bisogno di entrambi. La scelta è guidata dal dominio problematico, non da funzionalità come la latenza specifica.

Per quanto riguarda "FAT" vs. no, il termine è usato in troppi modi per essere veramente significativo. Ma, generalmente, il termine FAT usato quando l'applicazione "fa tutto per te", più o meno. "Leggero" tende a farti caricare tutta la fucntionallity che desideri, possibilmente scegliendo da un pallet di opzioni e scartando il resto. Pulse è un programma "big blob" al quale si danno alcuni parametri e, praticamente, si avvia. Ne hai bisogno o no, una grande quantità di funzionalità viene caricata quando inizi l'impulso. Jack è un programma piccolo e inutile da solo, su cui incollare un numero qualsiasi di plugin, programmi, ecc. Per costruire ciò che vuoi. I programmatori tendono a vedere il mondo dal lato delle risorse della macchina.

Quindi, pulse è un server a latenza variabile e jack è a latenza fissa. Questi sono i loro domini problematici specifici. Se stai solo guardando la TV o ascolti musica su una rete, sicuramente vuoi il polso. Se stai provando a suonare musica elettronica dal vivo, avrai sicuramente bisogno di Jack. Se stai guardando la TV e stai eseguendo pesanti elaborazioni sui flussi audio, avrai sicuramente bisogno di entrambi.


1
Un po 'soggettivo: penso che il server audio dovrebbe seguire il design JACK, poiché è impossibile sbarazzarsi di eventuali latenze aggiunte dal server. Spetta quindi allo sviluppatore dell'applicazione utilizzare buffer più grandi per I / O su disco o di rete, conversione della frequenza di campionamento ecc. Le latenze al di sopra del segno di 10 ms sono troppo alte.
user877329
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.