Làm cách nào để Alsa chọn một thiết bị âm thanh ưa thích tự động?


36

Tôi đã mua một card âm thanh USB. Tôi muốn thiết lập máy tính để bàn Linux của mình để nó thích thiết bị USB hơn, nếu nó được cắm và tự động chuyển đổi khi thiết bị được (chưa) cắm. Có thể, và làm thế nào?


Debian sử dụng pulseaudio thay thế.
Braiam

Câu trả lời:


36

Tìm thẻ của bạn với

$ cat /proc/asound/cards

Để có được tên thẻ ALSA hợp lệ, hãy sử dụng aplay:

$ aplay -l

và sau đó tạo /etc/asound.confbằng cách sau:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

Thay thế "thẻ 1" bằng số hoặc tên thẻ của bạn được xác định ở trên.

Ngoài ra, bạn có thể thay đổi thứ tự thẻ của mình để thẻ USB của bạn sẽ là thẻ 0 và nó sẽ hoạt động mà không cần chỉnh sửa asound.conf.


2
Tôi đã thử đề xuất của bạn, nhưng khi rút thẻ USB, âm thanh sẽ ngừng hoạt động hoàn toàn, thay vì chuyển sang thẻ tích hợp.
Petr Pudlák

2
Sử dụng RPI2, giải pháp này hiệu quả với tôi. Đã thử tất cả phần còn lại, nhưng không có gì hiệu quả cho đến khi tôi làm điều này. (Phải sử dụng "thẻ 0" trên mỏ của tôi).
Rob Gibbons

2
Sử dụng cấu hình trên, âm thanh trong youtube trên palemoon không hoạt động với tôi, cấu hình này hoạt động: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234

bị mắc kẹt cho một ngày này! và bạn vừa lưu mông tôi!
alamin

2
KHÔNG sử dụng tin tặc xử lý hàng loạt bí mật trong câu trả lời cho người bình thường. Thay vì viết một lớp lót trích xuất các cột từ đầu ra, hãy mô tả bằng từ ngữ cách tìm thông tin mong muốn trong đầu ra đầy đủ.
Szczepan Hołyszewski

16

đây là phương pháp để chọn card âm thanh mặc định trong Alsa. Bạn có thể muốn cài đặt Alsa cho phương thức này để hoạt động nếu bạn đang sử dụng Pulse Audio.

mèo / Proc / asound / mô-đun

sẽ liệt kê các mô-đun âm thanh của bạn. Đầu ra của lệnh sẽ như thế này (ví dụ):

0 snd_hda_intel

1 snd_usb_intel

bạn có thể dễ dàng hiểu cái nào là card âm thanh usb của bạn từ phía trên.

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

chỉnh sửa alsa-base.conf này theo cách sao cho thẻ ưa thích của bạn có chỉ số = -2 / 0 và thẻ khác có chỉ số = -1 / 1 (gắn với -2 và -1)

tùy chọn snd_hda_intel index = -1

tùy chọn snd_usb_intel index = -2

trong trường hợp này thiết bị usb là thiết bị ưa thích.

nếu bạn có hai thẻ differnt có cùng tên từ đầu ra, như thế này:

tùy chọn snd_hda_intel

tùy chọn snd_hda_intel

ban hành lệnh này để tìm ra cái nào:

mèo / Proc / asound / thẻ

sau đó chỉnh sửa các mô-đun theo cách này:

tùy chọn snd_hda_intel enable = 1 index = 0

tùy chọn snd_hda_intel enable = 0 index = 1

khởi động lại có thể là cần thiết. vì vậy bạn có thể phải chuyển đổi thủ công các card âm thanh của mình.


Bạn có ý nghĩa gì khi "sửa đổi đầu ra"? Làm thế nào tôi có thể sửa đổi đầu ra?
Petr Pudlák

Tôi đã thực hiện các thay đổi cần thiết trong câu trả lời. Hãy thử phiên bản này. Hy vọng điều này sẽ giúp. Các phương thức có thể thay đổi tùy theo hương vị của linux bạn sử dụng.
Ashildr

Cảm ơn bạn. Làm thế nào tôi có thể xác minh thiết lập? Tôi đã xác định các thẻ, thêm các tùy chọn phù hợp, khởi động lại, nhưng tôi không thấy bất kỳ thay đổi nào - vẫn là thẻ nội bộ (intel) là thẻ được ưu tiên.
Petr Pudlák

