Advanced Linux Sound Architecture
関連記事
Advanced Linux Sound Architecture (ALSA) は、サウンドカードのデバイスドライバを提供する Open Sound System (OSSv3) を置き換えるために開発された Linux カーネルコンポーネントです。デバイスドライバの他に、ALSA は、カーネルドライバと直接やりとりせずに高レベルの API を使ってドライバ機能を使いたいという開発者のために、ユーザ空間のライブラリも提供しています。
目次
インストール
ALSA はデフォルトの Arch カーネルにモジュールセットとして含まれているので、インストールは不要です。
起動時に自動で udev があなたのハードウェアを調べて、オーディオカード用の適切なカーネルモジュールをロードします。したがって、サウンドはすでに鳴らせるはずです。ただ、デフォルトでは全てのチャンネルはミュートにされています。チャンネルのミュートを解除してください。
ユーザー権限
通常、ローカルユーザーは音楽を再生したり、ミキサーレベルを変更する権限があります。
リモートユーザーが ALSA を使用できるようにするには、ユーザーを audio グループに追加する必要があります。
ALSA ユーティリティ
alsa-utils パッケージをインストールしてください、サウンドデバイスをコンソールや端末から設定するための alsamixer ユーザー空間ツールが含まれています。また、高品質なリサンプリングやアップ・ダウンミキシングなどの高度な機能を使いたい場合は alsa-plugins パッケージをインストールしてください。
OSS との互換性
ALSA には OSS のコールに介入して ALSA を使うようにさせる機能があります。このエミュレーションレイヤーは /dev/dsp を開いて音声データを直接書き込むような古いアプリケーションで有用です。OSS やエミュレーションライブラリがないと、/dev/dsp が見つからずにアプリケーションは音声を鳴らすことができません。
OSS アプリケーションに dmix (ソフトウェアミキシング) を扱わせたい場合は alsa-oss パッケージをインストールして snd-seq-oss, snd-pcm-oss, snd-mixer-oss カーネルモジュールをロードして OSS エミュレーションモジュールを有効にしてください。
PulseAudio との互換性
apulseAUR を使うことで PulseAudio にしか対応していないアプリケーションで ALSA を利用することができます。使用方法は $ apulse yourapplication とアプリケーションを起動するだけです。
ALSA と systemd
alsa-utils パッケージには、それぞれ起動時とシャットダウン時に動くように設定された alsa-restore.service と alsa-state.service が含まれています。
自動的にインストールされ有効化されるため、特に設定は必要ありません。systemctl を使うことでステータスを確認できます。
ALSA ファームウェア
alsa-firmware パッケージには特定のサウンドカードを使うのに必要なファームウェアが含まれています (例: Creative SB0400 Audigy2)。
チャンネルのミュートを解除する
現在のバージョンでは ALSA をインストールしたあと全てのチャンネルはデフォルトでミュートされています。手動でチャンネルをアンミュートする必要があります。
amixer を使ってミュートを解除
コマンドラインで amixer を使うことでサウンドカードのマスターボリュームのミュートを解除できます:
$ amixer sset Master unmute
alsamixer を使ってミュートを解除
alsamixer ncurses UI を使えば簡単にミュートを解除できます:
$ alsamixer
alsamixer の、チャンネルの下の MM ラベルはそのチャンネルがミュートになっていることを示しています。00 はミュートが解除されていることを示しています。
← や → キーを押して Master や PCM チャンネルに移動して m キーを押してミュートを解除してください。↑ キーを押してボリュームを上げて値を 0 dB ゲインにしてください。ゲインは左上の 項目: の隣に表示されます。
5.1/7.1 サウンドのミュートの解除
5.1 または 7.1 サラウンドを鳴らしたいときは Front, Surround, Center, LFE (サブウーファー), Side などの他のチャンネルも同じようにミュートを解除してください(これらのチャンネル名は Intel HD Audio のものです、チャンネル名はハードウェアによって変わっているかもしれません)。
マイクの有効化
マイクロフォンを有効にするには、Capture タブに F4 で切り替えてチャンネルを Space で有効にしてください。マイクが使えない時は Advanced Linux Sound Architecture/トラブルシューティング#マイクロフォン を見て下さい。
テスト
次に、音が鳴るかテストしてみましょう:
$ speaker-test -c 2
-c はスピーカーによって変えて下さい。例えば 7.1 では -c 8 を使います:
$ speaker-test -c 8
間違ったデバイスから音が出力される場合、-D 引数を使って手動でデバイスを指定してみてください:
$ speaker-test -D default:PCH -c 8
-D では PCM チャンネルの名前を値として指定できます。以下のコマンドで確認することができます:
$ aplay -L | grep :CARD
default:CARD=PCH # 'default:PCH' is the PCM channel name for -D sysdefault:CARD=PCH front:CARD=PCH,DEV=0 surround21:CARD=PCH,DEV=0 surround40:CARD=PCH,DEV=0 surround41:CARD=PCH,DEV=0 surround50:CARD=PCH,DEV=0 surround51:CARD=PCH,DEV=0 surround71:CARD=PCH,DEV=0
音が出ない場合、#設定や Advanced Linux Sound Architecture/トラブルシューティングに進んで問題を解決してください。
ノート
- カードによってはアナログサウンドを聞くためにはデジタル出力をミュートする必要があります。Soundblaster Audigy LS では IEC958 チャンネルをミュートしてください。
- マシンによっては (Thinkpad T61 など)、Speaker チャンネルのミュートを解除する必要があります。
- マシンによっては (Dell E6400 など)、同じく
FrontやHeadphoneチャンネルのミュートを解除する必要があります。 - 再起動するとボリューム調整が元に戻ってしまう場合、root で alsamixer を実行してみて下さい。
設定
システムの設定ファイルは /etc/asound.conf で、ユーザー別の設定ファイルは ~/.asoundrc です。
デフォルトサウンドカードの設定
起動毎にサウンドカードの順番が変わってしまうときは、/etc/modprobe.d 内の .conf で終わるファイル (例: /etc/modprobe.d/alsa-base.conf) に順番を明記することができます。
例えば、mia サウンドカードを #0 にしたい場合は:
/etc/modprobe.d/alsa-base.conf
options snd slots=snd_mia,snd_hda_intel options snd_mia index=0 options snd_hda_intel index=1
$ cat /proc/asound/modules を使ってロードされているサウンドモジュールとその順番を取得してください。$ lsmod | grep snd を使ってデバイス・モジュールのリストを取得してください。この設定では snd_mia を使うサウンドカードと snd_hda_intel を使うサウンドカード (例: オンボード) を一枚づつ挿していると仮定しています。
index を -2 にすることで ALSA にカードを優先的に使わせないようにすることも可能です。Linux Mint や Ubuntu などのディストリビューションでは以下の設定を使うことで USB やその他の"一般的でない"ドライバに index 0 を与えないようにしています:
/etc/modprobe.d/alsa-base.conf
options bt87x index=-2 options cx88_alsa index=-2 options saa7134-alsa index=-2 options snd-atiixp-modem index=-2 options snd-intel8x0m index=-2 options snd-via82xx-modem index=-2 options snd-usb-audio index=-2 options snd-usb-caiaq index=-2 options snd-usb-ua101 index=-2 options snd-usb-us122l index=-2 options snd-usb-usx2y index=-2 options snd-pcsp index=-2 options snd-usb-audio index=-2
変更を反映させるには再起動する必要があります。
環境変数を使ってデフォルト PCM を選択する
設定ファイルで、以下を追加してください:
pcm.!default {
type plug
slave.pcm {
@func getenv
vars [ ALSAPCM ]
default "hw:Audigy2"
}
}
default の行はあなたのカードの名前に置き換える必要があります (ここでは Audigy2 を例にしています)。aplay -l で名前を取得することができ surround51 のように PCM を使うことも可能です。ただしマイクロフォンを使う必要がある場合は full-duplex PCM をデフォルトにすると良いでしょう。
これで環境変数 ALSAPCM を変更することでサウンドカードを選択できるようになります。カードを選択できない全てのプログラムで問題なく使えます。
例えば、mix51to20 という名前の downmix PCM を書いたときは mplayer を ALSAPCM=mix51to20 mplayer example_6_channel.wav で使うことができます。
ハードウェアを直接割り当てる
まずデフォルトに設定したいカード・デバイスの id を aplay -l で見つける必要があります:
$ aplay -l
**** List of PLAYBACK Hardware Devices **** card 0: Intel [HDA Intel], device 0: CONEXANT Analog [CONEXANT Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: Intel [HDA Intel], device 1: Conexant Digital [Conexant Digital] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: JamLab [JamLab], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 card 2: Audio [Altec Lansing XT1 - USB Audio], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
例えば、このリストの最後のエントリはカード ID 2,カード名 Audio でデバイス ID 0 です。このカードをデフォルトにするには、システム全体のファイル /etc/asound.conf かユーザー定義ファイル ~/.asoundrc のどちらかを使ってください。ファイルが存在しないときは作成する必要があります。そして以下のオプションを適切なカード・デバイス id を使って挿入して下さい。
pcm.!default {
type hw
card Audio #又はcard 2
hint
show on #幾つかのアプリケーションで必要
}
}
ctl.!default {
type hw
card Audio
}
pcm.dmixer {
type dmix
ipc_key 2048
slave {
pcm "hw:Audio"
}
}
pcm.dsnooper {
type dsnoop
ipc_key 2048
slave {
pcm "hw:Audio"
}
}
カードIDではなくカード名の使用をおすすめします。デバイスの順番に依存しないためです。
pcm.dmixerとpcm.dsnooperはミキシングが必要なアプリケーションの為の予備です。
例えば、chromium -alsa-output-device=pcm.dmixer -alsa-input-device=pcm.dsnooperでChromiumがミキシングを使えるようになります。
'pcm' オプションは音声の再生で使われるカード・デバイスに影響を与え、'ctl' オプションは alsamixer などのコントロールユーティリティで使われるカードに影響を与えます。
アプリケーション (mplayer など) を(再)起動すれば変更はすぐ適用されます。また、aplay などのコマンドを使ってテストすることが可能です。
$ aplay -D default:PCH your_favourite_sound.wav
asound 設定に関するエラーが表示される場合は、上流のドキュメント を確認して設定ファイルフォーマットの変更を確認してください。
サウンドモジュールがロードされていることを確かめる
udev が正しくサウンドカードを検知しているかチェックするには次のコマンドを実行してください:
$ lsmod | grep '^snd' | column -t
snd_hda_codec_hdmi 22378 4 snd_hda_codec_realtek 294191 1 snd_hda_intel 21738 1 snd_hda_codec 73739 3 snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel snd_hwdep 6134 1 snd_hda_codec snd_pcm 71032 3 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec snd_timer 18992 1 snd_pcm snd 55132 9 snd_hda_codec_hdmi,snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_timer snd_page_alloc 7017 2 snd_hda_intel,snd_pcm
出力が上と同じようになっていれば、サウンドドライバが首尾よく自動検出されています。
/dev/snd/ ディレクトリにデバイスファイルがあるか調べてもいいかもしれません:
$ ls -l /dev/snd
total 0 crw-rw---- 1 root audio 116, 0 Apr 8 14:17 controlC0 crw-rw---- 1 root audio 116, 32 Apr 8 14:17 controlC1 crw-rw---- 1 root audio 116, 24 Apr 8 14:17 pcmC0D0c crw-rw---- 1 root audio 116, 16 Apr 8 14:17 pcmC0D0p crw-rw---- 1 root audio 116, 25 Apr 8 14:17 pcmC0D1c crw-rw---- 1 root audio 116, 56 Apr 8 14:17 pcmC1D0c crw-rw---- 1 root audio 116, 48 Apr 8 14:17 pcmC1D0p crw-rw---- 1 root audio 116, 1 Apr 8 14:17 seq crw-rw---- 1 root audio 116, 33 Apr 8 14:17 timer
とにかく controlC0 や pcmC0D0p のようなデバイスがあれば、サウンドモジュールが正しくロードされていることを示しています。
そうなってないのなら、あなたのサウンドモジュールは正しく検出されていません。これを解決するには、手動でモジュールのロードを試して下さい:
- サウンドカードのモジュールを確認します: ALSA Soundcard Matrix モジュールには名前の前に 'snd-' が付きます (例:
snd-via82xx)。 - モジュールをロードします。
/dev/sndの中のデバイスファイルを確認したり(上述)、alsamixerやamixerに変化がないか調べて下さい。snd-NAME-OF-MODULEとsnd-pcm-ossを起動時にロードするよう設定して下さい。
S/PDIF 出力
S/PDIF はコンピュータとオーディオアンプを接続するときにしばしば使われるデジタルオーディオインターフェイスです (5.1/7.1 サラウンドのホームシアターなど)。
使用しているシェルにあわせて、シェルの設定ファイルに以下の行を追加してください:
amixer -c 0 cset name='IEC958 Playback Switch' on
カードのデジタル出力の名前は以下のコマンドで確認できます:
$ amixer scontrols
イコライザー
AlsaEqual を使う (UI あり)
alsaequalAUR パッケージをインストールしてください。
パッケージをインストールした後、以下を ALSA 設定ファイル (~/.asoundrc か /etc/asound.conf) に挿入してください:
ctl.equal {
type equal;
}
pcm.plugequal {
type equal;
# Modify the line below if you do not
# want to use sound card 0.
#slave.pcm "plughw:0,0";
#by default we want to play from more sources at time:
slave.pcm "plug:dmix";
}
#pcm.equal {
# If you do not want the equalizer to be your
# default soundcard comment the following
# line and uncomment the above line. (You can
# choose it as the output device by addressing
# it with specific apps,eg mpg123 -a equal 06.Back_In_Black.mp3)
pcm.!default {
type plug;
slave.pcm plugequal;
}
x86_64 環境で lib32-flashplugin[リンク切れ: アーカイブ: aur-mirror] を使用している場合、上記の設定では flash で音が鳴りません。以下の設定で flash の音を有効にできますが、pcm "hw:0,0" の行でサウンドカードを手動で指定する必要があります (利用可能なサウンドカードとカードのデバイス番号は aplay -l で確認できます):
/etc/asound.conf
pcm.dmixer {
type dmix
ipc_key 2048
slave {
pcm "hw:0,0"
buffer_size 16384
}
}
ctl.equal {
type equal;
}
pcm.equalizer {
type equal
slave.pcm "plug:dmixer"
}
pcm.!default {
type plug
slave.pcm equalizer
}
次のコマンドを使ってイコライザーを変更することができます:
$ alsamixer -D equal
設定ファイルはユーザーごとに違うので注意してください。~/.alsaequal.bin に保存されます。
AlsaEqual を異なるユーザーの mpd などのソフトウェアで使いたいときは、次を実行することで設定できます:
# su mpd -c 'alsamixer -D equal'
もしくは、ユーザーの home にある .alsaequal.bin のシンボリックリンクを作って下さい。
AlsaEqual の管理
alsaequal-mgrAUR パッケージをインストールしてください。
通常通りイコライザーを設定してください:
$ alsamixer -D equal
状態に満足したら、名前を付けて保存してください (例: "foo"):
$ alsaequal-mgr save foo
イコライザーの状態 "foo" は次のコマンドで戻すことができます:
$ alsaequal-mgr load foo
ゲームや映画、音楽のジャンル別、VoIP アプリなどそれぞれに合わせてイコライザーの状態を作成し、必要なときにリロードできます。
オプションの詳細は project page を見て下さい。
mbeq を使う
alsa-plugins, ladspa, swh-plugins パッケージをインストールしてください。
まだ ~/.asoundrc か /etc/asound.conf ファイルを作成していない場合は、どちらかを作成して以下を挿入して下さい:
/etc/asound.conf
pcm.eq {
type ladspa
# The output from the EQ can either go direct to a hardware device
# (if you have a hardware mixer, e.g. SBLive/Audigy) or it can go
# to the software mixer shown here.
#slave.pcm "plughw:0,0"
slave.pcm "plug:dmix"
# Sometimes you may need to specify the path to the plugins,
# especially if you have just installed them. Once you have logged
# out/restarted this should not be necessary, but if you get errors
# about being unable to find plugins, try uncommenting this.
#path "/usr/lib/ladspa"
plugins [
{
label mbeq
id 1197
input {
#this setting is here by example, edit to your own taste
#bands: 50hz, 100hz, 156hz, 220hz, 311hz, 440hz, 622hz, 880hz, 1250hz, 1750hz, 25000hz,
#50000hz, 10000hz, 20000hz
controls [ -5 -5 -5 -5 -5 -10 -20 -15 -10 -10 -10 -10 -10 -3 -2 ]
}
}
]
}
# Redirect the default device to go via the EQ - you may want to do
# this last, once you are sure everything is working. Otherwise all
# your audio programs will break/crash if something has gone wrong.
pcm.!default {
type plug
slave.pcm "eq"
}
# Redirect the OSS emulation through the EQ too (when programs are running through "aoss")
pcm.dsp0 {
type plug
slave.pcm "eq"
}
高品質なリサンプリング
ソフトウェアミキシングが有効になっていると、ALSA は全てを同じ周波数 (デフォルトで 48000) にリサンプリングします。dmix はサウンドの品質を落としてしまう低品質リサンプリングアルゴリズムを使っています。
alsa-plugins と libsamplerate をインストールして下さい。
デフォルトの変換器を libsamplerate に変更します:
/etc/asound.conf
defaults.pcm.rate_converter "samplerate_best"
または:
~/.asoundrc
defaults.pcm.rate_converter "samplerate_best"
samplerate_best は最高のサウンド品質を提供しますが、リアルタイムサンプリングをするには CPU サイクルが大量に必要になるので使うにはそこそこの CPU が必須です。また、dmix の設定で buffer_size を基本の 4096 から 8192 か 16384 に調整する必要もあるかもしれません。他のアルゴリズム (samplerate など) も利用できますがデフォルトのリサンプラーに比べておそらくあまり改善はないでしょう。
アップ・ダウンミキシング
アップミキシング
音楽などのステレオ音源を 5.1 や 7.1 サウンドシステムをフルに使って再生するには、アップミキシングを使う必要があります。黎明期ではこれをするのはとても難しいものでした。ですが現在では簡単にアップミキシングができるプラグインがあります。alsa-plugins に含まれている upmix プラグインを使います。
それから以下を ALSA 設定ファイル (/etc/asound.conf か ~/.asoundrc) に追加してください:
pcm.upmix71 {
type upmix
slave.pcm "surround71"
delay 15
channels 8
}
上の例は 7.1 のものですが 5.1 や 4.0 にも簡単に変えられます。
設定をするとアップミキシングに使う新しい pcm が加わります。全てのサウンド音源をこの pcm に通したい時は、次のようにデフォルトとして追加してください:
pcm.!default "plug:upmix71"
このプラグインは使うにあたって特に設定を変える必要はありません。 プラグインが動作しないときは、以下のようにしてアップミキシングする PCM のための dmixer を自分で設定してください:
pcm.dmix6 {
type asym
playback.pcm {
type dmix
ipc_key 567829
slave {
pcm "hw:0,0"
channels 6
}
}
}
そして "surround71" のかわりに "dmix6" を使って下さい。 音がスキップしたり歪むときは、buffer_size を増やす (例: 32768) か 高品質リサンプラーを使ってください。
ダウンミキシング
5.1 サウンドの映画をステレオシステムで視聴するときなど、音源をステレオにダウンミキシングしたい場合、alsa-plugins に含まれている vdownmix プラグインを使って下さい。
設定ファイルに以下を追加して下さい:
pcm.!surround51 {
type vdownmix
slave.pcm "default"
}
pcm.!surround40 {
type vdownmix
slave.pcm "default"
}
ミキシング
ミキシングを使うことで複数のアプリケーションが同時に音を出力することが可能になります。外付けのサウンドカードはほとんどの場合ハードウェアミキシングをサポートしており、可能であればデフォルトで有効にされます。内蔵のマザーボードに載っているサウンドカード (Intel HD Audio など) は基本的にハードウェアミキシングをサポートしていません。そのようなカードでは、dmix という名前の ALSA プラグインを使ってソフトウェアミキシングを利用します。この機能はハードウェアミキシングが使えない場合に自動で有効にされます。
手動で dmix を有効にする
ソフトウェアミキシングが動作しない場合は、あなたの home フォルダに以下の内容で .asoundrc ファイルを作成してください。
pcm.dsp {
type plug
slave.pcm "dmix"
}
これでソフトウェアミキシングが有効になり複数のアプリケーションがサウンドカードを使えるようになるはずです。使えない場合は、/etc/asound.conf の中身を全て上のように置き換えてみて下さい。
S/PDIF などのデジタル音声出力をするために、ALSA パッケージは依然として dmix をデフォルトで有効にしていません。そのため、上の dmix 設定は S/PDIF デバイスで dmix を有効にするために使うことはできません。
一般的な問題と解決方法は Advanced Linux Sound Architecture/トラブルシューティング を見て下さい。
ハードウェアミキシング
サポート
ハードウェアでミキシングをサポートしているオーディオチップセットを持っている場合、設定は必要ありません。ほとんど全てのオンボード・オーディオチップセットはハードウェアミキシングをサポートしていないので、ソフトウェアでミキシングする必要があります(上述)。ハードウェアミキシングをサポートしているサウンドカードは少なく、Linux でサポートされているサウンドカードは以下になります:
- Creative SoundBlaster Live! (5.1 モデル)
- Creative SoundBlaster Audigy (複数)
- Creative SoundBlaster Audidy 2 (ZS モデル)
- Creative SoundBlaster Audigy 4 (Pro モデル)
フィックス
64-bit Arch で Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 02) を使っている場合、Enemy Territory でサウンドを鳴らすには以下を実行して下さい:
echo "et.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss echo "et.x86 0 0 disable" > /proc/asound/card0/pcm0c/oss
ヒントとテクニック
USB サウンドカードのホットプラグ
USB サウンドカードが挿入されたときに、自動的に第一のアウトプットデバイスにするために、以下の udev ルールを使うことができます (例: 以下の2行を /etc/udev/rules.d/00-local.rules に追加して再起動する)。
KERNEL=="pcmC[D0-9cp]*", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k; K=$${K#pcmC}; K=$${K%%D*}; echo defaults.ctl.card $$K > /etc/asound.conf; echo defaults.pcm.card $$K >>/etc/asound.conf'"
KERNEL=="pcmC[D0-9cp]*", ACTION=="remove", PROGRAM="/bin/sh -c 'echo defaults.ctl.card 0 > /etc/asound.conf; echo defaults.pcm.card 0 >>/etc/asound.conf'"
同時出力
ミニジャックで接続した外付けスピーカーと内蔵のスピーカーで同時に音楽を再生したい場合、alsamixer や amixer を使うことで Auto-Mute のミュートを解除してください:
$ amixer sset "Auto-Mute" unmute
そして Headphones, Speaker, Bass Speaker など他の必要なアイテムのミュートを解除してください。
キーボードのボリュームコントロール
以下のコマンドをボリュームキーにマッピングしてください: XF86AudioRaiseVolume, XF86AudioLowerVolume, XF86AudioMute
ボリュームを上げるには:
amixer set Master 5%+
ボリュームを下げるには:
amixer set Master 5%-
トラブルシューティング
Advanced Linux Sound Architecture/トラブルシューティングを見て下さい。
設定例
Advanced Linux Sound Architecture/設定例を見て下さい。