Gentoo Linux ALSA ガイド
1.
初めに
ALSAって何?
ALSAとはAdvanced Linux Sound Architectureのことで、LinuxシステムにオーディオやMIDI(Musical Instrument Digital Interface)機能を提供します。
ALSAは2.6カーネルのデフォルトサウンドシステムであり、2.4カーネルで使用されていたOSS(Open Sound System)と置き換わっています。
ALSAの主要な機能は、一般的なサウンドカードからプロ仕様のサウンド装置まで多岐にわたる全てのオーディオインターフェースを能率的にサポートしていること、完全にモジュール化されたドライバ、SMPとスレッドへの対応、OSSとの下位互換性、そしてアプリケーション開発を簡単にするユーザスペースライブラリのalsa-libがあります。
GentooでのALSA
歴史的に、GentooはALSAを立ち上げ動作させる方法を2通り提供していました。
それは、カーネル内部のドライバと外部のalsa-driverパッケージです。
2つの方法は本質的に同じことをしています。
このことが他のパッケージのサポートを難しくし、また時間を浪費させる原因となっていました。
そこで、Gentooのメンテナはalsa-driverパッケージを廃止し、Linuxカーネル内で入手できるALSAドライバに資源を集中させる決定を下しました。
このガイドはカーネル付属のドライバによるALSAの設定だけに焦点を絞っています。
もしまだalsa-driverパッケージを必要としているなら、なぜカーネル付属のドライバが動かないのかGentooのALSAメンテナにメールを送ってください。
必ず詳細なエラーログも添付してください。
2.
ALSAのインストール
取りかかる前に
最初に、サウンドカードがどのドライバを使うのか知る必要があります。
ほとんどの場合、サウンドカード(オンボードやそれ以外)はPCIで接続されており、lspciを使うことにより必要な情報を得ることが出来ます。
もしlspciがまだインストールされていなければ、emerge sys-apps/pciutilsを行ってインストールしてください。
USBサウンドカードを使っている場合は、sys-apps/usbutilsのlsusbが手助けになるかもしれません。
ISAカードでは、sys-apps/isapnptoolsを使ってみてください。
また、以下のページはISAのサウンドカードユーザの助けとなるかもしれません。
Note:
使用や説明を簡単にするために、これ以降はユーザはPCIのサウンドカードを使用していると仮定します。
|
ではサウンドカードの詳細を見てみましょう。
Code Listing 2.1: サウンドカードの詳細 |
# lspci -v | grep -i audio
0000:00:0a.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 06)
|
以上の結果より、マシンのサウンドカードがSound Blaster Live!で、製造元がCreative Labsであることが分かります。
ALSA Soundcard Matrixへ行き、ドロップダウンメニューからCreative Labsを選びましょう。
Creative Labsの一覧表が表示され、SB Live!はemu10k1モジュールを使っていることが分かります。
これが現在必要な情報です。
もし詳細な情報に興味があるなら、"Details"のリンクをクリックし、emu10k1のページを見てください。
もしMIDIを利用するつもりなら、どんなALSAパッケージもemergeする前に/etc/make.confのUSEフラグにmidiを加えるべきです。
このガイドの後の方でMIDIサポートの設定方法を示します。
カーネルの設定
Note:
2005.0リリースから、Gentoo Linuxは2.6カーネルをデフォルトカーネルとして使用します。
あなたのカーネルが2.6シリーズのカーネルかを確認してください。
この方法は2.4カーネルでは動作しません。
|
ではALSAを有効にするためにカーネルを設定しましょう。
Important:
genkernelユーザはgenkernel --menuconfig allを実行し、ALSAのためのカーネルオプションの指示に従うべきです。
|
Code Listing 2.2: ソースへと向かう |
# cd /usr/src/linux
# make menuconfig
|
Note:
上記の例では/usr/src/linuxのシンボリックリンクが使用したいカーネルをさしていると仮定しています。
先へ進む前に、そのようになっていることを確認してください。
|
では、ALSAがサウンドカードをサポートするようにする為に2.6カーネルで有効にするオプションを見ていきましょう。
簡単にするために全ての例ではALSAをモジュールとしてビルドするということに注意してください。
以下の説明と同じように行い、カードを設定するときに便利であるalsaconfを使用することが推奨されています。
このドキュメントの設定の章を飛ばさないでください。
それでもなおカーネル内部にビルドするオプションを選択したいのなら、設定をその通りに確実に変更してください。
Code Listing 2.3: ALSAのためのカーネルオプション |
Device Drivers --->
Sound --->
<M> Sound card support
Open Sound System --->
< > Open Sound System (DEPRECATED)
Advanced Linux Sound Architecture --->
<M> Advanced Linux Sound Architecture
<M> Sequencer support
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
Generic devices --->
ISA devices --->
<M> Gravis UltraSound Extreme
PCI devices --->
<M> Emu10k1 (SB Live!, Audigy, E-mu APS)
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
<M> VIA 82C686A/B, 8233/8235 AC97 Controller
USB Devices --->
|
これで必要なオプションを設定したので、カーネルを再コンパイルし新しいカーネルで再起動することにより、ALSAサポートが機能します。
GRUBの設定が新しいカーネルを使用するよう更新することを忘れないでください。
ALSAユーティリティへ進み、全てがあるべき様に動作しているか確認してください。
3.
ALSAの設定とテスト
ALSAユーティリティ
ALSAの必要不可欠な部分であるalsa-utilsには、ALSA Initスクリプトを含む非常に役に立つプログラムがたくさん入っています。
そのため、alsa-utilsをインストールすることを強く推奨します。
Code Listing 3.1: alsa-utilsのインストール |
# emerge alsa-utils
|
Note:
もしALSAをモジュールとしてコンパイルしていなければ、ALSA Initスクリプトの章へ進んでください。
必要なことはALSAの設定だけです。
alsa-utilsによって提供されるalsaconfツールを使用することによって簡単に行うことが出来ます。
|
設定
最近のバージョンのudev(>=udev-103)はある程度カーネルレベルでサウンドカードの自動設定機能を提供します。
可能ならサウンドーカードをカーネルの自動設定のみに任せてみてください。
そうでなければ、以下で述べるように、alsaconfを使って設定してください。
Note:
alsaconf実行中は、サウンドカードにアクセスする可能性のある全てのプログラムを終了してください。
|
サウンドカードを設定するために、rootとなってシェル上でalsaconfと入力してください。
Code Listing 3.2: alsaconfの起動 |
# alsaconf
|
自動的にデバイスを検索し、サウンドカードを発見しようとする、すっきりとしたインターフェースが表示されるでしょう。
一覧からサウンドカードを選択するよう言われるでしょう。
完了したら、/etc/modules.d/alsaの必要な修正を自動的に行う許可を尋ねられるでしょう。
その後ボリューム設定を最適なレベルに合わせ、update-modulesを起動して/etc/init.d/alsasoundサービスを開始します。
alsaconfが終了したら、ALSA initスクリプトの設定に進むことが出来ます。
ALSA Initスクリプト
ほとんどの設定を終えました。どちらのALSAをインストールする方法を選んだにせよ、システム起動時にモジュールを読み込むかALSAを初期化し、ボリュームの設定を復元するようにしなければならないでしょう。
alsasoundと呼ばれるALSA Initスクリプトはこれを全て行います。
これをboot runlevelに追加します。
Code Listing 3.3: ALSAをboot runlevelに追加 |
# rc-update add alsasound boot
* alsasound added to runlevel boot
* rc-update complete.
|
次に、/etc/conf.d/alsasoundファイルでSAVE_ON_STOP変数がyesになっていることを確認します。
これはシステム終了時にサウンド設定を保存するための物です。
Audioグループ
テストに移る前に、最後の重要な設定があります。
*nix OSでの経験に基づいて、必要でないときにはrootであるべきではありません。
これはここでも同じように当てはまります。
どうするかって?
たいていの場合、ユーザとしてログインし、音楽を聴くかサウンドカードにアクセスしたいでしょう。
その場合、"audio"グループに入っていなければなりません。
そのため、ユーザがサウンドデバイスにアクセスしたいときに問題が起こらないように、audioグループに追加します。
ここではgpasswdを使いますが、この作業のためにrootとしてログインしなければなりません。
Code Listing 3.4: ユーザをaudioグループに追加 |
# gpasswd -a <username> audio
Adding user <username> to group audio
|
ボリュームの確認
全ての設定と下準備を終えましたので、ALSAを起動しましょう。
alsaconfを実行したのなら、alsaconfが既に行っているためこの段階を飛ばすことが出来ます。
Code Listing 3.5: サービスの開始 |
# /etc/init.d/alsasound start
|
これで必要な物が準備されました。
場合によっては、ミュートになっていることがあるので、ボリュームを確認する必要があります。
これを行うためにalsamixerを使います。
Code Listing 3.6: alsamixerの起動 |
# alsamixer
|
Important:
もしalsamixerの起動に問題があり、alsamixerが"function snd_ctl_open failed for default"や"No such file or directory"というエラーを表示したのなら、たいていudevのデバイス設定の問題です。
killall udevd; udevstartを実行して/devエントリを再読込し、alsamixerを起動してください。
これで問題が解決するでしょう。
|
これがALSA Mixerの初回起動でしょう。
MasterとPCMチャンネルの両方の下にMMとあることに注意してください。
これはミュートになっていると言うことです。
この状態でalsamixerで何かを再生しようとしても、スピーカーからは何も聞こえてこないでしょう。
Figure 3.1: ミュート状態のAlsa Mixerのメイン画面 |
 |
