Jack vs Pulseaudio - bagaimana bisa lebih cepat?


27

Saya melihat banyak klaim bahwa Jack lebih cepat dari Pulse dan memiliki latensi lebih sedikit. Bagaimana bisa begitu? Mengapa Pulse menyebut dirinya ringan, dan orang-orang Jack menyebutnya gemuk? Adakah yang bisa menghancurkan bagian dalam dari dua daemon ini menjadi orang awam?


2
Ketika saya memahaminya, mereka dirancang untuk tujuan berbeda yang mungkin menjelaskan masalah membandingkannya.
NN

Jawaban:


30

Jack mengharuskan Anda - pengguna yang berpengetahuan - untuk mengkonfigurasi server untuk menentukan latensi pemrosesan serendah mungkin untuk mesin Anda. (Memproses latensi adalah waktu yang diperlukan server untuk memindahkan data ke / dari aplikasi klien dan kemudian mengirim / menerima "potongan" sampel audio berikutnya di luar sistem.) Jack akan mengirimkan potongan-potongan data audio tersebut tepat waktu, atau itu akan gagal dan memberi Anda buffer underrun (kadang-kadang disebut "putus", atau muncul dan klik). Jika Jack secara konsisten mendapatkan underruns maka tugas Anda adalah me-restart server dengan pengaturan yang berbeda, atau mengubah sesuatu di aplikasi klien untuk membuatnya lebih efisien sehingga Anda dapat memenuhi tenggat waktu audio Anda. Karena pengaturan server Anda berlaku seragam untuk semua klien, Jack cukup berguna untuk merutekan audio di antara beberapa aplikasi audio dan mendapatkan hasil yang dapat diprediksi . (Yaitu, itu seperti memasukkan "jack" ke berbagai komponen audio.)

Pulse dirancang untuk meminimalkan berapa kali audio keluar karena server tidak memenuhi tenggat waktu untuk mengirim / menerima audio di luar sistem. Tampaknya mencoba melakukan ini dengan memilih buffer besar untuk aplikasi klien yang tidak meminta latensi pemrosesan rendah , kemudian "menyuntikkan" sampel ke buffer itu untuk aplikasi klien yang memiliki tenggat waktu lebih cepat. Jika mencoba menyuntikkan sampel dengan sangat cepat sehingga tidak memenuhi tenggat waktu dan menyebabkan underrun, Pulse akan secara otomatis menambah jumlah waktu terpendek yang memungkinkan klien mengirim pembaruan audio ke server. Dokumen pulsa secara eksplisit menyatakan bahwa latensi sangat rendah - katakanlah, kurang dari 10 ms latensi pemrosesan- bukan tujuan desain. Mengingat bahwa Linux itu sendiri (dan mungkin perangkat keras Anda) tidak dirancang untuk penjadwalan audio secara waktu nyata, saya akan cenderung mempercayainya.

Dalam hal konfigurasi pengguna, Pulse adalah "ringan". (Orang mungkin mengatakan Pulse memiliki latensi konfigurasi rendah , sesuatu yang sayangnya banyak aplikasi Audio Linux tampaknya mengabaikan.) Dalam hal kompleksitas yang mendasarinya dibandingkan dengan Jack, Pulse adalah "gemuk".

Untuk mendapatkan jawaban pasti yang lebih cepat, Anda hanya perlu mendapatkan perangkat loopback dan mengukur latensi bolak- balik pada sistem Anda sendiri untuk mengetahui kebenarannya. Latensi pulang-pergi adalah waktu yang diperlukan sistem Anda untuk memproses audio dan menerima apa yang diproses kembali ke dalam sistem. Ada tutorial online yang menjelaskan cara melakukan ini di Linux. Itu akan memberi Anda gambaran tentang apa yang sebenarnya Anda kejar, yaitu latensi yang dirasakan - waktu yang diperlukan sejak Anda memicu suatu peristiwa (misalnya, memetik senar gitar) hingga saat pertama kali Anda mendengar suara yang menghasilkan (misalnya, mendengarkan akord gitar).

Akhirnya, ingatlah bahwa baik Pulse maupun Jack berada di atas ALSA di sebagian besar distribusi GNU / Linux. Saya tahu Anda hanya bertanya tentang Jack vs. Pulse. Tetapi jika Anda menggunakan satu aplikasi audio yang dapat terhubung langsung ke ALSA, tidak ada cara yang mungkin bahwa menambahkan Pulse atau Jack akan membuat Anda merasakan latensi yang lebih rendah daripada ALSA saja. Karena itu, baik Pulse maupun Jack "gemuk".

