Gentoo Linux ALSA ガイド
1. イントロダクション
ALSAとは何か?
ALSA(Advanced Linux Sound Architecture)とはLinuxのサウンドサブシステムを大幅に書き直すことにより改善するプロジェクトです。
ALSAはLinux kernel 2.6または3.0の早く出荷されたほうに取り込まれると思われます。
ALSAはオーディオとMIDIの再生機能をLinuxに提供します。
http://www.alsa-project.orgからの引用。
ALSAは次の特徴を持っています。
-
コンシューマ向けサウンドカードからプロ用のマルチチャンネルオーディオインターフェースまで全てのオーディオインターフェースの効率的サポート
- 完全にモジュール化されたサウンド・ドライバ
- SMP と thread-safe の設計
-
アプリケーション・プログラミングを単純化し、
より高レベルな機能性を提供するユーザ・スペース・ライブラリー(alsa-lib)
-
古いOSS APIのサポートによる大部分のOSSプログラムとのバイナリー互換
その他には、全二重の再生・録音を完全サポート、複数のサウンドカードサポート、
ストリームのハードウェアミキシング、
新しいサウンドカード機能をサポートする広範囲のミキサー …などがあります。
なぜALSAを利用するのか?
もしあなたのサウンドカードがLinuxのカーネルサウンドシステム、
または2.4.xにある商用OSS/4Frontサウンドカードドライバでサポートされているなら、
あなたはサウンドカード用にモジュールをビルドすることができます。
もしそうしたければLinux Sound HOWTOを読んでください。
しかし、OSS/4Frontドライバーは商用のためなどの理由から、いくつかかの制限があります。
ALSAとは、これらの制限以上の事をオープンソーススタイルですることです。
ALSAはGPLとLGPLに完全に従い、録音、再生、
MIDIシークエンスに高いシステムクオリティーを提供するサウンドドライバシステムです。
ALSAはどのカードをサポートしてるの?
ALSAはオープンソースのドライバの提供によりできるかぎり新しいものも含め多くのカードをサポートしようとしてます。
しかし、いくつかのベンダーはバイナリのみしか提供しません。
あなたのカードがサポートされているか知るには、
http://www.alsa-project.org/alsa-doc/を確かめてください。
2. インストール
Gentoo USE flags
コンパイル時にALSAサポートをプログラムに組み込むには、
必ずalsaをUSEフラグに追加します。
しかし、いくつかのツールはまだalsaをサポートしておらず、OSSを必要とします。
始める前にossをUSEフラグに定義しておけば、
ALSAはOSSエミュレーションを提供します。
カーネルモジュール
私達はまだ2.4.xカーネルソースを使っているので、
カーネールモジュールとALSAモジュールを分けてコンパイルしなくてはいけません。
2.5.xカーネルを使用している人は、ALSAモジュールがカーネルソースに含まれており、
カーネルソースとともに構築されるので、
カーネルコンフィギュレーションで制御できます。
最初にカーネルコンフィギュレーションがALSAを使う準備ができているか確認します。
やらなければいけないことはSound Card Supportをモジュール(M)としてビルドすることです。
これはsoundcore.oを作成します。
Note:
Sound Card Supportをモジュール(M)の代わりにカーネルに組み込む(Y)こともできます。
しかしALSAのドキュメントは、ALSAがSound Card Supportモジュールをロードしようとするので、
Sound Card Supportをモジュールとしてビルドすることを提案しています。
|
もしすでに作業済みのカーネルコンフィギュレーションがあるなら、
Sound Card Support以外のすべてのサウンドカードドライバを外してあるか確認してください。
もしリブートせずにこの作業をしたい場合、以下の手順ですることができます。
Code Listing 2.1: カーネルコンフィギュレーション |
# cd /usr/src/linux
# cp .config ~/
# make mrproper
# cp ~/.config .
# make menuconfig
|
それではSound Card Supportをモジュール(M)にして、
すべてのサウンドカードドライバーを外してください。
終了してカネールコンフィギュレーションを保存(Y)してください。
そしてモジュールをビルドします。
Code Listing 2.2: カーネルの構築 |
# make dep clean
# make modules modules_install
|
最後の行は新しいモジュールをインストールする前に以前のモジュールをすべて消します。以前にインストールしたALSAも同様です。
Important:
これが意味するのは、カーネルを再構築するたびにalsa-driverも再構築しなければいけないということです。
|
ALSAモジュール
それではあなたのサウンドカードのためのALSAドライバーをインストールする準備ができました。
もしあなたのサウンドカードがPCIなら/proc/pciの出力からサウンドカードの種類を特定することができます。
Code Listing 2.3: サウンドカード情報の検索 |
# grep audio /proc/pci
|
Warning:
もし以前にサウンドを設定していてALSAではないサウンドモジュールがロードされているなら、今すぐ外してください。
lsmodで確認をして、サウンド関連のモジュールをすべて外すためにrmmodを使用してください。
|
それでは単純に emerge alsa-driverをしましょう。
これはすべてのALSAサウンドドライバをコンパイルしてインストールします。
しかし時間の節約のため、
ALSA Soundcard Matrixであなたのカードの行のDriver & Docsの列にあるDetailsというリンクをたどり、あなたのサウンドカードのモジュール名を探しましょう。
(訳注:まず、Choose manufacturer for more detailsからあなたのカードのチップセットのベンダーを見つけてGoボタンをクリックしてください。)
私の場合はEMU10K1チップセットを搭載したSBlive!を持っているのでモジュール名はsnd-emu10k1でした。
emergeする前に環境変数にALSA_CARDS値をセットします。そうすればemergeはそのドライバーのみをコンパイルします。
(訳注:実際には、モジュール名からsnd-を除いた部分をセットします。)
Code Listing 2.4: Compile correct modules |
# env ALSA_CARDS='emu10k1' emerge alsa-driver
|
Note:
/etc/make.confにこの値を追加する事もできます。そうすれば、以後、
alsa-driverをemergeする際にemerge alsa-driverを実行するだけで済みます。
例えば、echo 'ALSA_CARDS="emu10k1"' >> /etc/make.confの様にします。
|
Note:
ALSAドライバを2個以上のサウンドカードにインストールしたい場合、
env ALSA_CARDS='emu10k1 intel8x0 ens1370' emerge alsa-driverのようにスペースで区切られたドライバーのリストをALSA_CARDにセットすることができます。
|
Note:
もしOSS互換が必要なら、emerge alsa-ossをしてください。
これはALSA/OSS互換ラッパーです。
|
Note:
もし、度々カーネルを再構築する事を予定しているなら、
emerge alsa-driveに--buildpkgオプションをつける事を提案します。
これは、バイナリパッケージを作成する事ができます。
以降、カーネルを再構築した後、
emerge --usepkg alsa-driverを実行するだけで再びコンパイルする事なくバイナリパッケージをインストールする事ができます。
|
この後、ALSAモジュールはシステムにインストールされたはずです。
ALSAのコンフィギュレーション
ALSAをただしく動かすためにコンフィギュレーションをはじめましょう。
新しくインストールされたALSAをシステムに知らせるためにいくつかのファイルを編集する必要があります。
最初にalsa-utilsをあなたのシステムにインストールします。
Code Listing 2.5: Emerging alsa-utils |
# emerge alsa-utils
|
この後、/etc/modules.d/alsaを編集します。
Warning:
/etc/modules.confを編集する必要はありません。
その代わり/etc/modules.dの中のファイルをいつも編集します。
|
そのファイル最後の「ALSA portion」をチェックしてください。
下に示す行であなたのサウンドカードの数を設定できます。(通常は1です)
Code Listing 2.6: /etc/modules.d/alsaの最後 |
options snd cards_limit=1
|
どのサウンドドライバーをALSAが使うか明記します。
同じファイルをこのように編集してください。
Code Listing 2.7: /etc/modules.d/alsaの抜粋 |
## and then run `modules-update' command.
## Read alsa-driver's INSTALL file in /usr/share/doc for more info.
##
## ALSA portion
alias snd-card-0 snd-emu10k1
## alias snd-card-1 snd-intel8x0
## alias snd-card-2 snd-ens1370
## OSS/Free portion
## alias sound-slot-0 snd-card-0
## alias sound-slot-1 snd-card-1
##
|
Note:
もし複数のサウンドカードがあるならsnd_cards_limitの値を合わせsnd-card aliasesをこのファイルに追加してください。
私はこの設定をした経験はありませんが、複数サウンドカードの設定例が、
ALSA HowtoのChapter 6にあります。
|
このファイルで最後にすることは、ほぼ終わりの方に以下の行があるので、
コメントアウトされていないかチェックしてください。
Code Listing 2.8: /etc/modules.d/alsaの終わりの方 |
alias /dev/mixer snd-mixer-oss
alias /dev/dsp snd-pcm-oss
alias /dev/midi snd-seq-oss
|
/etc/modules.d/alsaをもう一度確認してください。
すべての準備ができたらmodules-updateを実行しましょう。
Code Listing 2.9: modules-updateの実行 |
# modules-update
|
Note:
ここでmodules-updateを実行するのは/etc/modules.d/alsaの内容を/etc/modules.confに書き込むためです。
|
/etc/devfsd.confにALSAデバイスとパーミッションが正しく登録されているか確認してください。
Code Listing 2.10: /etc/devfsd.conf |
# ALSA/OSS stuff
# Comment/change these if you want to change the permissions on
# the audio devices
LOOKUP snd MODLOAD ACTION snd
LOOKUP dsp MODLOAD
LOOKUP mixer MODLOAD
LOOKUP midi MODLOAD
REGISTER sound/.* PERMISSIONS root.audio 660
REGISTER snd/.* PERMISSIONS root.audio 660
|
Note:
devfsd.confが/dev/soundのパーミッションをroot.audioにしていることに注目してください。
このようにrootでないユーザーがaudioを使うにはaudioグループに所属していなければいけません。
|
3. ALSAの起動
alsasoundをランレベルに追加する
最初にすることは下記のようにboot時ALSAが起動するように設定してください。
Code Listing 3.1: ALSAをboot runlevelに追加 |
# rc-update add alsasound boot
|
Warning:
alsasoundスクリプトは"boot"ランレベルに追加すべきです。
"default"ではありません。
|
起動とミュートの解除
我々はLinuxユーザーです。再起動はしたくありません。
alsasoundスクリプトを手動でスタートさせましょう。
Code Listing 3.2: ALSAの起動 |
# /etc/init.d/alsasound start
|
ALSAは起動しました。
lsmodを実行した場合ALSAモジュールがロードされているのが見えるはずです。
しかしチャンネルがミュートになっているため、まだ音は鳴りません。
このためにamixerが必要です。
Code Listing 3.3: amixerの実行 |
# amixer
|
Warning:
"amixer: Mixer attach default error: No such file or directory"のエラーは出るべきではないですが、
もし出てしまったら一度手動でsnd-mixer-ossとsnd-pcm-ossをmodprobeしてください。
その後もう一度amxierを起動しましょう。
|
Code Listing 3.4: 万が一、amixerの実行時にエラーが出た場合 |
# modprobe snd-mixer-oss
# modprobe snd-pcm-oss
# amixer
|
ここまできたらMasterとPCMチャンネルのミュートを解除します。
ハードウェアによってはCenterチャンネル、
場合によってはSorroundチャンネルもミュートの解除が必要です。
Code Listing 3.5: チャンネルのミュート解除 |
# amixer set Master 100 unmute
# amixer set PCM 100 unmute
# amixer set Center 100 unmute
# amixer set Surround 100 unmute
# aplay $KDEDIR/share/sounds/pop.wav
|
サウンドが働くかどうかaplay(alsa play)コマンドを使って確認します。
音が聞こえたらサウンドは正常に機能しています。
音量を好みにきちんと設定するには調節するには、
ncursesベースのalsamixerを使うのがいいでしょう。
XMMSをALSAに対応させたい場合は、emerge alsa-xmmsを実行します。
システムをrebootした場合、
alsasound initスクリプトは音量の設定を正しく保存します。
4. 最後に
カーネルアップグレード後に...
カーネルを再構築したり、他のカーネルにアップグレードした時には、ALSAモジュールも再構築しなければいけません。
前回はalsa-driver、alsa-lib、alsa-utilsをインストールしたかもしれませんが、
/lib/modules/*/kernel/sound/pci/に置かれるのはALSAモジュールのみなので、
alsa-driverのみを再インストールする必要があります。
Code Listing 4.1: カーネルを再構築するたびに必要 |
# emerge alsa-driver
|
/etc/modules.autoload
ALSAを使用するためにこのファイルを編集する必要はありません。
rc-update add alsasound bootの後、
システムはスタート時に正しいモジュールをロードします。
snd-pcm-oss または snd-mixer-ossをこのファイルに追加する必要はありません。
詳細はこのFAQをチェックしてください。
既知のバグ
Note:
このガイドはalsaの開発よりはるかに遅れています。
あなたがこれを読む頃にはこれらのバグは既に解決しているかもしれません。
|
-
もし、OSSエミュレーション時に多くの雑音が聞こえるなら、
/etc/modules.d/alsaにoptions snd-pcm-oss dsp_map=1を追加してください。
ジョイ・スティックサポートの有効化
もし、あなたのサウンドカードにジョイ・スティック用のプラグがあるなら、
ジョイ・スティックサポートの有効化に興味があるかもしれません。
もしそうならば、サウンドカードドライバにジョイ・スティック向けのパラメータがないか探してみてください。
modinfoをsnd-<your chipset>に対して実行する事で探せます。
snd-via82xxの場合は次の例のようになります。
Code Listing 4.2: modinfoの実行 |
# modinfo snd-via82xx
filename: /lib/modules/2.4.22-ck2/snd-via82xx.o
description: "VIA VT82xx audio"
author: "Jaroslav Kysela <[email protected]>"
license: "GPL"
parm: index int array (min = 1, max = 8), description "Index value for VIA 82xx bridge."
parm: id string array (min = 1, max = 8), description "ID string for VIA 82xx bridge."
parm: enable int array (min = 1, max = 8), description "Enable audio part of VIA 82xx bridge."
parm: mpu_port long array (min = 1, max = 8), description "MPU-401 port. (VT82C686x only)"
parm: joystick int array (min = 1, max = 8), description "Enable joystick. (VT82C686x only)"
parm: ac97_clock int array (min = 1, max = 8), description "AC'97 codec clock (default 48000Hz)."
parm: dxs_support int array (min = 1, max = 8), description "Support for DXS channels
(0 = auto, 1 = enable, 2 = disable, 3 = 48k only, 4 = no VRA)"
|
もし、joystickというパラメータがあるなら、
/etc/modules.d/alsaのoptions行にjoystick=1を加えます。
snd-via82xxの場合は次のようにします。
Code Listing 4.3: ジョイ・スティック向けのパラメータの追加 |
alias snd-card-0 snd-via82xx
options snd-via82xx joystick=1
|
さらなるリンク...
さらなる情報はこちらで確認してください:
The contents of this document are licensed under the Creative Commons - Attribution / Share Alike license.
|