では、チャンネルのミュートを解除し、ボリュームレベルを適正な値に設定しましょう。
Warning:
スピーカーから何かを再生したいのなら、MasterとPCMの両方がミュート解除され、ボリュームレベルが聞こえる値に設定されていなければなりません。
|
-
チャンネル間を移動するには、左右の矢印キーを使用します。(<- & ->)
-
ミュートを変更するには、Master等のチャンネルに移動し、キーボードのmを押します。
-
ボリュームレベルを上下させるには、上下の矢印キーを使用します。
Note:
BassとTrebleの値を設定するときには注意してください。
どちらも普通は50が最適な値です。
Bassの値を極端に大きくすると、スピーカーから意図しない不快音が発生します。
|
全ての作業が終わったら、ALSA Mixerは以下のようになっているはずです。
MMの代わりに00となっており、ボリュームレベルが適正値になっていることに注意してください。
Figure 3.2: Alsa Mixerは準備完了 |
 |
サウンドテストをしよう!
最後に、音楽を流してみましょう。
ここまで完璧であれば、素晴らしい音楽を聴くことが出来るはずです。
テストを行う簡単な方法は、media-sound/madplayの様なコマンドラインツールを使うことです。
mpg123の様なよく知られている物も使用することが出来ます。
oggのファンなら、media-sound/vorbis-toolsからogg123を使用することも出来ます。
最適なプレーヤーを使用します。
いつものように、必要な物をemergeします。
Code Listing 3.7: ソフトウェアを入手する |
# emerge madplay mpg123
# emerge vorbis-tools
|
では、お気に入りのサウンドトラックを再生しましょう。
Code Listing 3.8: 音楽の再生 |
# madplay -v /mnt/shyam/Music/Paul\ Oakenfold\ -\ Dread\ Rock.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
Title: Dread Rock
Artist: Paul Oakenfold
Album: Matrix Reloaded
Year: 2003
Genre: Soundtrack
Soundtrack
00:04:19 Layer III, 160 kbps, 44100 Hz, joint stereo (MS), no CRC
# ogg123 Paul\ Oakenfold\ -\ Dread\ Rock.ogg
Audio Device: Advanced Linux Sound Architecture (ALSA) output
Playing: Paul Oakenfold - Dread Rock.ogg
Ogg Vorbis stream: 2 channel, 44100 Hz
Genre: Soundtrack
Transcoded: mp3;160
Title: Dread Rock
Artist: Paul Oakenfold
Date: 2003
Album: Matrix Reloaded
Time: 00:11.31 [04:28.75] of 04:40.06 (200.6 kbps) Output Buffer 96.9%
|
ALSAとUSE
アプリケーションがALSAをサポートするように、/etc/make.confにalsaのUSEフラグを追加することが出来ます。
x86やamd64の様ないくつかのアーキテクチャではデフォルトで有効になっています。
問題ですか?
もし何らかの原因で音が鳴らなければ、まず行うべき事はalsamixerの設定の確認です。
問題の80%は、チャンネルがミュートされているかボリューム設定が低すぎることが原因です。
Window Managerのサウンドアプレットも確認し、ボリュームが聞こえるレベルにになっているかを確認してください。
/procはあなたの友です。
そしてこの場合、/proc/asoundがあなたの親友です。
ここでどれくらいの情報が利用できるかを見てみましょう。
Code Listing 3.9: /proc/asoundと遊ぶ |
# cat /proc/asound/cards
0 [Live ]: EMU10K1 - Sound Blaster Live!
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
# cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version 1.0.8 (Thu Jan 13 09:39:32 2005 UTC).
# cat /proc/asound/oss/sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.8 emulation code)
Kernel: Linux airwolf.zion 2.6.11ac1 #2 Wed May 4 00:35:08 IST 2005 i686
Config options: 0
Installed drivers:
Type 10: ALSA emulation
Card config:
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
Audio devices:
0: EMU10K1 (DUPLEX)
Synth devices: NOT ENABLED IN CONFIG
Midi devices:
0: EMU10K1 MPU-401 (UART)
Timers:
7: system timer
Mixers:
0: SigmaTel STAC9721/23
|
他の最も一般的な問題は、恐るべき"Unknown symbol in module"エラーです。
以下に例を示します。
Code Listing 3.10: Unknown Symbol in moduleエラー |
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Loading: snd-card-0 ... [ ok ]
* Loading: snd-pcm-oss ...
WARNING: Error inserting snd_mixer_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-mixer-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg) FATAL: Error inserting
snd_pcm_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-pcm-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg)
[ !! ]
* Loading: snd-mixer-oss ...
FATAL: Error inserting snd_mixer_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-mixer-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg)
[ !! ]
* Loading: snd-seq ... [ ok ]
* Loading: snd-emu10k1-synth ... [ ok ]
* Loading: snd-seq-midi ... [ ok ]
* Restoring Mixer Levels ... [ ok ]
|
そして提示されたとおりdmesgを見てみると、この様に表示されているでしょう。
Code Listing 3.11: dmesgの出力 |
# dmesg | less
ACPI: PCI Interrupt 0000:02:06.0[A] -> Link [APC3] -> GSI 18 (level, low) -> IRQ 209
snd_mixer_oss: Unknown symbol snd_unregister_oss_device
snd_mixer_oss: Unknown symbol snd_register_oss_device
snd_mixer_oss: Unknown symbol snd_mixer_oss_notify_callback
snd_mixer_oss: Unknown symbol snd_oss_info_register
snd_pcm_oss: Unknown symbol snd_unregister_oss_device
snd_pcm_oss: Unknown symbol snd_register_oss_device
snd_pcm_oss: Unknown symbol snd_mixer_oss_ioctl_card
snd_pcm_oss: Unknown symbol snd_oss_info_register
snd_mixer_oss: Unknown symbol snd_unregister_oss_device
snd_mixer_oss: Unknown symbol snd_register_oss_device
snd_mixer_oss: Unknown symbol snd_mixer_oss_notify_callback
snd_mixer_oss: Unknown symbol snd_oss_info_register
|
この問題は、alsa-driverからカーネル組み込みのALSAに変更したときに起こります。
原因は、alsa-driverをunmergeする際にモジュールファイルが設定を保護し、そのため削除し忘れてしまったためです。
そのため、カーネル組み込みのドライバに変更する際にmodprobeを実行すると、alsa-driverとカーネル組み込みのモジュールを混ぜてしまい、上記のエラーが引き起こされてしまうのです。
解決方法はとても簡単です。
alsa-driverのunmerge後に問題を起こすディレクトリを手動削除すればいいだけです。
正しいカーネルバージョンの物を削除するようにしてください。現在の物を削除しないように!
Code Listing 3.12: alsa-driverモジュールの削除 |
# rm -rf /lib/modules/$(uname -r)/alsa-driver
|
上記と似たエラーメッセージで、その他の原因としては、/etc/modules.dの中のファイルの中で、
不必要な場合にdevice_modeパラメータが宣言されている場合が考えられます。
これが本当に問題か確認し、どのファイルが原因かを調査しましょう。
Code Listing 3.13: device_modeの確認と検索 |
# dmesg | grep device_mode
snd: Unknown parameter `device_mode'
# grep device_mode /etc/modules.d/*
|
たいてい、options snd device_mode=0666と書かれた行があるalsaと呼ばれるファイルがあります。
この行を削除し、alsasoundサービスを再起動します。
そして、この問題がないか再度確認してください。
4.
ALSAのその他
MIDIサポートの設定
最初に、/etc/make.confでmidiのUSEフラグを有効にしているか必ず確認してください。
もし有効なっていなければ、すぐに追加してください。
そして、alsa-libやalsa-utilsのようなmidiフラグを使用するALSAパッケージをすべて再emergeする必要があります。
サウンドカードがオンボードMIDIシンセサイザーを搭載しており、.midファイルを再生したいのなら、AWE32ドライバを制御するための基本的なユーティリティのセットであるawesfxをインストールする必要があります。
まずこれをインストールします。ハードウェアシンセサイザーが搭載されていなければ、仮想的な物を使用することが出来ます。
詳しい情報は仮想シンセサイザーの章を参照してください。
Code Listing 4.1: awesfxのインストール |
# emerge awesfx
|
Note:
サウンドカードのドライバCDやWindowsインストーラからサウンドフォント(SF2)ファイルを/usr/share/sounds/sf2/へとコピーする必要があります。
例えば、Creative SBLive!用のサウンドフォントファイルは8MBGMSFX.SF2です。
|
サウンドフォントファイルをコピーしたら、midiを再生することが出来ます。
asfxloadコマンドを/etc/conf.d/local.startに追加することで、システムの起動時にサウンドフォントファイルが自動的に読み込まれます。
Note:
以下のコードに記されている/mntパスはあなたのマシンで同じだとは限りません。
これは単なる例です。
マシンに合うようにパスを変更してください。
|
Code Listing 4.2: サウンドフォントの読み込み |
# cp /mnt/win2k/Program\ Files/CreativeSBLive2k/SFBank/8MBGMSFX.SF2 /usr/share/sounds/sf2/
# cp /mnt/cdrom/AUDIO/ENGLISH/SFBANK/8MBGMSFX.SF2 /usr/share/sounds/sf2/
# asfxload /usr/share/sounds/sf2/8MBGMSFX.SF2
|
これでaplaymidiの様なプログラムを使用してmidiファイルを再生することが出来るようになりました。
aplaymidi -lを実行して利用可能なポートの一覧を表示し、ポートを選んでファイルを再生しましょう。
Code Listing 4.3: MIDIの再生 |
# aplaymidi -l
Port Client name Port name
64:0 EMU10K1 MPU-401 (UART) EMU10K1 MPU-401 (UART)
65:0 Emu10k1 WaveTable Emu10k1 Port 0
65:1 Emu10k1 WaveTable Emu10k1 Port 1
65:2 Emu10k1 WaveTable Emu10k1 Port 2
65:3 Emu10k1 WaveTable Emu10k1 Port 3
# aplaymidi --port=65:0 /mnt/shyam/music/midi/mi2.mid
|
仮想シンセサイザー
サウンドカードにハードウェアシンセサイザーが無ければ、timidity++の様な仮想的な物を使用します。
インストールは非常に簡単です。
Code Listing 4.4: timidity++のインストール |
# emerge timidity++
|
timidityで音楽を再生するには、サウンドフォントが必要です。
幸い、ebuildでいくつかのサウンドフォントパッケージをインストールすることが可能です。
timidity-freepatsやtimidity-eawpatchesの様にPortageで利用可能な異なるフォントパッケージがいくつか存在します。
複数のサウンドフォント設定をインストールすることが出来、/usr/share/timidity/に置くことが出来ます。
複数のtimidity設定を切り替えるには、eselectツールを使用します。
Code Listing 4.5: 設定の変更 |
# eselect timidity list
# eselect timidity set eawpatches
|
timidityをデフォルトランレベルに追加することを忘れないでください。
Code Listing 4.6: timidityをデフォルトランレベルに追加 |
# rc-update add timidity default
# /etc/init.d/timidity start
|
MIDIの再生を試すことが出来ます。
ツールとファームウェア
いくつかのサウンドカードではalsa-toolsとalsa-firmwareが提供するいくつかのツールが役立ちます。
単純にemergeを使用することで、どちらもインストール出来るでしょう。
Code Listing 4.7: ALSA Toolsのインストール |
# emerge alsa-tools
|
ALSA_TOOLS変数が設定されていなければ、全ての利用可能なツールがビルドされます。
では、alsa-tools(またはalsa-firmware)パッケージをインストールします。
Code Listing 4.8: ALSA Toolsのインストール |
# emerge alsa-tools
|
複数のサウンドカード
カーネルでALSAをモジュールとして組み込んでいれば、システムで同時にひとつ以上のサウンドカードを持つことができます。
必要なのは/etc/modules.d/alsaにどれが最初に起動するか記述することだけです。
サウンドカードはこのファイルの中で、それらが使用するドライバの名前によって識別されます。
0は最初のカード、1はその次のカードです。
これは2つのサウンドカードを持つシステムの例です。
Code Listing 4.9: 2つのサウンドカードがあるときの/etc/modules.d/alsa |
options snd-emu10k1 index=0
options snd-via82xx index=1
|
あるいは、同じドライバを使用する2つのサウンドカードを持っているなら、それらをカンマで区切って同じ行に書いてください。
これは3つのサウンドカードのうち2つが同じIntel High Definition Audioカードのときの例です。
Code Listing 4.10: 複合的なサウンドカードがあるときの/etc/modules.d/alsa |
options snd-ymfpci index=0
options snd-hda-intel index=1,2
|
プラグイン
特別な機能を求めて、プラグインをいくつかインストールすることもあるでしょう。
alsa-pluginsは有用なプラグインのコレクションで、PulseAudio出力、サンプリングレートの変換、jack(低遅延サウンドサーバ)、そして、デジタルS/PDIF接続を通した6チャンネルオーディオ出力を可能にするエンコーダが含まれています。
あなたは/etc/portage/package.useにそれらのUSEフラグ追加することで、欲しいプラグインを選ぶことが出来ます。
Code Listing 4.11: alsa-pluginsのインストール |
# emerge -avt alsa-plugins
|
謝辞
以前のバージョンのGentoo ALSAガイドに協力してくださった皆さん。Vincent Verleye、Grant Goodyear、Arcady Genkin、Jeremy Huddleston、John P. Davis、ven Vermeulen、Benny Chuang、Tiemo Kieft、Erwin。
以前のバージョンのGentoo ALSAガイドを翻訳してくださったMasanori IwasakiさんとYasumichi Akahoshiさん。
参考文献
The contents of this document are licensed under the Creative Commons -
Attribution / Share Alike license.
|