tldr; ALSA sendiri adalah yang tercepat, Jack berguna untuk menggabungkan beberapa aplikasi audio, dan Pulse mungkin paling mudah digunakan ketika Anda tidak peduli dengan latensi yang sangat rendah. Abaikan dokumentasi atau diskusi apa pun yang menggunakan istilah latensi tanpa menjelaskan jenis latensi yang dimaksud. (Sayangnya, baik entri resmi Jack docs dan blog Lennart tentang Pulse termasuk dalam kategori ini.)

Catatan : Mungkin ada kasus tepi di mana Anda ingin menggunakan aplikasi audio tunggal dan memiliki antarmuka ALSA payah dan antarmuka Jack yang layak. Dalam hal itu menggunakan Jack dapat membuat Anda latensi lebih rendah. Tetapi jika kita berbicara tentang aplikasi yang dirancang untuk meminimalkan latensi, kasus-kasus tersebut seharusnya jarang. Tetapi lakukan menghubungkan perangkat loopback dan menguji hipotesis saya!


9

Mereka sebenarnya mirip menjadi server suara . JACK dirancang untuk respons waktu nyata / latensi rendah, yang diperlukan oleh solusi audio tingkat profesional. PulseAudio lebih ditargetkan pada desktop umum (di mana kebutuhan yang kurang ketat berlaku) PA tampaknya lebih berat daripada JACK - menjadi lebih kompleks menyebabkan lebih banyak overhead. Di Linux keduanya menggunakan ALSA untuk output nyata pada akhirnya. Dengan PA, data sering dialihkan dari ALSA (output aplikasi) ke PA (pemrosesan) ke ALSA (output), yang tentu saja lebih lambat dari rute JACK-ALSA. Di sisi lain itu transparan untuk aplikasi yang tidak dapat menggunakannya secara asli, karena menyajikannya dengan kartu suara virtual dengan antarmuka ALSA.

Bagaimanapun, kecuali Anda berniat untuk menghasilkan musik atau tidak dapat hidup tanpa per kontrol volume aplikasi (atau meneruskan suara ke komputer lain melalui jaringan), ALSA biasa akan baik-baik saja, dengan lebih sedikit overhead. Beberapa driver dapat melakukan pencampuran perangkat keras dan bahkan jika tidak, ALSA dapat mencampur melalui plugin (bisa dibilang tidak tajam seperti JACK, tetapi penggunaan "normal" harusnya ok).


Apakah tautan ke gambar PA salah arah?
NN

@NN bekerja untuk saya, tapi saya mengubahnya sekarang, jadi semoga akan lebih baik.
peterph

@Sukminder kesalahannya tampaknya cukup acak.
peterph

1
Saya tidak berpikir jawaban ini memotongnya: pertama Anda tidak mengatakan bagaimana Jack lebih cepat, dan kedua Anda melilit jawabannya dengan contoh yang melibatkan driver pseudo-alsa, daripada Pulse Sink langsung. Pertanyaannya cukup jelas, tetapi untuk lebih langsung - bagaimana JACK lebih cepat pada yang tercepat, dibandingkan dengan Pulse pada yang tercepat?
Evan Carroll

Saya hanya bosan mendengar tim Jack mengatakan itu lebih cepat karena tidak memiliki kelas berat tanpa menjelaskan mengapa kelas berat - dan, apa yang ada di kelas berat - membuat Pulse lebih lambat. Jawaban ini terasa seperti penegasan Cartesian tentang premis dalam pertanyaan.
Evan Carroll

4

Jack adalah untuk aplikasi yang membutuhkan latensi rendah, misalnya: pembuatan / pembuatan audio untuk musisi, pembuat video, dll

  • tidak ada resampling!
  • memaksa sumber pencampuran perangkat lunak
  • hal perutean yang benar (suara, sinkronisasi waktu, dll) antara aplikasi, perangkat, plugin ladspa / lv2 / vst, dll
  • dapat digunakan dengan pulseaudio (jembatan)

