Jack vs Pulseaudio - เร็วแค่ไหน?


27

ฉันเห็นเครือข่ายอ้างว่าแจ็คเร็วกว่า Pulse และมีความหน่วงน้อยกว่า เป็นเช่นนั้นได้อย่างไร ทำไม Pulse ถึงเรียกตัวเองว่าเบาและพวกแจ็คเรียกมันว่าอ้วน? ทุกคนสามารถทำลาย internals ของ daemons ทั้งสองนี้ให้เป็นคนธรรมดาได้หรือไม่?


2
เมื่อฉันเข้าใจพวกเขาพวกมันถูกออกแบบมาเพื่อจุดประสงค์ที่แตกต่างกันซึ่งอาจอธิบายปัญหาของการเปรียบเทียบพวกเขา
NN

คำตอบ:


30

แจ็คต้องการให้คุณ - ผู้ใช้ที่มีความรู้ - เพื่อกำหนดค่าเซิร์ฟเวอร์เพื่อกำหนดเวลาประมวลผลแฝงที่เป็นไปได้ต่ำที่สุดสำหรับเครื่องของคุณ (เวลาแฝงในการประมวลผลคือเวลาที่เซิร์ฟเวอร์ใช้ในการย้ายข้อมูลไปยัง / จากแอปพลิเคชันไคลเอนต์จากนั้นส่ง / รับ "ตัวอย่าง" ของตัวอย่างเสียงนอกระบบถัดไป) แจ็คจะส่งข้อมูลเสียงเหล่านั้นตรงเวลาหรือ มันจะล้มเหลวและให้บัฟเฟอร์แก่คุณ (บางครั้งเรียกว่า "dropout" หรือpopsและคลิก) หากแจ็คประสบความสำเร็จอย่างต่อเนื่องคุณควรเริ่มต้นเซิร์ฟเวอร์ใหม่ด้วยการตั้งค่าที่แตกต่างกันหรือเปลี่ยนแปลงบางอย่างในแอปพลิเคชันไคลเอนต์เพื่อให้มีประสิทธิภาพมากขึ้น เนื่องจากการตั้งค่าเซิร์ฟเวอร์ของคุณใช้กับลูกค้าทุกคนอย่างสม่ำเสมอแจ็คจึงค่อนข้างมีประโยชน์สำหรับการกำหนดเส้นทางเสียงในแอปพลิเคชั่นเสียงหลายรายการและรับผลลัพธ์ที่สามารถคาดการณ์ได้ (นั่นคือมันเหมือนกับการเสียบ "แจ็ค" เข้ากับส่วนประกอบเสียงต่างๆ)

Pulse ถูกออกแบบมาเพื่อลดจำนวนครั้งที่เสียงจะลดลงเนื่องจากเซิร์ฟเวอร์ไม่ตรงตามกำหนดเวลาในการส่ง / รับเสียงนอกระบบ เห็นได้ชัดว่าพยายามทำสิ่งนี้โดยเลือกบัฟเฟอร์ขนาดใหญ่สำหรับแอปพลิเคชันไคลเอนต์ซึ่งไม่ได้ร้องขอเวลาในการประมวลผลต่ำดังนั้นจากนั้นตัวอย่าง "ฉีด" ลงในบัฟเฟอร์นั้นสำหรับแอปพลิเคชันไคลเอนต์ที่มีกำหนดส่งเร็วกว่า หากมันพยายามที่จะทำการฉีดตัวอย่างในไม่ช้ามันก็จะถึงกำหนดส่งและทำให้เกิด underrun Pulse จะเพิ่มระยะเวลาที่สั้นที่สุดโดยอัตโนมัติเพื่อให้ไคลเอนต์ส่งการอัพเดตเสียงไปยังเซิร์ฟเวอร์ เอกสารชีพจรอย่างชัดเจนรัฐที่พิเศษต่ำ latency-- พูดน้อยกว่า 10ms ของความล่าช้าในการประมวลผล- ไม่ใช่เป้าหมายการออกแบบ เนื่องจาก Linux เอง (และอาจเป็นฮาร์ดแวร์ของคุณ) ไม่ได้ออกแบบมาสำหรับการจัดตารางเวลาเสียงแบบเรียลไทม์ฉันจึงควรเชื่อพวกเขา

ในแง่ของการกำหนดค่าผู้ใช้ Pulse คือ "แสง" (บางคนอาจบอกว่า Pulse มีความล่าช้าในการกำหนดค่าต่ำซึ่งเป็นสิ่งที่น่าเสียดายที่หลาย ๆ แอพพลิเคชั่น Linux Audio ไม่สนใจ) ในแง่ของความซับซ้อนพื้นฐานเมื่อเทียบกับแจ็ค Pulse คือ "อ้วน"

