2

Мой новый USB аудио динамик появился как второе устройство в Alsa. Мне удалось сделать его основным:

$ cat /proc/asound/modules 
 0 snd_usb_audio
 1 snd_hda_intel
$ cat /proc/asound/cards
 0 [Speaker        ]: USB-Audio - uBoom Q Speaker
                      uBoom Q Speaker at usb-0000:00:1d.1-1, full speed
 1 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0x80000000 irq 16

добавив эти строки в /etc/modprobe.d/alsa-base.conf:

options snd_hda_intel index=1
options snd_usb_audio index=0

Теперь при загрузке USB-Audio везде работает по умолчанию. Проблема в том - когда я его отключаю (или загружаю без него), вижу

$ cat /proc/asound/modules 
 1 snd_hda_intel

и ничего не работает, потому что нет 0 устройства:

$ aplay
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'

То, что я хочу, это способ переназначения индексов устройства. Если решением является сценарий - я собираюсь создать с ним правило udev.

В настоящее время я меняю 'index =?вернуться к значению по умолчанию «0,1», вызвать alsa force-reload и это поможет. Есть ли лучший способ?

Примечание: в моем дистрибутиве нет asoundconf (KUbuntu Lucid) :(

4 ответа4

2

попробуйте установить asoundconf-gtk, но позаботьтесь о https://bugs.launchpad.net/ubuntu/+source/asoundconf-gtk/+bug/575058

1

Во-первых, давайте разберемся с индексами устройств Alsa. Подключите USB-динамик и sudo alsa force-reload чтобы Alsa нашла его.

Перечислите карточные указатели и их драйверы:

$ cat /proc/asound/modules 
 0 snd_hda_intel
 1 snd_usb_audio

Показать более подробную информацию:

$ cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0x80000000 irq 16
 1 [Speaker        ]: USB-Audio - uBoom Q Speaker
                      uBoom Q Speaker at usb-0000:00:1d.0-1, full speed

Мы хотим иметь «Speaker» с индексом = 0.

Добавьте эти строки в /etc/modprobe.d/alsa-base.conf чтобы сделать USB-динамик устройством по умолчанию, если оно есть:

options snd_hda_intel index=-2
options snd_usb_audio index=-1

Это делает USB-динамик более предпочтительным, чем встроенная карта. sudo alsa force-reload , вуаля! Теперь вы можете видеть с помощью cat /proc/asound/cards как карты появляются и исчезают, когда вы подключаете / отключаете USB-динамик.


Вот еще одна квитанция о том, как выбрать, какую из 2 доступных карт будет использовать следующее запущенное приложение.

Добавьте эти строки в /etc/asound.conf:

$ cat /etc/asound.conf.switch 
# CARD DEFINITIONS
#=== CARD 'card0'
pcm.card0-hw { type hw ; card 0 ; }
ctl.card0-hw { type hw ; card 0 ; }

pcm.card0 { type dmix ;
    ipc_key 4109 ; ipc_perm 0660 ;
    slave { pcm "hw:0,0"
        channels 2 ; period_size 1024 ; buffer_size 4096 ; rate 44100 ; period_time 0 ;
        }
    bindings { 0 0 ; 1 1 ; }
    }

#=== CARD 'card1'
pcm.card1-hw { type hw ; card 1 ; }
ctl.card1-hw { type hw ; card 1 ; }

pcm.card1 { type dmix ;
    ipc_key 1949 ; ipc_perm 0660 ;
    slave { pcm "hw:1,0"
        channels 2 ; period_size 1024 ; buffer_size 4096 ; rate 44100 ; period_time 0 ;
        }
    bindings { 0 0 ; 1 1 ; }
    }

Это создаст два устройства воспроизведения 'dmix': 'card0' и 'card1'. Они позволят вам без проблем переключаться между ними.

Теперь поместите это в ~/.asoundrc:

# Define new virtual devices
pcm.this                { type plug ; slave.pcm "card1" ; }
ctl.this                ctl.card1-hw
# Set default device
pcm.!default    pcm.this
ctl.!default    ctl.this

переключиться на вторую карту. Замените все «1» на «0», чтобы переключиться обратно. Небольшой скрипт пригодится :)

ПРИМЕЧАНИЕ. В этом руководстве мы создали несколько новых устройств Alsa: «this», «card0-hw», «card0», «card1-hw», «card1». Вы можете обратиться к ним:

$ amixer -D 'this' scontrols
Simple mixer control 'PCM',0

PS Я не знаком с тем, как на самом деле работает Alsa, и, возможно, допустил ужасные ошибки :) Пожалуйста, исправьте меня, если есть лучший способ. Но все же, это работает :)

0

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

/etc/udev/rules.d/50-alsa.rules:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/bin/alsa-switch.sh"

конечно, вы должны заменить '*' цифрами, соответствующими вашему устройству (используйте lsusb, чтобы узнать, какие из них)

Сценарий alsa-switch.sh очень прост:

#!/bin/sh
ln -sf /path/to/custom/asoundrc /home/<user>/.asoundrc

Другое правило может быть добавлено, чтобы восстановить конфигурацию при удалении устройства (извините, я все еще работаю над этим)

0

Я попробовал простое редактирование alsa-base.conf, установив на борту -2, а usb на -1, но это не сработало.

однако, когда я установил ОБА в значение -1 (с указанием встроенной платы первым), я мог переключаться назад и вперед.

Я должен выполнить принудительную перезагрузку alsa при каждом изменении.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .