とりあえず、日本語でもちょこっと ALSA のページを作ってみることにしました。 インストールの際に御参考にでもなれば幸いです。
何か他に質問等があればメール下さい。
まずはともかく ALSA プロジェクトのホームページ を見て下さい。 要は、より高機能でフリーなサウンドシステムを Linux 上で作ろう、 ということです。
今のところ、私の領域は
ALSA に関して、これが一番厄介なようですね。 初めにして最大のハードルと言いましょうか。
確かに、インストールは初めて触る人にとってはかなり面倒です。 でも、その分柔軟性に富んだ設定が可能です。
さて、インストールの話。RPM を使わない、素でのインストールを前提とします。 まずは、公式にリリースされたパッケージ (alsa-xxx.tar.bz2) のインストールを 試してみます。
何はともあれ、ドライバをインストールします。 ALSA ver.0.4.1 以降は、Linux カーネルは 2.2 以上でしか対応していません。 ドライバのコンパイルはとっても簡単です。
% tar xvfI alsa-driver-0.5.8b.tar.bz2
% cd alsa-driver-0.5.8b % ./configureちなみに、ver.0.5.8 では PnP も sequencer もデフォルトで有効になっています。 古いバージョンでは、configure スクリプトに、 それぞれ
--with-pnp=yes や --with-sequencer=yes
オプションを加える必要があります。
% make
% su # make install
ALSA library のコンパイル&インストールも簡単です。
% tar xvfI alsa-lib-0.5.8.tar.bz2
% cd alsa-lib-0.5.8 % ./configure
% makeglibc-2.0 + 2.2.x カーネルで構築されたシステム上では、 コンパイルエラーが出ることがあります。 これは、ntohl などの関数宣言が Linux のものと libc のものとで 異なるためです。glibc-2.1 にアップグレードして下さい。 ad hoc な方法としては、該当部分のプロトタイプ宣言をコメントアウトしてやる、 というのがあります。 また、2.2.14 だと直っている、という噂もあります。 (私はアップグレードしてしまったので、確認できません。すみません。)
% su # make install
# ldconfig
ALSA utilities のコンパイル&インストールも簡単です。(こればっかり :-)
% tar xvfI alsa-utils-0.5.8.tar.bz2
% cd alsa-utils-0.5.8 % ./configure
% make
% su # make install
さて、ここからが本番です :-)
ALSA ドライバを使うためには、様々な設定を /etc/modules.conf
(もしくは /etc/conf.modules) にしなければなりません。
とりあえず、ここでは簡便のため、サウンドカード1枚のみ刺さっている、
と仮定します。以下、いくつか例を挙げてみます。
(なお、全部 CreativeLabs のカードですが、単に有名どころというのと、
私が使ったことがある、というだけの理由です :-)
alias char-major-14 xxx alias sound xxx alias midi xxxといった行があったら、その行をコメントアウトして下さい。
# alias char-major-14 xxx # alias sound xxx # alias midi xxx
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 とするのを忘れないで下さい。
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
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大部簡単になりますね。
一般に 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 を忘れずに!
% 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.wavOSS 用のプログラムも動くはずです。お気に入りの 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 の演奏は、今のところ SB AWE32/64 と SB Live! (SB 512) しかできません。 (FAQ として、SB PCI 128 で MIDI 演奏できません、というのがありますが、 元もと SB PCI 128 には wavetable 機能はないのです。) ということで、ここでは上記のカードを対象にして説明します。
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 も同時に 忘却の彼方にすっ飛んでしまいます。 これがイヤだという人には:
よほどメモリをケチる必要がなければ、最初の方法がお勧めです。
ドライバをそう頻繁にリロードする事もないでしょうから。
/sbin/init.d もしくは /etc/rc.d に
alsasound というスクリプトがインストールされているはずですので、
それを使って下さい。
さて、2番目の方法ですが、
以下の行を /etc/modules.conf に追加すれば、おっけーです。
post-install snd-synth-emu8000 /usr/local/bin/sfxload synthgm.sbksfxload のパスや SoundFont のファイル名のパスなどは御自分の設定に したがって下さいね。
SB Live! の Emu10k1 チップは、Emu8000 とよーく似ています。
ということで、必要な作業は全く同じです。
sfxload を使って SoundFont ファイルをロードします。
/etc/modules.conf には、emu10k1 のモジュールを指定します。
post-install snd-synth-emu10k1 /usr/local/bin/sfxload 8mbgmsfx.sf2
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 有効になってます。