วิธีการทำให้ Alsa เลือกอุปกรณ์เสียงที่ต้องการโดยอัตโนมัติ


36

ฉันซื้อการ์ดเสียง USB ฉันต้องการตั้งค่าเดสก์ท็อป Linux ของฉันเพื่อให้สามารถใช้อุปกรณ์ USB ได้หากเสียบและสลับโดยอัตโนมัติเมื่อเสียบอุปกรณ์ (ไม่) เป็นไปได้และอย่างไร


Debian ใช้ pulseaudio แทน
Braiam

คำตอบ:


36

ค้นหาบัตรของคุณด้วย

$ cat /proc/asound/cards

ในการรับชื่อการ์ด ALSA ที่ถูกต้องให้ใช้aplay:

$ aplay -l

จากนั้นสร้าง/etc/asound.confโดยทำดังนี้:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

แทนที่ "บัตร 1" ด้วยหมายเลขหรือชื่อบัตรของคุณที่ระบุไว้ข้างต้น

หรือคุณสามารถเปลี่ยนการสั่งซื้อบัตรของคุณเพื่อให้การ์ด USB ของคุณจะเป็นบัตร 0 asound.confและมันจะทำงานโดยไม่มีการแก้ไข


2
ฉันลองทำตามคำแนะนำของคุณ แต่เมื่อถอดปลั๊กการ์ด USB แล้วเสียงจะหยุดทำงานอย่างสมบูรณ์แทนที่จะเปลี่ยนเป็นการ์ดในตัว
Petr Pudlák

2
ใช้ RPI2 วิธีนี้ใช้ได้สำหรับฉัน พยายามทุกอย่างที่เหลือ แต่ไม่มีอะไรทำงานจนกว่าฉันจะทำอย่างนี้ (ต้องใช้ "การ์ด 0" กับฉัน)
Rob Gibbons

2
การใช้การกำหนดค่าด้านบนเสียงใน youtube บน palemoon ไม่ได้ผลสำหรับฉันการกำหนดค่านี้ใช้งานได้: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234

ค้างอยู่หนึ่งวัน! และคุณเพิ่งช่วยชีวิตฉันไว้!
alamin

2
อย่าใช้แฮ็กเกอร์ในการประมวลผลแบบลับ ๆ เพื่อตอบคนทั่วไป แทนที่จะเขียนหนึ่งซับที่แยกคอลัมน์จากเอาต์พุตให้อธิบายด้วยวิธีการค้นหาข้อมูลที่ต้องการในเอาต์พุตเต็ม
Szczepan Hołyszewski

16

นี่เป็นวิธีการเลือกการ์ดเสียงเริ่มต้นใน Alsa คุณอาจต้องการติดตั้ง Alsa เพื่อให้วิธีนี้ใช้งานได้หากคุณใช้ Pulse Audio

cat / proc / asound / modules

จะแสดงรายการโมดูลเสียงของคุณเอาต์พุตของคำสั่งจะเป็นเช่นนี้ (เช่น):

0 snd_hda_intel

1 snd_usb_intel

คุณสามารถเข้าใจได้ง่ายว่าอันไหนเป็นการ์ดเสียง usb ของคุณจากด้านบน

nano /etc/modprobe.d/alsa-base.conf

แก้ไข alsa-base.conf นี้ในแบบที่บัตรที่คุณต้องการมีดัชนี = -2 / 0 และบัตรอื่นมีดัชนี = -1 / 1 (ติดกับ -2 และ -1)

ตัวเลือก snd_hda_intel index = -1

options snd_usb_intel index = -2

ในกรณีนี้อุปกรณ์ usb เป็นอุปกรณ์ที่ต้องการ

หากคุณมีการ์ด differnt สองใบที่มีชื่อเดียวกันจากเอาต์พุตเช่นนี้:

ตัวเลือก snd_hda_intel

ตัวเลือก snd_hda_intel

ออกคำสั่งนี้เพื่อค้นหาสิ่งที่:

cat / proc / asound / การ์ด

จากนั้นแก้ไขโมดูลด้วยวิธีนี้:

ตัวเลือก snd_hda_intel เปิดใช้งาน = 1 ดัชนี = 0

ตัวเลือก snd_hda_intel เปิดใช้งาน = 0 ดัชนี = 1

อาจจำเป็นต้องบูตเครื่องใหม่ดังนั้นคุณอาจต้องสลับการ์ดเสียงของคุณเอง


คุณหมายถึงอะไรโดย "การปรับเปลี่ยนผลลัพธ์"? ฉันจะแก้ไขเอาต์พุตได้อย่างไร
Petr Pudlák

ฉันได้ทำการเปลี่ยนแปลงที่จำเป็นใน answer.try รุ่นนี้ความช่วยเหลือนี้วิธีการอาจแตกต่างกันไปตามรสชาติของลินุกซ์ที่คุณใช้
Ashildr

ขอขอบคุณ. ฉันจะตรวจสอบการตั้งค่าได้อย่างไร ฉันระบุการ์ดนั้นเพิ่มตัวเลือกที่เหมาะสมรีบูตเครื่อง แต่ฉันไม่เห็นการเปลี่ยนแปลงใด ๆ - การ์ดภายใน (intel) ยังคงเป็นการ์ดที่ต้องการ
Petr Pudlák

