Как заставить Alsa автоматически выбрать предпочитаемое звуковое устройство?


36

Я купил звуковую карту USB. Я хотел бы настроить свой рабочий стол Linux так, чтобы он предпочитал USB-устройство, если оно подключено и автоматически переключается, когда устройство (не) подключено. Возможно ли это и как?


Вместо этого Debian использует pulseaudio.
Брайам

Ответы:


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-карта отключена, звук перестает работать полностью, вместо переключения на встроенную карту.
Петр Пудлак

2
Используя RPI2, это решение работало для меня. Перепробовал все остальное, но ничего не получалось, пока я этого не сделал. (Пришлось использовать "карту 0" на моем).
Роб Гиббонс

2
Используя вышеупомянутую конфигурацию, звук в YouTube на Palemoon у меня не работал, этот defaults.pcm.card 1 defaults.ctl.card 1 конфиг
aaditya1234

застрял на один день! и ты только что спас мою задницу!
Аламин

2
НЕ используйте эзотерическую хакерскую обработку в ответах нормальным людям. Вместо написания однострочника, который извлекает столбцы из вывода, опишите словами, как найти нужную информацию в полном выводе.
Щепан Холышевский

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 = -1

параметры индекса snd_usb_intel = -2

в этом случае USB-устройство является предпочтительным устройством.

если у вас есть две разные карты с одинаковым именем из выходных данных, например:

параметры snd_hda_intel

параметры snd_hda_intel

выполните эту команду, чтобы узнать, что есть что:

cat / proc / asound / cards

затем отредактируйте модули следующим образом:

параметры snd_hda_intel enable = 1 index = 0

параметры snd_hda_intel enable = 0 index = 1

может потребоваться перезагрузка. поэтому вам, возможно, придется вручную переключать звуковые карты.


Что вы имеете в виду под «изменением вывода»? Как я могу изменить вывод?
Петр Пудлак

Я сделал необходимые изменения в answer.try этой версии. Надеюсь, это поможет. Методы могут различаться в зависимости от вида Linux, который вы используете.
Ashildr

Спасибо. Как я могу проверить настройки? Я определил карты, добавил соответствующие опции, перезагрузил компьютер, но никаких изменений не вижу - все-таки внутренняя (Intel) карта является предпочтительной.
Петр Пудлак

try> options snd-usb-intel enable = 1 index = 0 (для включения)> options snd-hda-intel enable = 0 index = 1 (для отключения) или> options snd-hda-intel enable = 0 index = 0> options snd-usb-intel enable = 1 index = 1 и перезагрузка
Ashildr

то есть, включив usb, отключите другой, используя enable = 0 или 1, сделайте это также наоборот. Я не уверен, что будет работать для вас. Необходима перезагрузка. Я желаю вам решить
вашу

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 работал для меня (на ноутбуке 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.
Макс. 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 / modules
linuxdev2013

@ linuxdev2013 как вы могли бы modprobe драйвер, который не поддерживает modprobe? Как объяснено выше, это не модуль, он встроен в ядро.
astooooooo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.