#navi(FAQ) カテゴリー: ハードウェア対応

サウンドモジュールの選び方を教えてください./ 音を鳴らしたいのですが,どうすればいいですか?

2005-04-24 07:09:32 (日)投稿
登録者: 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] を参照してください.

スクリプトの内容は以下の通りです.
(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 には,サウンドカード毎の設定情報もあります.)

  1. スクリプトをファイルに書いて,そのファイルを実行する方法.
    vi や Emacs を使える場合は,それらを使って上記の内容を書き込み,仮にsnd-module.sh という名前で,ホームディレクトリに保存したとします.
    一字一句,スペースなども間違えてはいけませんので,できれば一行毎にコピー&ペーストしたほうが確実です.
    (vi や Emacs の使い方は,情報がいたるところにありますから,自分で調べたほうが身につくでしょう.)
    kterm やコンソール上で cat コマンドを使って書き込むこともできますが,その方法も調べてみてください.
    次に,以下のコマンドで snd-module.sh に実行属性をつけます.
    ~$ chmod +x snd-module.sh
    最後に次のように実行します.
    ~$ ./snd-module.sh
    i810_audio
    ~$
  2. ファイルに書き出さず,スクリプトをそのまま実行する方法.
    このスクリプトを一度実行してどのモジュールを使うかわかれば,あとは必要ない,と思えば,この方法でもかまわないでしょう.
    上記スクリプトの 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 を実行後,なにもメッセージが出ないで通常のプロンプト(~#)に戻れば,マシンに装着されているサウンドカードに対応したモジュールがロードされたことになります.

※ 参考までに,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 をインストール してください.

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 や /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] を参考にしてください.ALSA で音の設定が保存できず,再起動すると音が鳴らない場合は,6. alsactl コマンド を参考にしてください.


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



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:40