#navi(FAQ)
カテゴリー: ハードウェア対応
* サウンドモジュールの選び方を教えてください./ 音を鳴らしたいのですが,どうすればいいですか? [#odc72d41]
RIGHT:2005-04-24 07:09:32 (日)投稿
RIGHT:登録者: Plamodocs Project
----
まず,マシンにサウンドカードが載っている,のが大前提になりますが,ほとんどのセットアップ PC なら間違いなく載っているでしょう.自作機の場合は,いわずもがなですね.

マシンのサウンドカードは,どんなチップ/サウンドコントローラを使っているのか? を調べるには,/sbin/lspci コマンドを使います.~
lspci は,PCI バスに接続されているすべてのデバイス情報を出力します.~
PCI バス接続のサウンドボードや,マザーボード上に組み込みで載っているものなら,これで調べることができます.(ISA バス接続については,ここでは触れません.)

/sbin/lspci はユーザでも実行できますから,コンソールや X 上の kterm などで,次のように入力します.(~$ は bash のユーザプロンプトです.)

 ~$ /sbin/lspci

出力された内容から,audio,Multimedia,sound,といった単語が含まれている行を確かめてください.それがあなたのマシンのサウンドチップ/コントローラの情報です.

サウンドチップ/コントローラがわかったら,次に,それに対応するサウンド・ドライバ・モジュールをロードすれば音が鳴るわけですが,ここが難点かもしれません.~
plamo をインストールした時点での kernel の場合,サウンド関係のドライバ類は,ほとんどのものがモジュールとして組み込まれていますので,よほど特殊なカードを除いて,
カーネルの再構築をしなくても認識されるはずです.

ここで紹介するスクリプトは,/sbin/lspci -n の結果から,対応するサウンドモジュールを自動的に決定するものです.~
このスクリプトは,plamo 4.0 以降のバージョンに実装されています.複数のカードには対応していないことと, ALSA(Advanced Linux Sound Architecture)と OSS(Open Sound System,カーネルソースに最初から入っているサウンドモジュール) というように同じカードに対する複数のドライバがあった場合を使い分けられない,といった制限はあるものの,それ以外であれば自動的に適切なサウンドモジュールを選択してくれます.

※ 複数のカード/複数のドライバ対応については,plamo-ML の記事,[[ [plamo:21865]>http://www.linet.gr.jp/ML/plamo/200401/msg00273.html]] を参照してください.

スクリプトの内容は以下の通りです.~
(plamo 4.0 以降のバージョンに実装されているものは,自動的にモジュールのロードまで行なうようになっていますが, ここでは,モジュール名を出力するところまでで終了しています.)

 #!/bin/sh
 vers=`uname -r`
 v_id="0x0000"`/sbin/lspci -n | grep 0401 | gawk '{print $4}' | cut -f 1 -d ':' | head -1`
 p_id="0x0000"`/sbin/lspci -n | grep 0401 | gawk '{print $4}' | cut -f 2 -d ':' | head -1`
 mod=`grep $v_id /lib/modules/$vers/modules.pcimap | grep $p_id | head -1 | gawk '{print $1}'`
 echo $mod

さて,このスクリプトの使い方は 2 種類あります.~
それぞれの実行の結果は,便宜的に i810_audio と出力されたと仮定します.~
この例では,plamo をインストールした直後に実行することを想定していますので,OSS のドライバを検知する結果になります.~
ただし,plamo-4.x シリーズでは 標準で ALSA を使うようになっています.~
(ALSA をインストールした場合は,モジュール名が snd-intel8x0 と異なったものになります. ALSA には,サウンドカード毎の設定情報もあります.)

+スクリプトをファイルに書いて,そのファイルを実行する方法.~
vi や Emacs を使える場合は,それらを使って上記の内容を書き込み,仮にsnd-module.sh という名前で,ホームディレクトリに保存したとします.~
一字一句,スペースなども間違えてはいけませんので,できれば一行毎にコピー&ペーストしたほうが確実です.~
(vi や Emacs の使い方は,情報がいたるところにありますから,自分で調べたほうが身につくでしょう.)~
kterm やコンソール上で cat コマンドを使って書き込むこともできますが,その方法も調べてみてください.~
次に,以下のコマンドで snd-module.sh に実行属性をつけます.
 ~$ chmod +x snd-module.sh
最後に次のように実行します.
 ~$ ./snd-module.sh
 i810_audio
 ~$
+ファイルに書き出さず,スクリプトをそのまま実行する方法.~
このスクリプトを一度実行してどのモジュールを使うかわかれば,あとは必要ない,と思えば,この方法でもかまわないでしょう.~
上記スクリプトの 2 行目から,順次 kterm やコンソールに次のように入力していきます.
 ~$ vers=`uname -r`
 ~$ v_id="0x0000"`/sbin/lspci -n | grep 0401 | gawk '{print $4}' | cut -f 1 -d ':' | head -1`
 以下同じようにスクリプトの 4 行目,次に 5 行目を入力します.
 最後に下記のように 6 行目を入力します.
 ~$ echo $mod
 i810_audio
 ~$ 

これで,どのモジュールを使えばいいのかもわかりました.~
このように出力された場合は,i810_audio がモジュール名ですから,root になり次のコマンドを使ってモジュールをロードします.

 ~$ su
 Password:
 ~# /sbin/modprobe i810_audio

modprobe を実行後,なにもメッセージが出ないで通常のプロンプト(~#)に戻れば,マシンに装着されているサウンドカードに対応したモジュールがロードされたことになります.

&aname(alsa-cfg);※ 参考までに,ALSA を使っている場合は,以下のコマンドを順次実行します.$mod には,上記のスクリプトを実行した結果,出力されるモジュール名を入力します.

 ~# /sbin/modprobe $mod
 ~# /sbin/modprobe soundcore
 ~# /sbin/modprobe snd-mixer-oss
 ~# /sbin/modprobe snd-pcm-oss
 ~# /sbin/modprobe snd-seq-oss
 ~# /usr/bin/aumix -q -v85 -w88

※ これも参考までに,モジュールをロードするコマンドとしては他に /sbin/insmod もあります.~
(実際のところ,moprobe は insmod へのリンクになっています.)
モジュールをアンロードするコマンドは,/sbin/rmmod です.

もし,以下のようなエラーメッセージが出る場合は,正しいモジュールを選択していないことになります.

 ~# /sbin/modprobe i810_audio
 /lib/modules/2.4.22/kernel/drivers/sound/i810_audio.o: init_module: No such device
 Hint: insmod errors can be caused by incorrect module parameters, including  invalid IO or IRQ parameters.
 You may find more information in syslog or the output from dmesg
 /lib/modules/2.4.22/kernel/drivers/sound/i810_audio.o: insmod    /lib/modules/2.4.22/kernel/drivers/sound/i810_audio.o failed

エラーメッセージがでなければ,ここで次のコマンドを使ってモジュールがロードされているか確かめてみましょう.

 ~$ /sbin/lsmod

lsmod の出力に,i810_audio と soundcore (ac97_codec もでているかも知れません)があれば間違いなくロードされています.

以上で音をだす準備は終了です.では,実際に音がでるか確かめてみましょう.スピーカーのボリュームをあげるのを忘れないでください.~
plamo を「お勧め」でインストールした場合なら,esdplay という wav や au といったサウンドファイルを再生するプログラムがインストールされているはずですから, 次のコマンドで,所在を確かめておきます.~
plamo-4.x シリーズでは aplay もあります.

 ~$ which esdplay
 /usr/bin/esdplay

このように出力されれば,/usr/bin/ 以下に esdplay があります.
 which: no esdplay in (/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/netpbm:/usr/openwin/bin:/usr/games/bin:/usr/games:/usr/games)
と出力された場合は,インストールされていませんので,  Plamo-3.x/contrib/WM/Enlightenment/esound.tgz を[[インストール>FAQ/47]] してください.

Plamo-3.x/contrib/Sound/ 内には,他にも xmms.tgz や sox.tgz, mpg123.tgz 等々のサウンド関係のパッケージがありますので, Plamo-3.x/contrib/Sound/diskso1 を読んで必要なものがあればインストールすればいいでしょう.

サウンドファイルは,/usr/X11R6/lib/X11/afterstep/sounds/ 内に au ファイルがありますし,KDE もインストールした場合は,/opt/kde/share/sounds/ 内に wav ファイルがあります.

では次のコマンドのように,どれか適当な au や wav ファイルを使って,実際に音を鳴らしてみましょう.

 ~$ esdplay /usr/X11R6/lib/X11/afterstep/sounds/gong.au
 ~$ esdplay /opt/kde/share/sounds/KDE_Startup_new.wav

音がでたなら,次は,plamo の起動時には自動的にサウンドモジュールをロードするように設定しておきましょう.~
基本的には,起動時にサウンドモジュールをロードする設定は,/etc/rc.d/rc.modules に追加します.~
kmod の機能を使って,サウンド関係のデバイスを使用する時には,対応するサウンドモジュールを自動的にロードするように設定するには,/etc/modules.conf にモジュール情報を追加します.

--/etc/rc.d/rc.modules に設定する.~
root になって,vi や Emacs などエディタを使い,直接次の行を書き込みます.
書き込む位置は, # Sound support: と書いてある行の下の適当な場所がいいでしょう.
 /sbin/modprobe i810_audio
※ ALSA の場合は,[[上記の参考の内容>#alsa-cfg]] をすべて書き込みます.
エディタを使わずに,コマンドラインから入力するには,次のようにします.
 ~$ su
 Password:
 ~# echo '/sbin/modprobe i810_audio' >> /etc/rc.d/rc.modules
この場合は,/etc/rc.d/rc.modules の最下行に追加されます.

--/etc/modules.conf に設定する.~
root になって,vi や Emacs などエディタを使い,直接次の行を書き込みます.書き込む位置は別にどこでもかまいません.~
サウンドカードが一枚しか載っていないなら,char-major-14 は,sound-slot-0 でもかまいません.(sound-slot-0 は一枚目のサウンドカードを指します.)
 alias char-major-14 i810_audio
 または,
 alias sound-slot-0 i810_audio
エディタを使わずに,コマンドラインから入力するには,次のようにします.
 ~$ su
 Password:
 ~# echo 'alias char-major-14 i810_audio' >> /etc/modules.conf
 または,
 ~# echo 'alias sound-slot-0 i810_audio' >> /etc/modules.conf
この場合は,/etc/modules.conf の最下行に追加されます.
※ 参考までに,ALSA の場合は,[[上記の参考の内容>#alsa-cfg]] に従って次のように書きます.$mod はモジュール名です.
 alias char-major-116 snd
 alias char-major-14 soundcore
 alias snd-card-0 $mod
 post-install snd-card-0 alsactl restore
 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

最後に /etc/rc.d/rc.modules や /etc/modules.conf を編集した場合は,depmod -a コマンドを実行して,モジュールの依存関係情報を更新します.

 ~$ su
 Password:
 ~# /sbin/depmod -a

/etc/modules.conf を編集した場合は,depmod -a を実行すれば,上記の esdplay を使ってすぐに音が鳴ります.~
/etc/rc.d/rc.modules を編集した場合は,depmod -a を実行した後に,次のコマンドを実行すると,esdplay を使って音が鳴ります.
 ~# /etc/rc.d/rc.modules restart

なお,一般的な /etc/modules.conf の説明や,ALSA のドライバモジュールについては, [[ [plamo:19717]>http://www.linet.gr.jp/ML/plamo/200307/msg00213.html]] を参考にしてください.ALSA で音の設定が保存できず,再起動すると音が鳴らない場合は,[[6. alsactl コマンド>http://plamo-linux.jp/I810/i810.html]] を参考にしてください. 


----
この件に関して追加情報などありましたら、以下にどうぞ;

#navi(FAQ)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS