ALSA のペイジ

Last Update: Jun. 29, 2000

とりあえず、日本語でもちょこっと ALSA のページを作ってみることにしました。 インストールの際に御参考にでもなれば幸いです。

何か他に質問等があればメール下さい。


What's New?


ALSA って何?

まずはともかく ALSA プロジェクトのホームページ を見て下さい。 要は、より高機能でフリーなサウンドシステムを Linux 上で作ろう、 ということです。

今のところ、私の領域は

てなところです。 PCM や mixer もかじってますが、主にシーケンサ関連が多いです。


インストール

ALSA に関して、これが一番厄介なようですね。 初めにして最大のハードルと言いましょうか。

確かに、インストールは初めて触る人にとってはかなり面倒です。 でも、その分柔軟性に富んだ設定が可能です。

さて、インストールの話。RPM を使わない、素でのインストールを前提とします。 まずは、公式にリリースされたパッケージ (alsa-xxx.tar.bz2) のインストールを 試してみます。

ダウンロード

ALSA ホームページから、 ALSA driver、ALSA library、ALSA utils の3つのパッケージをダウンロードします。 日本のミラーは、 ここ にあります。 それぞれ、driver、lib、utils の下で、alsa-driver-0.5.8.tar.bz2 といった ファイル名になっています。

ドライバのインストール

何はともあれ、ドライバをインストールします。 ALSA ver.0.4.1 以降は、Linux カーネルは 2.2 以上でしか対応していません。 ドライバのコンパイルはとっても簡単です。

  1. alsa-driver-0.5.8b.tar.bz2 を展開します。
    	% tar xvfI alsa-driver-0.5.8b.tar.bz2
    
  2. configure スクリプトを実行します。
    	% cd alsa-driver-0.5.8b
    	% ./configure
    
    ちなみに、ver.0.5.8 では PnP も sequencer もデフォルトで有効になっています。 古いバージョンでは、configure スクリプトに、 それぞれ --with-pnp=yes--with-sequencer=yes オプションを加える必要があります。
  3. make します。
    	% make
    
  4. スーパーユーザーになって、make install します。
    	% su
    	# make install
    

ライブラリのインストール

ALSA library のコンパイル&インストールも簡単です。

  1. alsa-lib-0.5.8.tar.bz2 を展開します。
    	% tar xvfI alsa-lib-0.5.8.tar.bz2
    
  2. configure スクリプトを実行します。
    	% cd alsa-lib-0.5.8
    	% ./configure
    
  3. make します。
    	% make
    
    glibc-2.0 + 2.2.x カーネルで構築されたシステム上では、 コンパイルエラーが出ることがあります。 これは、ntohl などの関数宣言が Linux のものと libc のものとで 異なるためです。glibc-2.1 にアップグレードして下さい。 ad hoc な方法としては、該当部分のプロトタイプ宣言をコメントアウトしてやる、 というのがあります。 また、2.2.14 だと直っている、という噂もあります。 (私はアップグレードしてしまったので、確認できません。すみません。)
  4. スーパーユーザーになって、make install します。
    	% su
    	# make install
    
  5. (一応) ldconfig を実行します。
    	# ldconfig
    

ユーティリティのインストール

ALSA utilities のコンパイル&インストールも簡単です。(こればっかり :-)

  1. alsa-utils-0.5.8.tar.bz2 を展開します。
    	% tar xvfI alsa-utils-0.5.8.tar.bz2
    
  2. configure スクリプトを実行します。
    	% cd alsa-utils-0.5.8
    	% ./configure
    
  3. make します。
    	% make
    
  4. スーパーユーザーになって、make install します。
    	% su
    	# make install
    

モジュールの設定

さて、ここからが本番です :-)
ALSA ドライバを使うためには、様々な設定を /etc/modules.conf (もしくは /etc/conf.modules) にしなければなりません。 とりあえず、ここでは簡便のため、サウンドカード1枚のみ刺さっている、 と仮定します。以下、いくつか例を挙げてみます。 (なお、全部 CreativeLabs のカードですが、単に有名どころというのと、 私が使ったことがある、というだけの理由です :-)

