อุปกรณ์ ALSA เช่น“ hw: 0,0” หมายถึงอะไร ฉันจะทราบได้อย่างไรว่าจะใช้อย่างไร


63

ฉันค้นหาไปเรื่อย ๆ และไม่พบคำอธิบายใด ๆ เกี่ยวกับความหมายของ "hw: 0,0" ฉันจะกำหนดจำนวนการ์ดเสียง USB ของฉันได้อย่างไร MPDต้องการให้ฉันป้อนสิ่งนี้:

audio_output {
        type                    "alsa"
        name                    "Sound Card"
        device                  "hw:0,0"     # optional
        format                  "44100:16:2" # optional
}

ถ้าฉันทำ "alsamixer -c 1" มันเปิดตัวควบคุมระดับเสียงของการ์ด USB แต่นั่นไม่ได้ช่วยฉันจริงๆ

ฉันจะหารายการชื่อ / หมายเลขอุปกรณ์ในระบบของฉันได้จากที่ใด พวกเขามีความยืดหยุ่นต่อการเปลี่ยนแปลงฮาร์ดแวร์หรือไม่ หากฉันนำการ์ด 2 ออกบัตร 3 กลายเป็นการ์ด 2 หรือไม่ มีวิธีอื่นในการระบุอุปกรณ์หรือไม่ ฉันจะหาเอกสารของสิ่งนี้ได้ที่ไหน


ดังนั้นสิ่งที่จบลงด้วยการทำงาน?
ต้มตุ๋น Quixote

การสลับไปใช้ PulseAudio ใช้งานได้ดี :) แต่ฉันต้องเข้าสู่ระบบในเครื่องและปรับเปลี่ยนเส้นทางเสียง จากนั้นฉันก็ตัดสินใจว่า MPD จะดูดและยอมแพ้
endolith

ที่จริงแล้ว "hw: 1,0" อาจใช้งานได้ แต่มันบอกว่าอุปกรณ์ใช้งานอยู่ (โดย Pulse หรือเปล่า) ฉันไม่ได้ลองวิธีอื่น แต่หวังว่านี่จะช่วยผู้อื่นได้
endolith

คำตอบ:


48

คำตอบของ JohnT ให้พื้นฐานที่ดี ฉันจะติดตามมันด้วยวิธีการค้นหาอุปกรณ์ในระบบของคุณ ใช้ "aplay -l" เพื่อรับรายการอุปกรณ์ในระบบของคุณ HW: X, Yมาจากการทำแผนที่ของฮาร์ดแวร์ของคุณนี้ - ในกรณีนี้ X คือบัตรจำนวนขณะที่ Y เป็นอุปกรณ์จำนวน

$ aplay -l   # note lower-case "L" option
**** List of PLAYBACK Hardware Devices ****
card 0: T71Space [Terratec Aureon 7.1-Space], device 0: ICE1724 [ICE1724]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: T71Space [Terratec Aureon 7.1-Space], device 1: IEC1724 IEC958 [IEC1724 IEC958]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: T71Space [Terratec Aureon 7.1-Space], device 2: ICE1724 Surrounds [ICE1724 Surround PCM]
  Subdevices: 3/3
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2

เนื่องจากอุปกรณ์เหล่านี้เป็นอุปกรณ์ USB ที่อาจไม่ได้รับหมายเลขอุปกรณ์เหมือนกันทุกครั้งที่เสียบอุปกรณ์ hw: X, Y อาจเปลี่ยนไป คำตอบที่ง่ายที่สุดคือสำหรับระบบเดสก์ท็อปลองใช้เครื่องมือกำหนดค่า GNOME / KDE / Xfce และดูว่าฉลาดพอที่จะรับการเปลี่ยนแปลงหรือไม่

วิธีที่ซับซ้อนหากคุณไม่ได้ทำสิ่งนี้ด้วยระบบเดสก์ท็อป คุณอาจสามารถหนีด้วยการใช้ชื่อแทนอุปกรณ์แทน "hw: X, Y" - นี่คือสิ่งที่เอาท์พุตของ "aplay -L" แสดง สิ่งที่ "บางสิ่งบางอย่าง: CARD = FOO, DEV = Y" เป็นชื่อแทนและอาจจะไม่เปลี่ยนแปลงระหว่างปลั๊กอินอุปกรณ์ต่าง ๆ โดยที่ X ใน "hw: X, Y" (สมมติว่าคุณกำลังใช้ดองเกิล USB เดียวกันทุกครั้ง)

$ aplay -L
default:CARD=CK804
    NVidia CK804, NVidia CK804
    Default Audio Device
front:CARD=CK804,DEV=0                 # hw:0,0
    NVidia CK804, NVidia CK804
    Front speakers
surround40:CARD=CK804,DEV=0            # hw:0,1
    NVidia CK804, NVidia CK804
    4.0 Surround output to Front and Rear speakers

ดังนั้นคำสั่ง aplay ของคุณจะกลายเป็น "aplay -D front: CARD = CK804, DEV = 0 somefile.wav" และคุณสามารถใช้ devicename เดียวกันใน. asoundrc ของคุณ


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


3
Aha! ฉันได้รับการบอกกล่าวaplay -Lซึ่งไม่ได้ให้ผลลัพธ์เหมือนaplay -lกัน ถอนหายใจ
endolith

1
คุณจะบอกsurround40:CARD=CK804,DEV=0ได้hw:0,1อย่างไรว่านั่นคือ? เท่าที่ฉันสามารถบอกhw:0,0ได้ว่ามันหมายถึงDEV=0แต่ในการกำหนดค่าที่แตกต่างกัน (4 ช่องทางมากกว่า 2 เป็นในfront:CARD=CK804,DEV=0)
zpon

19

hw:0,0ระบุอุปกรณ์เริ่มต้นบนการ์ดเสียงเริ่มต้น hw:1,0ในการเข้าถึงอุปกรณ์ตัวแรกการ์ดเสียงที่สองของคุณคุณจะต้องระบุ .asoundrcเหล่านี้จะถูกระบุไว้ในของคุณ เพิ่มเติมเกี่ยวกับทั้งหมดนี้ที่นี่


5
เฉพาะที่นี่: alsa-project.org/main/index.php/…
endolith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.