ALSA使用時のデフォルトサウンドカード設定法のまとめ(&同時再生問題の解決法)

ALSA使用時に、使用したいサウンドカードがデフォルトに設定されておらず、音声の再生や、alsamixierでのコントロールができないことがある。
この問題の解決法として、サウンドカードの読込み順を変更する方法をまとめる。


また、(設定ファイルの記述ミスで)同時再生ができなくなる問題が発生したため、その対策法もまとめる。

環境

  • ソフトウェア
    • Arch_Linux (x86_64, Kernel 3.14-1-1-ARCH)
    • ALSA (k3.14.1-1-ARCH)

解決法

/etc/modprobe.d/alsa-base.conf に、サウンドモジュールの読込み順を指定する設定を書込む。
また、同時再生問題を解決するために、$HOME/.asoundrc にソフトウェアミキシングを有効にする設定を書込む。

設定手順

設定は、以下の手順でおこなう。

  • 読込み順の設定

1. サウンドモジュール一覧と読込み順の確認
2. 設定の記述
3. 再起動

  • 同時再生問題の対策

1. 設定の記述
2. 再起動

読込み順の設定

ArchWikiのALSAのページの、Set the default sound cardを参考にして設定をおこなう。

まず、現在読込まれているサウンドモジュールの一覧と、モジュールの読込み順を確認する。


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

次に、/etc/modprobe.d/alsa-base.conf を編集し、以下の内容を追記する。
( /etc/modprobe.d/alsa-base.conf が存在しない場合は、新規に作成する)


# vim /etc/modprobe.d/alsa-base.conf
(中略)
$ cat /etc/modprobe.d/alsa-base.conf
options snd slots=snd_usb_audio,snd_hda_intel #snd_slots=以降に、'$ cat /proc/asound/modules'で表示されたモジュールを全て書く
options snd_usb_audio index=0 #一番目に読込むモジュールを書く
options snd_hda_intel index=1 #二番目に読込むモジュールを書く


最後に、再起動する。

同時再生問題の対策

ArchWikiのALSAのページの、Simultaneous_playback_problemsを参考にして設定をおこなう。

$HOME/.asoundrc に、以下の内容を追記し、ソフトウェアミキシングを有効にする。(.asoundrc が存在しない場合は、新規に作成する)


$ vim $HOME/.asoundrc
pcm.dmixer {
type dmix
ipc_key 1024
ipc_key_add_uid 0
ipc_perm 0660
}
pcm.dsp {
type plug
slave.pcm "dmix"
}

以下、コピペ用ワンライナー


$ echo -e 'pcm.dmixer {\n\ttype dmix\n\tipc_key 1024\n\tipc_key_add_uid 0\n\tipc_perm 0660\n}\npcm.dsp {\n\ttype plug\n\tslave.pcm "dmix"\n}\n' | sed -e 's/\t/ /g' >> ~/.asoundrc


.asoundrc に追記した後、再起動する。

復旧方法

読込み順の変更、同時再生問題の対策共に、追記した内容を削除する。


設定ファイルを新規に作成した場合は、こちらで。


# rm /etc/modprobe.d/alsa-base.conf
$ rm $HOME/.asoundrc

気になった点

  • HDMIを使っているのに、snd_hda_intelが読込まれているのか分からない

> alsamixerでHDMIバイスを選択しても、元から無効になっている。

  • 設定の途中で、管理者権限が必要になる

> できれば、設定を.asoundrc の記述だけで完結したい


ArchWikiのALSAのページの、Alternative methodを参考にして、~/.asoundrc に


pcm.!default {
type hw
card 2
}

ctl.!default {
type hw
card 2
}

と書いて、サウンドカードの順番を変更した場合、ソフトウェアミキシングが効かなってしまった。


詳しく調べてはいないが、原因はたぶんArchLinuxフォーラムの、Arch Linux Forums: [SOLVED] Software mixing with ALSAが参考になるはず。
brebs氏の発言、The reason is, your "default" pcm now goes straight to "hw" (hardware) without going through dmix first. の通りだと思う。
設定ファイルをうまく書けば、.asoundrc の記述だけで、読込み順を変更しつつ、ミキシングも有効にできる...はず。

参考サイト

  1. ArchWiki: Advanced Linux Sound Architecture
    https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture
  2. Disable ATI HDMI audio from snd_hda_intel (was Re: Disable PCI devices via systemd)
    https://lists.fedoraproject.org/pipermail/users/2013-July/439078.html
  3. Arch Linux Forums: [SOLVED] Software mixing with ALSA
    https://bbs.archlinux.org/viewtopic.php?id=124868
[ このあたりが関係しているのか? Disable ATI HDMI audio from snd_hda_intel (was Re: Disable PCI devices via systemd)