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を立ち上げ動作させる方法を2通り提供していました。 それは、カーネル内部のドライバと外部のalsa-driverパッケージです。 2つの方法は本質的に同じことをしています。 このことが他のパッケージのサポートを難しくし、また時間を浪費させる原因となっていました。 そこで、Gentooのメンテナはalsa-driverパッケージを廃止し、Linuxカーネル内で入手できるALSAドライバに資源を集中させる決定を下しました。 このガイドはカーネル付属のドライバによるALSAの設定だけに焦点を絞っています。
もしまだalsa-driverパッケージを必要としているなら、なぜカーネル付属のドライバが動かないのかGentooのALSAメンテナにメールを送ってください。 必ず詳細なエラーログも添付してください。
最初に、サウンドカードがどのドライバを使うのか知る必要があります。 ほとんどの場合、サウンドカード(オンボードやそれ以外)はPCIで接続されており、lspciを使うことにより必要な情報を得ることが出来ます。 もしlspciがまだインストールされていなければ、emerge sys-apps/pciutilsを行ってインストールしてください。 USBサウンドカードを使っている場合は、sys-apps/usbutilsのlsusbが手助けになるかもしれません。 ISAカードでは、sys-apps/isapnptoolsを使ってみてください。 また、以下のページはISAのサウンドカードユーザの助けとなるかもしれません。
注意: 使用や説明を簡単にするために、これ以降はユーザはPCIのサウンドカードを使用していると仮定します。 |
ではサウンドカードの詳細を見てみましょう。
コード表示 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サポートの設定方法を示します。
注意: 2005.0リリースから、Gentoo Linuxは2.6カーネルをデフォルトカーネルとして使用します。 あなたのカーネルが2.6シリーズのカーネルかを確認してください。 この方法は2.4カーネルでは動作しません。 |
ではALSAを有効にするためにカーネルを設定しましょう。
重要: genkernelユーザはgenkernel --menuconfig allを実行し、ALSAのためのカーネルオプションの指示に従うべきです。 |
コード表示 2.2: ソースへと向かう |
# cd /usr/src/linux # make menuconfig |
注意: 上記の例では/usr/src/linuxのシンボリックリンクが使用したいカーネルをさしていると仮定しています。 先へ進む前に、そのようになっていることを確認してください。 |
では、ALSAがサウンドカードをサポートするようにする為に2.6カーネルで有効にするオプションを見ていきましょう。
簡単にするために全ての例ではALSAをモジュールとしてビルドするということに注意してください。 以下の説明と同じように行い、カードを設定するときに便利であるalsaconfを使用することが推奨されています。 このドキュメントの設定の章を飛ばさないでください。 それでもなおカーネル内部にビルドするオプションを選択したいのなら、設定をその通りに確実に変更してください。
コード表示 2.3: ALSAのためのカーネルオプション |
Device Drivers ---> Sound ---> (これを有効にする必要があります) <M> Sound card support (確実にOSSを無効にしてください) Open Sound System ---> < > Open Sound System (DEPRECATED) (前に戻ってALSAに入ります) Advanced Linux Sound Architecture ---> <M> Advanced Linux Sound Architecture (MIDIシーケンスが必要ならこれを選択します) <M> Sequencer support (旧式の/dev/mixer*と/dev/dsp*をサポートします。推奨されています) <M> OSS Mixer API <M> OSS PCM (digital audio) API (サポートするデバイスを選ばなければなりません。 一般的には、1種類だけを選べば良く、それ以上は必要ありません。 2つ以上のサウンドカードを持っているのなら、全てを有効にしてください。) (主にテストと開発目的のためであり、何をしているのか知らないのであれば一般ユーザには必要ありません) Generic devices ---> (ISAサウンドカード用) ISA devices ---> (Gravisを持っているのなら、このオプションを選ぶべきです) <M> Gravis UltraSound Extreme (1段階戻ってPCIデバイスに入ります。現在のほとんどのサウンドカードはPCIデバイスです) PCI devices ---> (ここではemu10k1ドライバを選びます) <M> Emu10k1 (SB Live!, Audigy, E-mu APS) (Intelカードならこれを選びます) <M> Intel/SiS/nVidia/AMD/ALi AC97 Controller (VIAカードならこれを選びます) <M> VIA 82C686A/B, 8233/8235 AC97 Controller (USBサウンドカードを持っているのなら、1段階戻ってこれを選びます) USB Devices ---> |
これで必要なオプションを設定したので、カーネルを再コンパイルし新しいカーネルで再起動することにより、ALSAサポートが機能します。 GRUBの設定が新しいカーネルを使用するよう更新することを忘れないでください。 ALSAユーティリティへ進み、全てがあるべき様に動作しているか確認してください。
ALSAの必要不可欠な部分であるalsa-utilsには、ALSA Initスクリプトを含む非常に役に立つプログラムがたくさん入っています。 そのため、alsa-utilsをインストールすることを強く推奨します。
コード表示 3.1: alsa-utilsのインストール |
# emerge alsa-utils
|
注意: もしALSAをモジュールとしてコンパイルしていなければ、ALSA Initスクリプトの章へ進んでください。 必要なことはALSAの設定だけです。 alsa-utilsによって提供されるalsaconfツールを使用することによって簡単に行うことが出来ます。 |
最近のバージョンのudev(>=udev-103)はある程度カーネルレベルでサウンドカードの自動設定機能を提供します。 可能ならサウンドーカードをカーネルの自動設定のみに任せてみてください。 そうでなければ、以下で述べるように、alsaconfを使って設定してください。
注意: alsaconf実行中は、サウンドカードにアクセスする可能性のある全てのプログラムを終了してください。 |
サウンドカードを設定するために、rootとなってシェル上でalsaconfと入力してください。
コード表示 3.2: alsaconfの起動 |
# alsaconf
|
自動的にデバイスを検索し、サウンドカードを発見しようとする、すっきりとしたインターフェースが表示されるでしょう。 一覧からサウンドカードを選択するよう言われるでしょう。 完了したら、/etc/modules.d/alsaの必要な修正を自動的に行う許可を尋ねられるでしょう。 その後ボリューム設定を最適なレベルに合わせ、update-modulesを起動して/etc/init.d/alsasoundサービスを開始します。 alsaconfが終了したら、ALSA initスクリプトの設定に進むことが出来ます。
ほとんどの設定を終えました。どちらのALSAをインストールする方法を選んだにせよ、システム起動時にモジュールを読み込むかALSAを初期化し、ボリュームの設定を復元するようにしなければならないでしょう。 alsasoundと呼ばれるALSA Initスクリプトはこれを全て行います。 これをboot runlevelに追加します。
コード表示 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になっていることを確認します。 これはシステム終了時にサウンド設定を保存するための物です。
テストに移る前に、最後の重要な設定があります。 *nix OSでの経験に基づいて、必要でないときにはrootであるべきではありません。 これはここでも同じように当てはまります。 どうするかって? たいていの場合、ユーザとしてログインし、音楽を聴くかサウンドカードにアクセスしたいでしょう。 その場合、"audio"グループに入っていなければなりません。 そのため、ユーザがサウンドデバイスにアクセスしたいときに問題が起こらないように、audioグループに追加します。 ここではgpasswdを使いますが、この作業のためにrootとしてログインしなければなりません。
コード表示 3.4: ユーザをaudioグループに追加 |
(<username> をユーザに置き換えてください) # gpasswd -a <username> audio Adding user <username> to group audio |
全ての設定と下準備を終えましたので、ALSAを起動しましょう。 alsaconfを実行したのなら、alsaconfが既に行っているためこの段階を飛ばすことが出来ます。
コード表示 3.5: サービスの開始 |
# /etc/init.d/alsasound start
|
これで必要な物が準備されました。 場合によっては、ミュートになっていることがあるので、ボリュームを確認する必要があります。 これを行うためにalsamixerを使います。
コード表示 3.6: alsamixerの起動 |
(コンソールプログラムを起動します。必要な設定のみが表示されています。) # alsamixer |
重要: もし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で何かを再生しようとしても、スピーカーからは何も聞こえてこないでしょう。
図 3.1: ミュート状態のAlsa Mixerのメイン画面 |
![]() |
では、チャンネルのミュートを解除し、ボリュームレベルを適正な値に設定しましょう。
警告: スピーカーから何かを再生したいのなら、MasterとPCMの両方がミュート解除され、ボリュームレベルが聞こえる値に設定されていなければなりません。 |
注意: BassとTrebleの値を設定するときには注意してください。 どちらも普通は50が最適な値です。 Bassの値を極端に大きくすると、スピーカーから意図しない不快音が発生します。 |
全ての作業が終わったら、ALSA Mixerは以下のようになっているはずです。 MMの代わりに00となっており、ボリュームレベルが適正値になっていることに注意してください。
図 3.2: Alsa Mixerは準備完了 |
![]() |
最後に、音楽を流してみましょう。 ここまで完璧であれば、素晴らしい音楽を聴くことが出来るはずです。 テストを行う簡単な方法は、media-sound/madplayの様なコマンドラインツールを使うことです。 mpg123の様なよく知られている物も使用することが出来ます。 oggのファンなら、media-sound/vorbis-toolsからogg123を使用することも出来ます。 最適なプレーヤーを使用します。 いつものように、必要な物をemergeします。
コード表示 3.7: ソフトウェアを入手する |
(必要なアプリケーションをインストール) # emerge madplay mpg123 (.oggファイルを再生する) # emerge vorbis-tools |
では、お気に入りのサウンドトラックを再生しましょう。
コード表示 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をサポートするように、/etc/make.confにalsaのUSEフラグを追加することが出来ます。 x86やamd64の様ないくつかのアーキテクチャではデフォルトで有効になっています。
もし何らかの原因で音が鳴らなければ、まず行うべき事はalsamixerの設定の確認です。 問題の80%は、チャンネルがミュートされているかボリューム設定が低すぎることが原因です。 Window Managerのサウンドアプレットも確認し、ボリュームが聞こえるレベルにになっているかを確認してください。
/procはあなたの友です。 そしてこの場合、/proc/asoundがあなたの親友です。 ここでどれくらいの情報が利用できるかを見てみましょう。
コード表示 3.9: /proc/asoundと遊ぶ |
(何よりもまず、/proc/asound/cardsが正しいカードを表示しているのなら、ALSAは正しくカードを拾い上げます) # cat /proc/asound/cards 0 [Live ]: EMU10K1 - Sound Blaster Live! Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11 (これは現在動作しているALSAのバージョンを表示します) # cat /proc/asound/version Advanced Linux Sound Architecture Driver Version 1.0.8 (Thu Jan 13 09:39:32 2005 UTC). (ALSA OSSエミュレーションの詳細) # 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"エラーです。 以下に例を示します。
コード表示 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を見てみると、この様に表示されているでしょう。
コード表示 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後に問題を起こすディレクトリを手動削除すればいいだけです。 正しいカーネルバージョンの物を削除するようにしてください。現在の物を削除しないように!
コード表示 3.12: alsa-driverモジュールの削除 |
# rm -rf /lib/modules/$(uname -r)/alsa-driver
|
上記と似たエラーメッセージで、その他の原因としては、/etc/modules.dの中のファイルの中で、 不必要な場合にdevice_modeパラメータが宣言されている場合が考えられます。 これが本当に問題か確認し、どのファイルが原因かを調査しましょう。
コード表示 3.13: device_modeの確認と検索 |
(dmesgを確認する) # dmesg | grep device_mode snd: Unknown parameter `device_mode' (さて、問題の原因を特定する) # grep device_mode /etc/modules.d/* |
たいてい、options snd device_mode=0666と書かれた行があるalsaと呼ばれるファイルがあります。 この行を削除し、alsasoundサービスを再起動します。 そして、この問題がないか再度確認してください。
最初に、/etc/make.confでmidiのUSEフラグを有効にしているか必ず確認してください。 もし有効なっていなければ、すぐに追加してください。 そして、alsa-libやalsa-utilsのようなmidiフラグを使用するALSAパッケージをすべて再emergeする必要があります。
サウンドカードがオンボードMIDIシンセサイザーを搭載しており、.midファイルを再生したいのなら、AWE32ドライバを制御するための基本的なユーティリティのセットであるawesfxをインストールする必要があります。 まずこれをインストールします。ハードウェアシンセサイザーが搭載されていなければ、仮想的な物を使用することが出来ます。 詳しい情報は仮想シンセサイザーの章を参照してください。
コード表示 4.1: awesfxのインストール |
# emerge awesfx
|
注意: サウンドカードのドライバCDやWindowsインストーラからサウンドフォント(SF2)ファイルを/usr/share/sounds/sf2/へとコピーする必要があります。 例えば、Creative SBLive!用のサウンドフォントファイルは8MBGMSFX.SF2です。 |
サウンドフォントファイルをコピーしたら、midiを再生することが出来ます。 asfxloadコマンドを/etc/conf.d/local.startに追加することで、システムの起動時にサウンドフォントファイルが自動的に読み込まれます。
注意: 以下のコードに記されている/mntパスはあなたのマシンで同じだとは限りません。 これは単なる例です。 マシンに合うようにパスを変更してください。 |
コード表示 4.2: サウンドフォントの読み込み |
(まず、サウンドフォントをコピー) # cp /mnt/win2k/Program\ Files/CreativeSBLive2k/SFBank/8MBGMSFX.SF2 /usr/share/sounds/sf2/ (もしくはSoundBlaster CDから入手) # cp /mnt/cdrom/AUDIO/ENGLISH/SFBANK/8MBGMSFX.SF2 /usr/share/sounds/sf2/ (サウンドフォントを読み込み) # asfxload /usr/share/sounds/sf2/8MBGMSFX.SF2 |
これでaplaymidiの様なプログラムを使用してmidiファイルを再生することが出来るようになりました。 aplaymidi -lを実行して利用可能なポートの一覧を表示し、ポートを選んでファイルを再生しましょう。
コード表示 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 (ポートを選び、midiファイルを再生) # aplaymidi --port=65:0 /mnt/shyam/music/midi/mi2.mid |
サウンドカードにハードウェアシンセサイザーが無ければ、timidity++の様な仮想的な物を使用します。 インストールは非常に簡単です。
コード表示 4.4: timidity++のインストール |
# emerge timidity++
|
timidityで音楽を再生するには、サウンドフォントが必要です。 幸い、ebuildでいくつかのサウンドフォントパッケージをインストールすることが可能です。 timidity-freepatsやtimidity-eawpatchesの様にPortageで利用可能な異なるフォントパッケージがいくつか存在します。 複数のサウンドフォント設定をインストールすることが出来、/usr/share/timidity/に置くことが出来ます。 複数のtimidity設定を切り替えるには、eselectツールを使用します。
コード表示 4.5: 設定の変更 |
# eselect timidity list # eselect timidity set eawpatches |
timidityをデフォルトランレベルに追加することを忘れないでください。
コード表示 4.6: timidityをデフォルトランレベルに追加 |
# rc-update add timidity default # /etc/init.d/timidity start |
MIDIの再生を試すことが出来ます。
いくつかのサウンドカードではalsa-toolsとalsa-firmwareが提供するいくつかのツールが役立ちます。 単純にemergeを使用することで、どちらもインストール出来るでしょう。
コード表示 4.7: ALSA Toolsのインストール |
# emerge alsa-tools
|
ALSA_TOOLS変数が設定されていなければ、全ての利用可能なツールがビルドされます。 では、alsa-tools(またはalsa-firmware)パッケージをインストールします。
コード表示 4.8: ALSA Toolsのインストール |
# emerge alsa-tools
|
カーネルでALSAをモジュールとして組み込んでいれば、システムで同時にひとつ以上のサウンドカードを持つことができます。 必要なのは/etc/modules.d/alsaにどれが最初に起動するか記述することだけです。 サウンドカードはこのファイルの中で、それらが使用するドライバの名前によって識別されます。 0は最初のカード、1はその次のカードです。 これは2つのサウンドカードを持つシステムの例です。
コード表示 4.9: 2つのサウンドカードがあるときの/etc/modules.d/alsa |
options snd-emu10k1 index=0 options snd-via82xx index=1 |
あるいは、同じドライバを使用する2つのサウンドカードを持っているなら、それらをカンマで区切って同じ行に書いてください。 これは3つのサウンドカードのうち2つが同じIntel High Definition Audioカードのときの例です。
コード表示 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フラグ追加することで、欲しいプラグインを選ぶことが出来ます。
コード表示 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さん。
このドキュメントの内容は Creative Commons - Attribution / Share Alikeライセンスです。