ALSA使用時のデフォルトサウンドカード設定法のまとめ(&同時再生問題の解決法)
ALSA使用時に、使用したいサウンドカードがデフォルトに設定されておらず、音声の再生や、alsamixierでのコントロールができないことがある。
この問題の解決法として、サウンドカードの読込み順を変更する方法をまとめる。
また、(設定ファイルの記述ミスで)同時再生ができなくなる問題が発生したため、その対策法もまとめる。
環境
- ハードウェア
解決法
/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
気になった点
> 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 の記述だけで、読込み順を変更しつつ、ミキシングも有効にできる...はず。[ このあたりが関係しているのか? Disable ATI HDMI audio from snd_hda_intel (was Re: Disable PCI devices via systemd)参考サイト
- ArchWiki: Advanced Linux Sound Architecture
https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture- 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- Arch Linux Forums: [SOLVED] Software mixing with ALSA
https://bbs.archlinux.org/viewtopic.php?id=124868