Pulsa untuk aplikasi desktop biasa (jangan berharap latensi rendah)

  • memberikan kompatibilitas dengan aRts dan ESD
  • dapat digunakan sebagai alsadan osskeluaran
  • memaksa perangkat lunak resampling
  • memaksa sumber pencampuran perangkat lunak
  • perangkat lunak upmix, downmix, dll
  • memberikan api bagus untuk plugin (misalnya: efek pulsee )
  • perutean sederhana (untuk menyambungkan output ke perangkat atau aplikasi lain)
  • kontrol volume per aplikasi

Alsa userspace layer (bukan driver) melakukan minimum (latensi antara [*])

  • [*] resampling perangkat keras, sumber pencampuran, upmixing, dll (Anda perlu kartu suara yang memadai untuk menggunakannya, jika tidak perangkat lunak akan digunakan)
  • plugin ladspa yang dapat Anda atur dalam format konfigurasi yang jelek
  • kontrol tingkat volume sederhana / global

Dalam kebanyakan kasus, Pulse adalah pilihan terbaik untuk pengguna desktop biasa. Jack adalah pilihan terbaik untuk musisi, dll.


Saya menjatuhkan upvote, tetapi saya tidak yakin itu jawaban untuk pertanyaan sebanyak perbandingan yang baik. Mengapa PulseAudio lebih lambat jika tidak melakukan pengambilan sampel ulang?
Evan Carroll

> Mengapa PulseAudio lebih lambat jika tidak melakukan pengambilan sampel ulang?
3ED

Tidak? Mereka melakukan hal-hal dalam perangkat lunak misalnya: resampling paksa (Anda dapat memilih antara 2). Jack sebagian memotong alsa. Jack adalah sesuatu yang mirip dengan asio. Pulsa mirip dengan suara jendela standar dari vista ke atas. Bukan konsep yang sama tetapi serupa. Pulse brilian untuk kartu suara yang murah / terintegrasi / tidak didukung dengan benar yang tidak dapat melakukan hal-hal dalam perangkat keras.
3ED

2

Ini sebenarnya bukan pertanyaan "vs". Pada blush on pertama kita bisa melihat mereka berdua "Server Suara". Jadi, mungkin, simpulkan seseorang hanya perlu memilih di antara mereka. Bukan itu masalahnya. Bandingkan, misalnya, kamera video dan kamera FLIR, keduanya adalah kamera. Tapi, orang tidak hanya "memilih" di antara mereka. Mereka melayani peran yang sangat berbeda, peran itu bisa menjadi pujian, tetapi mereka tidak kompetitif. Seseorang perlu jack, atau satu membutuhkan pulsa, atau satu mungkin membutuhkan keduanya. Pilihan didorong oleh domain masalah, bukan fitur-alities seperti latensi tertentu.

Adapun "FAT" vs tidak, istilah ini digunakan dalam banyak cara untuk benar-benar bermakna. Tetapi, secara umum, istilah FAT digunakan ketika aplikasi "melakukan semuanya untuk Anda", lebih atau kurang. "Ringan" cenderung ke arah Anda untuk memuat fucntionallity yang Anda inginkan, mungkin memilih dari palet pilihan, dan membuang sisanya. Pulse adalah program "gumpalan besar" yang Anda berikan beberapa parameter dan, cukup banyak, segera. Membutuhkannya, atau tidak, sejumlah besar fungsionalitas dimuat ketika Anda mulai pulsa. Jack adalah sebuah program kecil, dan tidak berguna, yang Anda gunakan untuk menempel pada sejumlah plugin, program, dll untuk membangun apa yang Anda inginkan. Programmer cenderung memandang dunia dari sisi sumber daya mesin.

Jadi, pulsa adalah server latensi variabel dan jack diperbaiki satu. Itu adalah domain masalah khusus mereka. Jika Anda hanya menonton TV, atau mendengarkan musik melalui jaringan, Anda pasti menginginkan denyut nadi. Jika Anda mencoba memainkan musik elektronik live, Anda pasti perlu jack. Jika Anda menonton TV dan melakukan pemrosesan berat pada aliran suara, Anda pasti membutuhkan keduanya.


1
Agak subjektif: Saya pikir server suara harus mengikuti desain JACK, karena tidak mungkin untuk menyingkirkan latensi yang ditambahkan oleh server. Kemudian tergantung pada pengembang aplikasi untuk menggunakan buffer yang lebih besar untuk disk atau I / O jaringan, konversi laju sampel, dll. Latensi di atas tanda 10 ms adalah hingga tinggi.
user877329
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.