SB AWE32/64

  1. まずは、OSS の設定があれば、それを無効にします。 /etc/modules.conf に
    alias char-major-14 xxx
    alias sound xxx
    alias midi xxx
    
    といった行があったら、その行をコメントアウトして下さい。
    # alias char-major-14 xxx
    # alias sound xxx
    # alias midi xxx
    
  2. 以下の設定を /etc/modules.conf に加えます。 一般に ISA のカードは PnP でない場合、設定する項目が多いです。 AWE32 も、以下に見られるように、ずらっとオプションが並びます。 ここでは、IRQ 5、DMA(8bit) 1、DMA (16bit) 5、i/o ポート 0x220 という 値になってます。
    alias char-major-116 snd
    options snd snd_cards_limit=1
    alias snd-card-0 snd-card-sbawe
    options snd-card-sbawe snd_index=0 snd_port=0x220 snd_mpu_port=0x330 \
    	snd_awe_port=0x620 snd_irq=5 snd_dma8=1 snd_dma16=5 snd_isapnp=0
    
    snd_isapnp=0 とするのを忘れないで下さい
  3. OSS エミュレーションを使う場合(普通は使います)は、更に以下の行を /etc/modules.conf に追加します。
    alias char-major-14 soundcore
    alias sound-slot-0 snd-card-0
    alias sound-service-0-0 snd-mixer-oss
    alias sound-service-0-1 snd-seq-oss
    alias sound-service-0-3 snd-pcm-oss
    alias sound-service-0-8 snd-seq-oss
    alias sound-service-0-12 snd-pcm-oss
    
  4. depmod -a を実行します。(スーパーユーザーで)
    	# depmod -a
    

一応、これで OK です。 しかし、これだけでは音が聞こえません。 ALSA はデフォルトでは全ての音をミュートしているのです。 これについては、次の節で説明します。

PnP カードの場合は、オプションを設定するしなくても自動的に 割り当ててくれます。

alias char-major-116 snd
options snd snd_cards_limit=1
alias snd-card-0 snd-card-sbawe
options snd-card-sbawe snd_index=0 snd_isapnp=1
大部簡単になりますね。

SB Live!

一般に PCI カードは ISA カードよりもずっと簡単です。 SB Live! の場合は、以下の行を /etc/modules.conf に追加します。

alias char-major-116 snd
options snd snd_cards_limit=1
alias snd-card-0 snd-card-emu10k1
options snd-card-emu10k1 snd_index=0

もちろん、古い OSS の設定は無効にしておいて下さい。 OSS エミュレーションの設定は AWE64 と同じです。 depmod -a を忘れずに!

SB PCI 64/128

SB PCI 128 には、型によって ENS1370 と ENS1371 の別のチップが載っています。 どのチップが載っているかは、/proc/pci を見ると分かります。
	% cat /proc/pci
	  ...
	  Bus  0, device  11, function  0:
	    Multimedia audio controller: Ensoniq ES1370 [AudioPCI] (rev 0).
	      IRQ 10.
	      Master Capable.  Latency=32.  Min Gnt=12.Max Lat=128.
	      I/O at 0x7000 [0x703f].

チップを確認したら、以下の行を /etc/modules.conf に加えます。 ここでは、ENS1370 を使っています。

alias char-major-116 snd
options snd snd_cards_limit=1
alias snd-card-0 snd-card-ens1370
options snd-card-ens1371 snd_index=0
もし、お使いのカードのチップが ENS1371 でしたら、上記の ens1370 を ens1371 に置き換えて下さい。

もちろん、古い OSS の設定は無効にしておいて下さい。 OSS エミュレーションの設定は AWE64 と同じです。 depmod -a を忘れずに!


立ち上げてみる

それでは、ALSA を使ってみましょう。 まずは、スーパーユーザーになって、以下のコマンドを実行して下さい。

	# alsactl store
これで、モジュールがロードされ、 /etc/asound.conf というファイルが作成されたはずです。 モジュールがロードされたかどうか lsmod で確認して下さい。 snd-xxxx というモジュールがずらっと表示されるはずです。 かなり多いです。びっくりしないように :-)

次に、alsamixer を使って音量を調整します。 alsamixer は、コンソール上で動くミキサープログラムで、 amixer に比べると遥かに使いやすいです。 X の mixer プログラム (gamix や xamixer2) をインストールしている場合は、 もちろんそちらの方が使いやすいでしょう。

alsamixer の使い方はカンタンです。 左右のカーソルキーで変更するボリュームグループ(Master など)を選んで、 上下のキーで音量を変更します。

ALSA はデフォルトでは、初めの音はミュートされ、 音量は全て0になっています。 ミュートされているものには、ボリューム・バーの上のほうに "MUTE" という 表示があるはずです。ミュートを解くには、M キーを押します。

ESC キーで終了です。分からなくなったら、H (help) キーを押しましょう。

これで、音が鳴るはずです。aplay で WAV ファイルを鳴らしてみましょう。

	% aplay foo.wav
OSS 用のプログラムも動くはずです。お気に入りの MP3 プレーヤーを試して下さい。 OSS 互換のモジュールは、OSS のデバイスを使用すると自動的にロードされます。

気に入った音量が設定できたら、その状態をセーブしましょう。 再び、スーパーユーザーで "alsactl store" を実行します。

	# alsactl store
