ALSA で複数のサウンドカードが一つのモジュールを共有している場合の設定法

    ALSA で複数のサウンドカードが一つのモジュールを共有している場合の設定法です。当方の環境は、Linux From Scratch SVN-20160812、マザーボード Gigabyte 970A-D3、ビデオチップ Geforce 710 です。lspci コマンドを打つと、
     bash-4.3# lspci | grep -i audio
     00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA) (rev 40)
     01:00.1 Audio device: NVIDIA Corporation GK208 HDMI/DP Audio Controller (rev a1)

    の様に、マザーボードに載った AMD/ATI 製のオーディオデバイスと、ビデオカードに載った NVIDIA 製の HDMI オーディオデバイスの2つあることがわかります。また、
     bash-4.3# cat /proc/asound/modules 
     0 snd_hda_intel
     1 snd_hda_intel
     2 snd_pcsp

    により、この2つのデバイスはどちらも snd_hda_intel というモジュールドライバを用いていることが分かります。この場合に問題となるのは、2つのオーディオデバイスのどちらがデフォルトのデバイスとなるかが時の運で、音が出たり出なかったりしてしまうことです。そこで、デバイスの優先順位を指定する必要があります。

    [解決方法]
    以下のように、vid(ベンダーID)等を使えばよい様です。
     bash-4.3# cat /etc/modprobe.d/alsa.conf 
     options snd-hda-intel index=0,1 vid=1002,10de 
     options snd-pcsp index=2

    index=0, 1 のうち、0 がデフォルトのサウンドカードを指します。0 には vid の 1002、1 には 10de が対応します。サウンドカードが USB デバイスの場合には lsusb コマンドで vid を調べることができます。PCI デバイスの場合、
     bash-4.3# lspci -nn | grep Audio
     00:14.2 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA) [1002:4383] (rev 40)
     01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)

    もしくは
     bash-4.3# less /proc/bus/pci/devices
     ~~~略~~~
     00a1 1002439c 11 (..略..) pata_atiixp
     00a2 10024383 10 (..略..) snd_hda_intel
     ~~~略~~~
     0100 10de128b 1a (..略..) nvidia
     0101 10de0e0f 13 (..略..) snd_hda_intel
     ~~~略~~~

    として調べることができます。赤字で示したところが vid で、AMD/ATI, NVIDIA 双方の vid を上記の通り /etc/modprobe.d/alsa.conf に記入すればよいです。


    関連記事

    コメント

    非公開コメント