เพื่อให้ได้คำตอบที่ชัดเจนยิ่งขึ้นคุณจะต้องได้รับอุปกรณ์ลูปแบ็คและวัดเวลาแฝงไปกลับในระบบของคุณเพื่อรู้ความจริง เวลาในการตอบกลับคือเวลาที่ระบบของคุณใช้ในการประมวลผลเสียงและรับสิ่งที่ประมวลผลกลับเข้าสู่ระบบ มีบทเรียนออนไลน์ที่อธิบายวิธีการทำเช่นนี้ภายใต้ลินุกซ์ นั่นจะทำให้คุณทราบถึงสิ่งที่คุณเป็นจริงหลังจากนั้นซึ่งเป็นเวลาแฝงที่รับรู้ - เวลาที่ใช้ตั้งแต่วินาทีที่คุณเริ่มกิจกรรม (เช่นการเดินสายสตริงกีตาร์) จนถึงช่วงที่คุณได้ยินเสียงครั้งแรก ผลลัพธ์นั้น (เช่นการได้ยินเสียงคอร์ดกีตาร์)

ในที่สุดโปรดทราบว่า Pulse และ Jack ทั้งสองนั่งอยู่ด้านบนของ ALSA ในการกระจาย GNU / Linux ส่วนใหญ่ ฉันรู้ว่าคุณแค่ถามเกี่ยวกับแจ็คกับพัลส์ แต่ถ้าคุณกำลังใช้แอปพลิเคชั่นเสียงเดียวที่สามารถเชื่อมต่อโดยตรงกับ ALSA ได้ไม่มีวิธีที่เป็นไปได้ที่การเพิ่ม Pulse หรือ Jack จะทำให้คุณรับรู้เวลาแฝงที่ต่ำกว่า ALSA เพียงอย่างเดียว ในแง่นี้ Pulse และ Jack เป็น "อ้วน"

TLDR; ALSA เพียงอย่างเดียวนั้นเร็วที่สุดแจ็คมีประโยชน์สำหรับการเชื่อมโยงแอปพลิเคชั่นเสียงหลายรายการเข้าด้วยกันและ Pulse น่าจะใช้งานได้ง่ายที่สุดเมื่อคุณไม่สนใจเวลาแฝงที่ต่ำมาก เพิกเฉยเอกสารหรือการสนทนาที่ใช้คำแฝงโดยไม่ต้องอธิบายความล่าช้าประเภทใดที่มีความหมาย (น่าเสียดายที่ทั้งแจ็คเอกสารอย่างเป็นทางการและบล็อกของ Lennart เกี่ยวกับ Pulse อยู่ในหมวดหมู่นี้)

หมายเหตุ : อาจมีกรณีขอบที่คุณต้องการใช้แอปพลิเคชั่นเสียงเดียวและมันมีอินเตอร์เฟส ALSA crummy และอินเตอร์เฟสแจ็คที่เหมาะสม ในกรณีนั้นการใช้แจ็คอาจทำให้คุณมีเวลาในการตอบสนองที่ต่ำกว่า แต่ถ้าเรากำลังพูดถึงแอพที่ออกแบบมาเพื่อลดเวลาแฝงกรณีเหล่านี้น่าจะหายาก แต่ขออุปกรณ์ลูปแบ็คและทดสอบสมมติฐานของฉัน!


9

พวกเขาเป็นจริงที่คล้ายกันในการเป็นเซิร์ฟเวอร์เสียง JACKได้รับการออกแบบสำหรับการตอบสนองแบบเรียลไทม์ / ความหน่วงต่ำซึ่งจำเป็นสำหรับโซลูชันระบบเสียงระดับมืออาชีพ PulseAudio ได้รับการกำหนดเป้าหมายมากขึ้นที่เดสก์ท็อปทั่วไป PAดูเหมือนจะหนักกว่าแจ็ค - การมีความซับซ้อนมากขึ้นจะทำให้ค่าใช้จ่ายมากขึ้น บน Linux ทั้งสองใช้ALSAสำหรับเอาต์พุตจริงในที่สุด ด้วย PA ข้อมูลจะถูกกำหนดเส้นทางจาก ALSA (เอาต์พุตของแอปพลิเคชัน) ไปยัง PA (กำลังประมวลผล) ไปยัง ALSA (เอาท์พุท) ซึ่งแน่นอนว่าช้ากว่าเส้นทาง JACK-ALSA ในทางกลับกันมันจะโปร่งใสสำหรับแอพพลิเคชั่นที่ไม่สามารถใช้งานได้จริงเพราะมันแสดงการ์ดเสียงเสมือนพร้อมอินเตอร์เฟส ALSA

