Bagaimana membuat Alsa memilih perangkat suara pilihan secara otomatis?

36

Saya membeli kartu suara USB. Saya ingin mengatur desktop Linux saya sehingga lebih suka perangkat USB, jika sudah terpasang dan secara otomatis beralih sebagai perangkat (tidak) terpasang. Apakah mungkin, dan bagaimana?

Petr Pudlák
sumber
Sebaliknya, Debian menggunakan pulseaudio.
Braiam

Jawaban:

36

Temukan kartu Anda

$ cat /proc/asound/cards

Untuk mendapatkan nama kartu ALSA yang valid, gunakan aplay:

$ aplay -l

lalu buat /etc/asound.confdengan berikut:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

Ganti "kartu 1" dengan nomor atau nama kartu Anda yang ditentukan di atas.

Atau, Anda dapat mengubah pemesanan kartu Anda sehingga kartu USB Anda menjadi kartu 0 dan itu akan berfungsi tanpa mengedit asound.conf.

Matija Nalis
sumber
2
Saya mencoba saran Anda, tetapi ketika kartu USB dicabut, audio berhenti berfungsi sepenuhnya, alih-alih beralih ke kartu bawaan.
Petr Pudlák
2
Menggunakan RPI2, solusi ini berhasil untuk saya. Mencoba semua yang lain, tetapi tidak ada yang berhasil sampai saya melakukan ini. (Harus menggunakan "kartu 0" di tambang).
Rob Gibbons
2
Menggunakan konfigurasi di atas, suara di youtube di palemoon tidak berfungsi untuk saya, konfigurasi ini berfungsi: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t=9661#p66016
aaditya1234
terjebak untuk satu hari ini! dan kamu baru saja menyelamatkan pantatku!
alamin
2
JANGAN gunakan hackery pemrosesan batch esoterik sebagai jawaban untuk orang normal. Alih-alih menulis satu-liner yang mengekstrak kolom dari output, jelaskan dengan kata-kata cara menemukan informasi yang diinginkan dalam output penuh.
Szczepan Hołyszewski
16

ini adalah metode untuk memilih kartu suara default di Alsa. Anda mungkin ingin menginstal Alsa agar metode ini berfungsi jika Anda menggunakan Pulse Audio.

cat / proc / asound / modules

akan mencantumkan modul suara Anda. Output dari perintah akan seperti ini (misalnya):

0 snd_hda_intel

1 snd_usb_intel

Anda dapat dengan mudah memahami yang mana kartu suara usb Anda dari atas.

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

edit alsa-base.conf ini sedemikian rupa sehingga kartu pilihan Anda memiliki indeks = -2 / 0 dan kartu lainnya memiliki indeks = -1 / 1 (tetap dengan -2 dan -1)

opsi snd_hda_intel index = -1

opsi snd_usb_intel index = -2

dalam hal ini perangkat usb adalah perangkat yang disukai.

jika Anda memiliki dua kartu differnt dengan nama yang sama dari output, seperti ini:

opsi snd_hda_intel

opsi snd_hda_intel

keluarkan perintah ini untuk mencari tahu yang mana:

cat / proc / asound / cards

kemudian edit modul dengan cara ini:

opsi snd_hda_intel aktifkan = 1 indeks = 0

opsi snd_hda_intel aktifkan = 0 indeks = 1

reboot mungkin diperlukan. jadi Anda mungkin harus secara manual mengganti kartu suara Anda.

