Linux でサウンド機能を使うためには、次の手順が必要となります。
RedHat Linux を使っている場合には、sndconfig
というユーティリ
ティがあります。このユーティリティはほとんどの場合、サウンドカードの検
出と、そのカード用のサウンドドライバをロードするために必要な設定ファイ
ル全ての設定を行います。RedHat をお使いならば、これを使ってみることを
お勧めします。それでうまく動作すれば、この章の残りの部分は読み飛ばして
も構いません。
sndconfig
でうまく設定できなかった場合、RedHat 以外のディスト
リビューションをお使いの場合、設定方法の勉強のために手動で設定を行いた
い場合の手順は、これ以降の章に詳しく書いてあります。
マニュアルに従ってインストールするか、業者に依頼してインストールしても らってください。
古いサウンドカードにはたいてい IRQ や DMA チャネルなどを設定するスイッチ やジャンパがあります。この設定はメモしておきましょう。よく わからない場合には、工場出荷時の設定をそのまま使うのがいいでしょう。で きる限り他のデバイス(イーサネットカード、SCSI ホストアダプタ、シリアル ポート、パラレルポートなど)との競合を避けるようにしてください。
通常は DOS で使っているのと同じ I/O ポート、IRQ, DMA の設定を使うべき です。ですが、(特に PnP カードを使っている場合には)Linux でサウンドカー ドを動作させるために DOS と異なる設定が必要なことがあります。 実験を何度か行う必要があるかもしれません。
現在ではほとんどのサウンドカードは、プラグ&プレイプロトコルを用い て I/O アドレス、割り込み番号、DMA チャネルを設定します。 設定が固定、またはジャンパで設定するような古いサウンドカードを使ってい る場合には、この章は読み飛ばしても構いません。
バージョン 2.2 のカーネルでも、まだプラグ&プレイのサポートは完全で はありません。望ましい解決方法は、ほとんどの Linux ディストリビューショ ンに付属している(RedHat の WWW サイトである http://www.redhat.com/ からダウンロードすることもできます) isapnp ツールを使うことです。
まずはお使いの Linux ディストリビューション付属の文書を調べてください。 プラグ&プレイのサポートは既に設定されているかもしれませんし、設定 方法がここに書かれているものとは少し異なるかもしれません。読者の皆さん 自身が設定を行う必要がある場合には、詳しい手順が isapnp ツールに付属の オンラインマニュアルに書かれています。通常行なう手順を手短かに説明します:
pnpdump
を用いて、全てのプラグ&プレイデバイスが動
作する設定を取り込みます。その結果をファイル /etc/isapnp.conf
に保存します。
(ACT Y)
コマンドのコメントを外すのも
忘れないでください。
isapnp
が実行されるようにします。
このコマンドは普通、起動スクリプトのいずれかで実行します。システムを再
起動するか、isapnp
を手動で実行します。
何らかの理由で isapnp ツールが使えない、あるいはこのツールを使いたくな くても、他に方法は 2 つあります。Microsoft Windows 95/98 でそのカード を使っている場合には、デバイスマネージャを使ってそのカードを設定し、そ れから LOADLIN プログラムを使って Linux をソフトブートする方法がありま す。Windows と Linux でカードの設定パラメータは必ず同じにしてください。
そのカードを DOS で使っているならば、SoundBlaster16 PnP カード付属の
icu
ユーティリティを使って DOS 上で PnP カードの設定を行い、
それから LOADLIN プログラムを使って Linux をソフトブートすることができ
ます。繰り返しになりますが、DOS と Linux でカードの設定パラメータ
は必ず同じにしてください。
サウンドによっては、カードのプラグ&プレイの初期化を行うために必要 なソフトウェアが付属しています。詳しくは、カードのドライバ付属の文書で 確認してください。
Linux をインストールした直後であれば、おそらくコンパイル済みのカーネル を使っていることでしょう。このようなカーネルでは普通、サウンド機能は使 えません。自分で必要なドライバを組み込んでカーネルを再コンパイルしましょ う。またカーネルの再コンパイルは、カーネルのバージョンアップのためや、 カーネルのサイズを小さくしてメモリを節約するために行ってもよいでしょう。 サウンドカードが動作したら、後からカーネルのサウンドドライバをモジュー ルとして作り直してもよいでしょう。
カーネルを再構築する方法は Linux Kernel HOWTO に詳しく書かれています(訳注: 日本語訳は http://www.linux.or.jp/JF/JFdocs/Kernel-HOWTO.html です)。 ここでは、サウンドカード固有の点についてだけ説明します。
今までに一度もカーネルにサウンド機能を組み込んだことがない人は、まず最 初にカーネルのサウンドドライバに付属する関連文書を読むと良いでしょう。 特に、お使いのカード固有の情報は確認してください。このようなファイルは カーネルの文書ディレクトリにあります。このディレクトリは通常、 /usr/src/linux/Documentation/sound です。このファイルがな い場合は、カーネルのバージョンが非常に古いか、カーネルのソースコードが インストールされていないかのどちらかでしょう。
カーネルの構築については、普通と違う点は特にありません。 現状ではカーネル設定を行なうには 3 種類の方法があります。 X11 上で動作する GUI 設定は「make xconfig」によって起動できます。 テキスト画面しか必要としないメニューベースのシステムは、 「make menuconfig」で利用できます。 最初からあった方法である「make config」では、簡単なテキストベースのイ ンターフェースが使えます。
カーネルの設定を行う際には、使用するサウンドカードの種類の選択や、使用 するドライバのオプションに関する選択肢がたくさん出てきます。それぞれの オプションの意味は、設定ツール内のオンラインヘルプを見ればわかるはずで す。わかる範囲で適切なオプションを選んでください。
オプション設定を行った後は、Kernel-HOWTO に書かれている手順に従ってカー ネルのコンパイルとインストールを行わなければなりません。
サウンドデバイスを正しく操作するためには、そのデバイス用のデバイスファ イルエントリを作成しなければなりません。このエントリは普通、Linux シス テムのインストール時に作成されます。以下に示すコマンドで、簡単なチェッ クを行うことができます。例に示したような出力が得られれば(日付は異なり ます)、デバイスファイルはほぼ確実に OK です。
% ls -l /dev/sndstat
crw-rw-rw- 1 root root 14, 6 Apr 25 1995 /dev/sndstat
ここに正しいデバイスファイルがあっても、それだけでは何にもなりません。 デバイスを動作させるには、カーネルドライバをロードするか、組み込まなけ ればなりません(詳しくは後述します)。
滅多にないと思いますが、デバイスファイルがおかしいとしか思えない場合に
は、デバイスファイルを作り直すこともできます。大抵の Linux ディストリ
ビューションには、これを行うための /dev/MAKEDEV
スクリプトが
あります。
さて、これで新しいカーネルでブートしてサウンドドライバをテストする準備 が整っていたはずです。いつも通りの方法で新しいカーネルをインストールし、 システムを再起動してください(もちろん、問題が起こった時のために古いカー ネルも残しておきましょう)。
ブート中に、次のようなメッセージが表示されることを確認してください (スクロールが速過ぎて読めない場合には、「dmesg」コマンドを使って後から 確認することもできます)。
(訳注: Shift+PageUp で、画面を逆スクロールすることもできます。)
Sound initialization started
<Sound Blaster 16 (4.13)> at 0x220 irq 5 dma 1,5
<Sound Blaster 16> at 0x330 irq 5 dma 0
<Yamaha OPL3 FM> at 0x388
Sound initialization complete
このメッセージは、サウンドカードのタイプとジャンパ設定(もしあれば)を正 しく示しているはずです。
ローダブルモジュールのサウンドドライバを使っている時には、上記メッセー
ジは表示されません(ただし「insmod sound trace_init=1
」を設定
した場合は除きます)。
サウンドドライバがカーネルにリンクされると、
「Sound initialization started
」と
「Sound initialization complete
」というメッセージが表示され
るはずです。このメッセージが表示されなければ、カーネルにはサウンドドラ
イバが組み込まれていないことになります。この場合には、サウンドドライバ
を組み込んでコンパイルしたカーネルが本当にインストールされていることを
確かめてください。
「Sound initialization started
」と
「Sound initialization complete
」というメッセージの間に何も表
示されないと、サウンドデバイスが全く検出されなかったということです。よ
くあるのは、正しいドライバを有効にしていない場合、そのカードがサポート
されていない場合、I/O ポートが誤っている場合、設定されていない PnP カー
ドを使っている場合です。
ブート中には、ドライバからエラーメッセージや警告メッセージが表示される こともあります。サウンドドライバの設定後に初めてブートする時は、このよ うなメッセージが出ないかどうかを注意して見てください。
次に /dev/sndstat
デバイスファイルをチェックしてください。こ
れはサウンドドライバの状態を示すためのデバイスファイルで、読み出すとサ
ウンドカードドライバが適切に初期化されたかどうかが分かります。出力例を
以下に示します。
% cat /dev/sndstat
Sound Driver:3.5.4-960630 (Sat Jan 4 23:56:57 EST 1997 root,
Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586)
Kernel: Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586
Config options: 0
Installed drivers:
Type 1: OPL-2/OPL-3 FM
Type 2: Sound Blaster
Type 7: SB MPU-401
Card config:
Sound Blaster at 0x220 irq 5 drq 1,5
SB MPU-401 at 0x330 irq 5 drq 0
OPL-2/OPL-3 FM at 0x388 drq 0
Audio devices:
0: Sound Blaster 16 (4.13)
Synth devices:
0: Yamaha OPL-3
Midi devices:
0: Sound Blaster 16
Timers:
0: System clock
Mixers:
0: Sound Blaster
上記のコマンドがエラーメッセージを出力することもあります。 "No such file or directory" というエラーは、デバイスファイルを作成する 必要があることを示します(4.3 節を参照)。"No such device" というエラー は、サウンドドライバがロードされていないか、カーネルに組み込まれていな いことを示します。これを直すには、4.2 節を見てください。
/dev/sndstat
の "Card config:" セクションにおいて、行全体が括
弧で括られている場合(例: "(SoundBlaster at 0x220 irq 5 drq 1,5)")は、
デバイスの設定はされているけれど、デバイスが検出されていなかったことを
表します。
以上で、簡単なサウンドファイルを再生する準備が整いました。 サンプル用のサウンドファイルをサウンドデバイスに送って、サウンド出力機 能の基本的なチェックをしてみましょう。
% cat endoftheworld >/dev/dsp
% cat crash.au >/dev/audio
(上のコマンド中の「>」を忘れないように気をつけてください)。
ただし、一般的には cat
でサウンドファイルを再生するのは適切で
なく、簡単なチェックにしかなりません。もっとまともに使える、適切な
プレイヤを使ってください(後で紹介します)。
このコマンドが動作するのは、/dev/sndstat
のデバイスのセクショ
ンに少なくともデバイスが 1 つある場合だけです。/dev/sndstat
にオーディオデバイスが全く出てこない場合には、デバイスが検出されなかっ
た原因を調べてください。
上記のコマンドが "I/O error" を返す場合には、"dmesg" コマンドを使うと 表示されるカーネルメッセージの末尾の部分を見てください。多分、エラーメッ セージが表示されると思います。非常によく現れるメッセージは "Sound: DMA (output) timed out - IRQ/DRQ config error?" です。このメッ セージの意味は、デバイスドライバが、期待している割り込みをサウンドカー ドから受け取らなかったということです。ほとんどの場合、これはドライバに 設定した IRQ または DMA チャネルが動作していないということです。これ を動作させるための最も良い方法は、デバイスがサポートしている DMA チャ ンネルと IRQ を全て試すことです。
他に考えられる原因としては、あるデバイス用のドライバを使っているけれど、 実際のデバイスがそのデバイスと互換でないことがあります。 "SoundBlaster (Pro/16) 互換" のサウンドカードが SoundBlaster 用ドライ バで動作しない時は、ほぼ確実にこれが原因でしょう。 この場合には、お使いのサウンドカードが互換であるデバイスを何とか調べて ください(例: ニュースグループ comp.os.linux.hardware に投稿する)。
サンプル用のサウンドファイルは、 ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z から入手可能です。
次にサウンドの録音を試してみましょう。カードがサウンド入力機能を持って いる場合、次のようにして簡易なテストを行うことができます。
# record 4 seconds of audio from microphone
EDT% dd bs=8k count=4 </dev/audio >sample.au
4+0 records in
4+0 records out
# play back sound
% cat sample.au >/dev/audio
もちろん、このテストをするためにはサウンドカードにマイクロフォンをつなぎ、 それに向かって喋る必要があります。また、マイクロフォンを入力デバイスとして 設定し、ゲインレベルを設定するために、ミキサープログラムが必要になるか もしれません。
これらのテストがうまくいったら、サウンド用の D/A と A/D のハードウェア とソフトウェアは正しく動作していると思っていいでしょう。 問題が生じた場合には、次のセクションを参照してください。
本文書に書いてある通りにしたのにうまく行かなかった場合には、以下の項目 をチェックしてみてください。以下の項目は、簡単なものから複雑なものへと 順番に並べてあります。ある項目のチェックに失敗したら、その問題を解決し てから次に進んでください。
サウンド機能を組み込んだカーネルを使っているかどうかは、
カーネルのタイムスタンプをチェックすることによって確認できます。
このためには uname
コマンドを使うこともできますし、
% uname -a
Linux fizzbin 2.2.4 #1 Tue Mar 23 11:23:21 EST 1999 i586 unknown
あるいは /proc/version
ファイルを見てもよいでしょう。
% cat /proc/version
Linux version 2.2.4 (root@fizzbin) (gcc version 2.7.2.3) #1 Tue Mar 23 11:23:21 EST 1999
タイムスタンプがカーネルをコンパイルした時間と異なっている場合には、
古いカーネルを使っていることになります。本当にリブートしましたか?
LILO を使っている場合には、LILO を再インストールしましたか(通常は
lilo
を実行します)?
フロッピーディスクを使ってブートしている場合、新しいブートフロッピーを
作成してそれを使ってブートしましたか?
最も手軽にこれを確認する方法は、前に説明した dev/sndstat
の出
力を調べることです。この出力が期待通りでなければ、カーネルの設定と構築
の手順のどこかに誤りがあります。カーネルの設定・構築からインストール作
業をやり直してみましょう。
カーネルの起動時にサウンドカードが認識されていることを確認してください。 起動時にメッセージが表示されているはずです。メッセージが画面から スクロールして見えなくなってしまった場合には
% dmesg
あるいは
% tail /var/log/messages
とすればもう一度メッセージを見ることができます。
サウンドカードが認識されていない場合、何か不具合があることになります。 まず、本当にカードがインストールされているかどうか確認してください。サ ウンドカードが DOS で動作する場合、ハードウェアは動作していると思って 間違いないでしょうから、カーネルの設定に問題がありそうです。サウンドカー ドの種類やパラメータの設定が間違っているか、そのサウンドカードが Linux のカーネルサウンドカードドライバでサポートされていないかのどちらかでしょ う。
一つの可能性としては、お使いのサウンドカードが、DOS のドライバで初期化
しないと互換サウンドカードにならないものであることが考えられ
ます。DOS を起動し、メーカーが用意しているサウンドカードのドライバをロー
ドしてください。それから Control-Alt-Delete
を使って Linux を
ソフトブートします。Linux におけるカードの I/O アドレス、DMA, IRQ の設
定は、DOS 用の設定と必ず同じにしてください。お使いの種類のカードの設定
については、サウンドドライバのソース配布に入っている
Readme.cards ファイルを参考にしてください。
サウンドカードがこの文書に載っていない場合、Linux ドライバでサポートさ れていない可能性があります。この文書の最後に示している参考情報のリスト をチェックすれば、何か情報が得られるかもしれません。
/dev/audio デバイスから dd
コマンドを使ってデー
タを読み出してみてください。エラーなく読み出せれば OK です。
訳注: 具体的には次のようにします。
% dd if=/dev/audio
しばらく待ってエラーにならなかったら、Ctrl-C で止めます。
これでうまくいかなかった場合には、IRQ や DMA の競合や、ハードウェアの 非互換性(そのデバイスが Linux でサポートされていないか、ドライバが間違っ たデバイスに対して設定されている)の類が問題である可能性があります。
可能性としては低いのですが、ハードウェアの故障かもしれません。 できれば DOS でテストを行って、この可能性を潰してください。
それでもまだ問題が解決しない場合には、最後に以下を試してみてください。
comp.os.linux
等の Usenet ニュースグループに質問
を投稿する(comp.os.linux.hardware が良いでしょう。これらのニュースグルー
プは流量が多いので、"sound" という文字列を記事のサブジェクトに入れてお
くと、その問題に詳しい人に見てもらいやすくなるでしょう)。
(訳注: fj.os.linux, japan.os.linux 等のニュースグループには日本語で投
稿できます。)Esc-x doctor
とタイプする。訳注: もちろん最後のものは冗談です。