ไม่ว่าในกรณีใด ๆ เว้นแต่คุณตั้งใจจะผลิตเพลงหรือไม่สามารถอยู่ได้โดยปราศจากการควบคุมระดับเสียงของแอปพลิเคชั่น (หรือส่งต่อเสียงไปยังเครื่องอื่นผ่านเครือข่าย) ALSA ธรรมดาจะทำงานได้ดีโดยไม่มีค่าใช้จ่ายน้อย ไดรเวอร์บางตัวสามารถทำการผสมฮาร์ดแวร์และแม้ว่าจะไม่ได้ ALSA สามารถผสมผ่านปลั๊กอิน (อาจจะไม่เร็วเท่า JACK แต่การใช้ "ปกติ" ควรใช้ได้)


ลิงก์ไปยังรูปภาพ PA ถูกทิศทางผิดหรือไม่?
NN

@NN ทำงานให้ฉัน แต่ฉันเปลี่ยนตอนนี้ดังนั้นหวังว่ามันจะดีขึ้น
เตอร์

@Sukminder ข้อผิดพลาดดูเหมือนว่าจะค่อนข้างสุ่ม
เตอร์

1
ฉันไม่คิดว่าคำตอบนี้ตัด: ก่อนอื่นคุณไม่ได้พูดว่าแจ็คเร็วแค่ไหนและอันดับที่สองคุณโน้มน้าวคำตอบด้วยตัวอย่างที่เกี่ยวข้องกับไดรเวอร์หลอก - อัลซาแทนที่จะเป็น Pulse Sink โดยตรง คำถามค่อนข้างชัดเจน แต่จะตรงกว่า - วิธี JACK เร็วกว่าที่เร็วที่สุดอย่างไรเมื่อเทียบกับ Pulse ที่เร็วที่สุด?
Evan Carroll

ฉันแค่เบื่อที่จะได้ยินทีมแจ็คบอกว่ามันเร็วขึ้นเพราะมันไม่ได้มีเฮฟวี่เวทโดยไม่อธิบายว่าทำไมเฮฟวี่เวท - และอะไรที่มีน้ำหนักมาก - ทำให้พัลส์ช้าลง คำตอบนี้ให้ความรู้สึกเหมือนคำยืนยันคาร์ทีเซียนของหลักฐานในคำถาม
Evan Carroll

4

แจ็คสำหรับแอพพลิเคชั่นที่ต้องการความหน่วงต่ำเช่นการแกะสลักด้วยเสียง / การสร้างสำหรับนักดนตรีผู้สร้างวิดีโอเป็นต้น

  • ไม่มีการสุ่มใหม่!
  • บังคับแหล่งที่มาของการผสมซอฟต์แวร์
  • การกำหนดเส้นทางที่เหมาะสม (เสียง, timesync, ฯลฯ ) ระหว่างแอพ, อุปกรณ์, ปลั๊กอิน ladspa / lv2 / vst, ฯลฯ
  • สามารถใช้กับ pulseaudio (สะพาน)

พัลส์สำหรับแอปพลิเคชันเดสก์ท็อปทั่วไป (อย่าคาดหวังความล่าช้าต่ำ)

  • จัดเตรียมความเข้ากันได้กับaRtsและesd
  • สามารถใช้เป็นalsaและossเอาท์พุท
  • บังคับให้ resampling ซอฟต์แวร์ใหม่
  • บังคับแหล่งที่มาของการผสมซอฟต์แวร์
  • ซอฟต์แวร์ upmix, downmix, ฯลฯ
  • ให้ API ที่ดีสำหรับปลั๊กอิน (เช่น: pulseeffects )
  • การกำหนดเส้นทางอย่างง่าย (เพื่อเชื่อมต่อเอาต์พุตไปยังอุปกรณ์หรือแอปอื่น)
  • ควบคุมระดับเสียงต่อแอพ

Alsa userspace layer (ไม่ใช่ไดรเวอร์) ทำขั้นต่ำ (latacy ระหว่าง [*])

  • [*] การ resampling ฮาร์ดแวร์แหล่งที่มาแบบผสมการผสม ฯลฯ (คุณต้องใช้การ์ดเสียงที่เพียงพอในการใช้มิฉะนั้นจะใช้ซอฟต์แวร์ )
  • ปลั๊กอิน ladspa ที่คุณสามารถตั้งค่าในรูปแบบที่น่าเกลียด
  • การควบคุมระดับเสียงที่เรียบง่าย / ระดับโลก

ในกรณีส่วนใหญ่ Pulse เป็นตัวเลือกที่ดีที่สุดสำหรับผู้ใช้เดสก์ท็อปทั่วไป แจ็คเป็นตัวเลือกที่ดีที่สุดสำหรับนักดนตรี ฯลฯ


ฉันลงคะแนนโหวต แต่ฉันไม่แน่ใจว่ามันเป็นคำตอบสำหรับคำถามที่ดีพอ ๆ กับการเปรียบเทียบ เหตุใด PulseAudio จึงช้าลงหากไม่ได้ทำการสุ่มตัวอย่างใหม่
Evan Carroll