Ashildr
sumber
Apa yang Anda maksud dengan "memodifikasi output"? Bagaimana saya bisa memodifikasi output?
Petr Pudlák
Saya telah membuat perubahan yang diperlukan dalam answer.try this version.hope this helps.the metode dapat bervariasi sesuai dengan rasa linux yang Anda gunakan.
Ashildr
Terima kasih. Bagaimana saya bisa memverifikasi pengaturan? Saya mengidentifikasi kartu, menambahkan opsi yang sesuai, reboot, tetapi saya tidak melihat perubahan - masih kartu internal (intel) adalah yang lebih disukai.
Petr Pudlák
coba> opsi snd-usb-intel enable = 1 indeks = 0 (untuk mengaktifkan)> opsi snd-hda-intel enable = 0 indeks = 1 (untuk menonaktifkan) atau> opsi snd-hda-intel enable = 0 indeks = 0> opsi snd-usb-intel enable = 1 index = 1 dan reboot
Ashildr
yaitu, aktifkan usb nonaktifkan yang lain menggunakan aktifkan = 0 atau 1, lakukan ini sebaliknya juga. Saya tidak yakin mana yang akan bekerja untuk Anda. boot diperlukan. Saya harap Anda menyelesaikan masalah Anda
Ashildr
4

Saya juga tidak bisa mendapatkan output dari perangkat USB saya. cat /proc/asound/modulesOutput saya adalah:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

Saya telah mencoba kedua jawaban yang dijelaskan di sini yang tidak membantu (dengan banyak kombinasi indeks dan banyak restart). Saya pikir masalahnya adalah perangkat USB saya diinisialisasi setelah boot-up. Apa pun, jadi solusi kerja saya adalah daftar hitam perangkat 2 suara lainnya dengan memperbarui /etc/modprobe.d/blacklist.confsebagai:

blacklist snd_hda_intel
pengguna533723
sumber
3

Jawaban dari Matija Nalis hanya setengah bekerja untuk saya (alsamixer mengubah default, tetapi hal-hal lain seperti aplay dan firefox keras kepala terjebak dengan default yang salah). Contoh dari wiki debian ini bekerja untuk saya (pada laptop CentOS-6):

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

Sebagai catatan: ALSA didokumentasikan dengan buruk, dan terutama hal-hal yang sangat sederhana ini seperti memilih kartu mana yang akan digunakan terlalu sulit. Lebih buruk lagi, tampaknya berubah di antara sistem. Juga, saya mendapatkan tag "Generic_1" dari aplay -l yang muncul sebagai "kartu 1" dalam daftar. Orang lain sepertinya menggunakannya, jadi saya melakukan hal yang sama ... apa artinya saya tidak bisa mengatakannya.

Telp
sumber
1

Meskipun Anda dapat mengubah kartu alsa default dengan mengedit .asoundrc atau sistem asound.conf ada beberapa masalah signifikan dengan pendekatan ini.

Ini rapuh, dan membutuhkan restart aplikasi untuk dihormati.

Jika Anda ingin beralih kartu dengan cepat maka Anda benar-benar perlu menggunakan server suara yang mengabstraksi aplikasi dari kartu suara dengan benar seperti pulseaudio.

Berikan Diffey
sumber
Beberapa aplikasi seperti Skype beta mengabaikannya dan terhubung ke kartu ALSA default. Itu tidak menghasilkan audio untuk Skype ketika HDMI adalah perangkat pertama dan bukan HDA.
Max N
-1

Berikut adalah varian dari jawaban Matija Nalis dan Tel. Inilah yang bekerja untuk saya:

~ / .asoundrc

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

(Odroid C0, Debian Jessie, audio HDMI sebagai kartu 0 dan Kartu Suara USB sebagai kartu 1 menurut aplay -l)

Catatan: metode lain tidak berfungsi untuk saya, karena / proc / asound / modules tidak ada dan tidak ada modul audio HDMI ke daftar hitam atau diprioritaskan, itu tertanam ke dalam kernel. Sepertinya saya harus mengkompilasi ulang kernel tanpa dukungan audio HDMI untuk menonaktifkannya sepenuhnya.

astooooooo
sumber
sudo modprobe $ soundcard_driver akan melakukan apa yang Anda inginkan untuk / proc / asound / modules
linuxdev2013
@ linuxdev2013 bagaimana Anda bisa modprobe driver yang tidak bisa-modprobe? Seperti dijelaskan di atas, ini bukan modul, itu tertanam di kernel.
astooooooo