ลอง> options snd-usb-intel enable = 1 index = 0 (เพื่อเปิดใช้งาน)> options snd-hda-intel enable = 0 ดัชนี = 1 (เพื่อปิดการใช้งาน) หรือ> ตัวเลือก snd-hda-intel enable = 0 ดัชนี = 0> ตัวเลือก snd-usb-intel enable = 1 ดัชนี = 1 และรีบูต
Ashildr

เช่นเปิดใช้งาน usb ปิดการใช้งานอีกอย่างหนึ่งโดยใช้เปิดใช้งาน = 0 หรือ 1 ทำเช่นนี้ในทางกลับกันด้วยฉันไม่แน่ใจว่าสิ่งที่จะทำงานสำหรับคุณการกู้คืนเป็นสิ่งที่จำเป็นฉันหวังว่าคุณจะแก้ปัญหาเล็กน้อย
Ashildr

4

ฉันไม่สามารถรับเอาต์พุตจากอุปกรณ์ USB ของฉันได้ cat /proc/asound/modulesผลลัพธ์ของฉันคือ:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

ฉันลองคำตอบทั้งสองอธิบายไว้ที่นี่ซึ่งไม่ได้ช่วย (ด้วยชุดค่าดัชนีจำนวนมากและการรีสตาร์ทจำนวนมาก) ฉันคิดว่าปัญหาคืออุปกรณ์ USB ของฉันเริ่มต้นหลังจากบูตเครื่อง อะไรก็ตามวิธีแก้ปัญหาการทำงานของฉันคือขึ้นบัญชีดำกับอุปกรณ์เสียง 2 ตัวโดยอัพเดท/etc/modprobe.d/blacklist.confเป็น:

blacklist snd_hda_intel

3

คำตอบจาก Matija Nalis เพียงครึ่งเดียวทำงานให้ฉัน (alsamixer เปลี่ยนค่าเริ่มต้น แต่สิ่งอื่น ๆ เช่น aplay และ firefox ติดอยู่กับค่าเริ่มต้นผิด) ตัวอย่างจาก debian wiki นี้เหมาะกับฉัน (บน CentOS-6 แล็ปท็อป):

defaults.pcm.!card Generic_1
defaults.ctl.!card Generic_1
defaults.pcm.!device 0
defaults.ctl.!device 0

สำหรับเร็กคอร์ด: ALSA มีการบันทึกไม่ดีและโดยเฉพาะอย่างยิ่งสิ่งที่ง่ายมากเช่นการเลือกการ์ดที่จะใช้ยากเกินไป แย่กว่านั้นดูเหมือนว่าจะเปลี่ยนระหว่างระบบ นอกจากนี้ฉันยังได้รับแท็ก "Generic_1" จาก aplay -l ซึ่งมันจะปรากฏเป็น "การ์ด 1" ในรายการ คนอื่นดูเหมือนจะใช้มันดังนั้นฉันก็ทำแบบเดียวกัน ... มันหมายความว่าอะไรฉันไม่สามารถพูดได้


1

ในขณะที่คุณสามารถเปลี่ยนบัตร alsa เริ่มต้นได้โดยการแก้ไข. asoundrc หรือระบบ asound.conf มีปัญหาที่สำคัญสองสามประการเกี่ยวกับวิธีการนี้

มันเปราะบางและต้องให้แอปพลิเคชันรีสตาร์ทเพื่อรับเกียรติ

หากคุณต้องการเปลี่ยนการ์ดได้อย่างรวดเร็วคุณจำเป็นต้องใช้ตัวบันทึกเสียงที่ทำให้แอปพลิเคชันจากการ์ดเสียงถูกต้องเช่น pulseaudio


แอปพลิเคชั่นบางอย่างเช่น Skype เบต้าไม่สนใจว่าและเชื่อมต่อกับการ์ด ALSA เริ่มต้น ส่งผลให้ไม่มีเสียงสำหรับ Skype เมื่อ HDMI เป็นอุปกรณ์ตัวแรกแทน HDA
Max N

-1

นี่คือตัวแปรของคำตอบของ Matija Nalis และ Tel นี่คือสิ่งที่ได้ผลสำหรับฉัน:

~ / .asoundrc

defaults.pcm.!card 1
defaults.ctl.!card 1

(Odroid C0, Debian Jessie, เสียง HDMI เป็นการ์ด 0 และการ์ดเสียง USB เป็นการ์ด 1 ตาม aplay -l)

หมายเหตุ: วิธีการอื่นไม่ได้ผลสำหรับฉันเนื่องจาก / proc / asound / modules ไม่มีอยู่และไม่มีโมดูลเสียง hdmi ในบัญชีดำหรือวางไว้ที่ลำดับความสำคัญต่ำจะถูกฝังลงในเคอร์เนล ดูเหมือนว่าฉันจะต้องคอมไพล์เคอร์เนลใหม่โดยไม่รองรับเสียง hdmi เพื่อปิดการใช้งานอย่างสมบูรณ์


sudo modprobe $ soundcard_driver จะทำในสิ่งที่คุณต้องการสำหรับ / proc / asound / โมดูล
linuxdev2013

@ linuxdev2013 คุณจะแก้ไขโปรแกรมควบคุมที่ไม่สามารถแก้ไขได้อย่างไร ตามที่อธิบายไว้ข้างต้นไม่ใช่โมดูล แต่จะฝังอยู่ในเคอร์เนล
astooooooo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.