thử> tùy chọn snd-usb-intel enable = 1 index = 0 (để bật)> tùy chọn snd-hda-intel enable = 0 index = 1 (để tắt) hoặc> tùy chọn snd-hda-intel enable = 0 index = 0> tùy chọn snd-usb-intel enable = 1 index = 1 và khởi động lại
Ashildr

tức là, bật usb vô hiệu hóa cái khác bằng enable = 0 hoặc 1, làm điều này ngược lại cũng vậy. Tôi không chắc cái nào sẽ hoạt động cho bạn.reboot là cần thiết. Tôi muốn bạn giải quyết vấn đề của bạn
Ashildr

4

Tôi cũng không thể nhận đầu ra từ thiết bị USB của mình. cat /proc/asound/modulesĐầu ra của tôi là:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

Tôi đã thử cả hai câu trả lời được mô tả ở đây mà không giúp được gì (với nhiều kết hợp chỉ mục và rất nhiều khởi động lại). Tôi nghĩ vấn đề là thiết bị USB của tôi khởi tạo sau khi khởi động. Dù thế nào đi nữa, vì vậy giải pháp làm việc của tôi là đưa vào danh sách đen 2 thiết bị âm thanh khác bằng cách cập nhật /etc/modprobe.d/blacklist.confdưới dạng:

blacklist snd_hda_intel

3

Câu trả lời từ Matija Nalis chỉ có một nửa làm việc cho tôi (alsamixer đã thay đổi mặc định, nhưng những thứ khác như aplay và firefox vẫn bướng bỉnh với mặc định sai). Ví dụ này từ wiki debian làm việc cho tôi (trên máy tính xách tay CentOS-6):

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

Đối với hồ sơ: ALSA là tài liệu kém, và đặc biệt là công cụ rất đơn giản này như chọn thẻ nào để sử dụng là quá khó. Tệ hơn, nó dường như thay đổi giữa các hệ thống. Ngoài ra, tôi đã nhận được thẻ "Generic_1" từ aplay -l trong đó nó xuất hiện dưới dạng "thẻ 1" trong danh sách. Những người khác dường như đang sử dụng nó, vì vậy tôi cũng làm như vậy ... điều đó có nghĩa là tôi không thể nói.


1

Mặc dù bạn có thể thay đổi thẻ alsa mặc định bằng cách chỉnh sửa .asoundrc hoặc hệ thống asound.conf, có một số vấn đề quan trọng với phương pháp này.

Nó dễ vỡ và yêu cầu khởi động lại ứng dụng để được vinh danh.

Nếu bạn muốn chuyển đổi thẻ một cách nhanh chóng thì bạn thực sự cần phải sử dụng một máy chủ âm thanh trừu tượng hóa các ứng dụng từ soundcard một cách chính xác như pulseaudio.


Một số ứng dụng như Skype beta bỏ qua điều đó và kết nối với thẻ ALSA mặc định. Điều đó dẫn đến không có âm thanh cho Skype khi HDMI là thiết bị đầu tiên thay vì HDA.
Tối đa

-1

Đây là một biến thể của câu trả lời của Matija Nalis và Tel. Đây là những gì làm việc cho tôi:

~ / .asoundrc

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

(Odroid C0, Debian Jessie, âm thanh HDMI dưới dạng thẻ 0 và USB Sound Card là thẻ 1 theo aplay -l)

Lưu ý: các phương thức khác không hoạt động với tôi, vì / Proc / asound / mô-đun không tồn tại và không có mô-đun âm thanh hdmi nào trong danh sách đen hoặc được đặt ở mức ưu tiên thấp, nó được nhúng vào kernel. Có vẻ như tôi đã phải biên dịch lại kernel mà không có hỗ trợ âm thanh hdmi để vô hiệu hóa nó hoàn toàn.


sudo modprobe $ soundcard_do sẽ làm những gì bạn mong muốn cho / Proc / asound / mô-đun
linuxdev2013

@ linuxdev2013 làm thế nào bạn có thể sửa đổi một trình điều khiển không có khả năng sửa đổi? Như đã giải thích ở trên, nó không phải là một mô-đun, nó được nhúng trong kernel.
astooooooo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.