これで、/etc/asound.conf が書き換えられました。 変更されたファイルは、"alsactl restore" コマンドで有効になります。 このコマンドは、モジュールロード時に自動的に実行することができます。 以下の行を /etc/modules.conf に加えて下さい。
post-install snd-mixer /usr/sbin/alsactl restore

/etc/asound.conf はテキストファイルで、 エディターを使って変更することができます。 とりあえず、中身を眺めてみて下さい。 いくつかの機能は、ミキサープログラムでは変更できず、 このファイルを直接修正する必要があります。 色々といじって、楽しんで下さい :-)


MIDI はどうだろう

内部音源

内部音源を使った MIDI の演奏は、今のところ SB AWE32/64 と SB Live! (SB 512) しかできません。 (FAQ として、SB PCI 128 で MIDI 演奏できません、というのがありますが、 元もと SB PCI 128 には wavetable 機能はないのです。) ということで、ここでは上記のカードを対象にして説明します。

SB AWE64

SB AWE 64 (Emu8000 チップ) の WaveTable で MIDI を演奏するには、 何はともあれ SoundFont をロードする必要があります。 今のところ、これは拙作の sfxload プログラムを使います。 (これ、未だに OSS 用のプログラムで、OSS エミュレーションを介して ALSA にロードするという妙なスタイルになってます。 早く ALSA native にしなきゃいけないのは分かってるんですけど…。)

	% sfxload 8mbgmsfx.sf2
モジュールの設定が正しく行われていれば、このコマンドを実行するだけで 必要なモジュールは自動的にロードされるはずです。 あとは、playmidi なり、ALSA 用のソフト pmidi なり、御自由にお使い下さい。 カードが1枚の場合であれば、内部 MIDI ポートは 65:0〜65:3 に割り当てられます。
	% pmidi -p65:0 foo.mid

最新版の sfxload は、以下のページにあります。

さて、kmod でもってモジュールは自動的にロードされるのですが、 通常使われていないモジュールはある程度の時間が経過すると、 再びアンロードされてしまうのです。 そのため、sfxload でロードしたはずの soundfont も同時に 忘却の彼方にすっ飛んでしまいます。 これがイヤだという人には:

  1. 自動的にロードするのではなくて、スクリプトなどから static にロードするようにする
  2. ロード時に自動的に soundfont を読み込ませるようにする
などの解決法があります。

よほどメモリをケチる必要がなければ、最初の方法がお勧めです。 ドライバをそう頻繁にリロードする事もないでしょうから。 /sbin/init.d もしくは /etc/rc.dalsasound というスクリプトがインストールされているはずですので、 それを使って下さい。

さて、2番目の方法ですが、 以下の行を /etc/modules.conf に追加すれば、おっけーです。

post-install snd-synth-emu8000 /usr/local/bin/sfxload synthgm.sbk
sfxload のパスや SoundFont のファイル名のパスなどは御自分の設定に したがって下さいね。

SB Live!

SB Live! の Emu10k1 チップは、Emu8000 とよーく似ています。 ということで、必要な作業は全く同じです。 sfxload を使って SoundFont ファイルをロードします。 /etc/modules.conf には、emu10k1 のモジュールを指定します。

post-install snd-synth-emu10k1 /usr/local/bin/sfxload 8mbgmsfx.sf2

外付MIDI を持ってる人は?

snd-seq-midi モジュールが、ALSA sequencer 使用時に自動的にロードされます。 カード #0 の外付 MIDI は、ALSA シーケンサ・ポート 64:0 に割り当てられます。 例えば、MIDI ファイルを演奏するには

	% pmidi -p64:0 foo.mid
てな具合です。

外付のキーボードから内部音源に接続するには、aconnect プログラム を使います。

	% aconnect 64:0 65:0
これで、外付キーボードから内部音源へ直接イベントが渡されるようになります。


最新版を使うには?

ALSA の開発版のソースは CVS でもって管理されています。 ALSA の開発ペースは早いためほぼ毎日更新されています。 したがって、新しモノ好きな人(及び developer)は CVS 版を使った方が良いです。

CVS 版をインストールするには、GNU の autoconf、automake、libtools が必要です。 これらは大抵のディストリビューションに含まれてるはずですから、まずは インストールしておいて下さい。

ダウンロードには、cvs を用いるか、ALSA project のページから snapshot版 を落します。 snapshot版は毎日作成されるので、新しいのを持って行って下さい。 CVS の使い方はここでは省略します。 分からなかったら、snapshot 版を使って下さい。

で、コンパイルはどうするかというと、 ./configure; make の代わりに ./cvscompile というスクリプトを使ってやればよいのです。 何とも簡単な話ですな。cvscompile の引数には configure と同じ物が 渡せます。(例えば --with-debug=no など) デフォルトでは、full debug、ISA PnP、sequencer 有効になってます。



Takashi Iwai tiwai@suse.de Home Page