Во-первых, давайте разберемся с индексами устройств 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, и, возможно, допустил ужасные ошибки :) Пожалуйста, исправьте меня, если есть лучший способ. Но все же, это работает :)