> ทำไม PulseAudio ถึงช้าลงหากไม่ได้ทำการสุ่มตัวอย่างใหม่
3ED

ไม่? พวกเขาทำสิ่งต่าง ๆ ในซอฟต์แวร์เช่น: บังคับ resampling (คุณสามารถเลือกได้ระหว่าง 2) แจ็คบายพาสบางส่วน แจ็คเป็นอะไรที่คล้ายกับ asio Pulse คล้ายกับเสียง windows มาตรฐานจาก vista ขึ้นไป แนวคิดไม่เหมือนกัน แต่คล้ายคลึงกัน พัลส์นั้นยอดเยี่ยมสำหรับการ์ดเสียงราคาถูก / รวม / ไม่รองรับอย่างถูกต้องซึ่งไม่สามารถทำสิ่งต่างๆในฮาร์ดแวร์ได้
3ED

2

มันไม่ใช่คำถามของ "vs" ในตอนแรกเราจะเห็นได้ว่าเป็น "เซิร์ฟเวอร์เสียง" ดังนั้นอาจสรุปได้ว่าเพียงต้องการเลือกระหว่างพวกเขา นั่นไม่ใช่กรณี ตัวอย่างเช่นกล้องวิดีโอและกล้อง FLIR ทั้งคู่เป็นกล้อง แต่อย่างใดอย่างหนึ่งไม่เพียง "เลือก" ระหว่างพวกเขา พวกเขารับใช้บทบาทที่แตกต่างกันมากบทบาทเหล่านั้นสามารถเป็นที่ชื่นชม แต่พวกเขาก็ไม่สามารถแข่งขันได้ หนึ่งต้องการแจ็คหรือต้องการพัลส์หรืออาจต้องการทั้งคู่ ตัวเลือกถูกขับเคลื่อนโดยโดเมนปัญหาไม่ใช่คุณลักษณะเฉพาะเช่นเวลาแฝงที่เฉพาะเจาะจง

สำหรับคำว่า "FAT" กับคำว่า "FAT" ไม่ได้ใช้คำนี้ในหลายวิธีที่จะมีความหมายอย่างแท้จริง แต่โดยทั่วไปคำว่า FAT จะใช้เมื่อแอปพลิเคชัน "ทำเพื่อคุณทั้งหมด" ไม่มากก็น้อย "น้ำหนักเบา" มีแนวโน้มที่คุณจะได้รับการโหลด fucntionallity ที่คุณต้องการอาจเลือกจากพาเลทของตัวเลือกและทิ้งส่วนที่เหลือ Pulse เป็นโปรแกรม "หยดใหญ่" ที่คุณให้พารามิเตอร์สองสามอันและค่อนข้างมาก ต้องการหรือไม่จำนวนฟังก์ชั่นทั้งหมดจะถูกโหลดเมื่อคุณเริ่มต้นการเต้นของชีพจร แจ็คมีขนาดเล็กและไม่มีประโยชน์ในตัวมันเองโปรแกรมที่คุณใช้ติดกับปลั๊กอินโปรแกรมและอื่น ๆ จำนวนมากเพื่อสร้างสิ่งที่คุณต้องการ โปรแกรมเมอร์มักจะมองโลกจากด้านข้างของทรัพยากรเครื่อง

ดังนั้นพัลส์เป็นเซิร์ฟเวอร์เวลาแฝงผันแปรและแจ็คได้รับการแก้ไขหนึ่งในเวลาแฝง นั่นคือโดเมนปัญหาเฉพาะของพวกเขา หากคุณเพียงแค่ดูทีวีหรือฟังเพลงผ่านเครือข่ายคุณก็ต้องการชีพจร หากคุณกำลังพยายามเล่นดนตรีอิเล็กทรอนิกส์สดคุณต้องมีแจ็ค หากคุณกำลังดูทีวีและทำการประมวลผลจำนวนมากบนสตรีมเสียงคุณจะต้องใช้ทั้งสองอย่างแน่นอน


1
อัตนัยค่อนข้าง: ฉันคิดว่าเซิร์ฟเวอร์เสียงควรเป็นไปตามการออกแบบ JACK เนื่องจากเป็นไปไม่ได้ที่จะกำจัดเวลาแฝงใด ๆ ที่เพิ่มโดยเซิร์ฟเวอร์ จากนั้นขึ้นอยู่กับผู้พัฒนาแอปพลิเคชันที่จะใช้บัฟเฟอร์ที่มีขนาดใหญ่กว่าสำหรับดิสก์หรือ I / O เครือข่ายการแปลงอัตราตัวอย่าง ฯลฯ เวลาในการตอบสนองที่สูงกว่าเครื่องหมาย 10 ms คือสูง
user877329
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.