設定をはじめる前に、サウンドカードのモデル、 そのカードが使用しているチップを確認してください。 FreeBSD は サウンドカードに幅広く対応しています。 使用しているカードが対応しているかどうか、 どの FreeBSD ドライバを使うかについて、 ハードウェアノート の対応オーディオデバイスの一覧を確認してください。
サウンドデバイスを使うためには、 デバイスドライバを読み込まなければいけません。 もっとも簡単な方法は kldload(8) を使ってサウンドカードのカーネルモジュールを読み込むことです。 次の例は、Intel 仕様のビルトインオーディオチップセットのドライバを読み込む例です。
#
kldload snd_hda
このドライバを起動時に読み込むように設定するためには、
/boot/loader.conf
にドライバを追加してください。
このドライバの場合は以下の行になります。
snd_hda_load="YES"
他に利用可能な読み込み可能なサウンドモジュールは
/boot/defaults/loader.conf
に記載されています。
どのドライバを利用すればいいか確かでなければ、
snd_driver
モジュールを読み込んでください。
#
kldload snd_driver
snd_driver
モジュールは、
一般に使用されるカードに対応したドライバをまとめて一度に読み込むメタドライバです。
このドライバを使用すれば、速やかに正しいドライバを探し出すことができます。
/boot/loader.conf
ファイルを使用して、
すべてのサウンドドライバを読み込むこともできます。
snd_driver
メタドライバの読み込み後に、
どのドライバがサウンドカードに選択されたのかを知るには、
cat /dev/sndstat
と入力してください。
この節は、 サウンドカードのドライバをカーネルへ静的に組み込もうと考えているユーザ向けです。 カーネル再構築の詳細は 8章FreeBSD カーネルのコンフィグレーション を参照してください。
サウンドに対応したカスタムカーネルを使うときには、 オーディオフレームワークドライバをカーネルコンフィグレーションファイルに追加してください。
device sound
次に、サウンドカードに対応したドライバを追加します。 前節の Intel 仕様のビルトインオーディオチップセットの例では、 カスタムカーネルコンフィグレーションファイルに以下の行を追加してください。
device snd_hda
ドライバのマニュアルページを読んで、 ドライバが使用するデバイス名を調べてください。
PnP 非対応の ISA サウンドカードでは、
IRQ および I/O ポートの設定を
/boot/device.hints
に指定する必要があるかもしれません。
システムの起動時に、loader(8)
はこのファイルを読み、設定情報をカーネルに渡します。
たとえば、PnP 非対応の古い Creative SoundBlaster® 16 (ISA 接続)
には snd_sb16
とともに
snd_sbc(4) ドライバを使用します。
このカードを使用する場合には、
カーネルコンフィグレーションファイルに以下の行を追加してください。
device snd_sbc device snd_sb16
もしカードが 0x220
I/O port と
IRQ 5
を使用している場合には、
/boot/device.hints
に以下の行を追加してください。
hint.sbc.0.at="isa" hint.sbc.0.port="0x220" hint.sbc.0.irq="5" hint.sbc.0.drq="1" hint.sbc.0.flags="0x15"
/boot/device.hints
に用いるべき構文は、sound(4) および、
サウンドカードの各ドライバのマニュアルページに記載されています。
これまでの設定はデフォルトのものです。 カードを使用する状況によっては、 IRQ やその他の設定を変更する必要があるかもしれません。 このカードについての詳細は、 snd_sbc(4) をご覧ください。
必要となるモジュールを読み込むか、カスタムカーネルで再起動すると、
サウンドカードが検出されます。
確認をするには、dmesg | grep pcm
と実行してください。
この例は、ビルトイン Conexant CX20590
チップセットを搭載したシステムのものです。
pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 5 on hdaa0 pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 6 on hdaa0 pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> at nid 31,25 and 35,27 on hdaa1
サウンドカードの状態は、 以下のコマンドを使用して確認することもできます。
#
cat /dev/sndstat
FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64) Installed devices: pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play) pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play) pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> (play/rec) default
この出力は、サウンドカードによって異なります。
pcm
デバイスがなければ、
適切なデバイスドライバが読み込まれているか、
カーネルに追加されてコンパイルされているかどうかを確認してください。
次の節では、良くある問題とその解決方法をリストアップしています。
すべてうまくいけば、サウンドカードが FreeBSD で機能するでしょう。 CD または DVD ドライブのオーディオ出力端子がサウンドカードと適切に接続されていれば、 cdcontrol(1) を使ってドライブ内のオーディオ CD を再生できます。
%
cdcontrol -f /dev/acd0 play 1
オーディオ CD は特別なエンコーディングが行われているため、 mount(8) を使ってマウントすべきではありません。
audio/workman のように、 よりよいインタフェースを提供するさまざまなアプリケーションがあります。 audio/mpg123 port をインストールして MP3 オーディオファイルを聞くことができます。
手っ取り早くカードをテストするには、
/dev/dsp
デバイスにデータを送ってみてください。
%
cat
filename
> /dev/dsp
ここで
は、どのような形式のファイルでも構いません。
このコマンドラインを実行すると雑音が発生するはずです。
これにより、サウンドカードが動作していることを確認できます。filename
/dev/dsp*
デバイスノードは、
必要に応じて自動的に作成されます。
デバイスノードが使用されていない場合には存在せず、
ls(1) の出力に表示されません。
表7.1「良くあるエラーメッセージ」 は、 良くあるエラーメッセージとその解決法の一覧です。
エラー | 解決方法 |
---|---|
sb_dspwr(XX) timed out | 使用する I/O ポートが適切に設定されていません。 |
bad irq XX | 使用する IRQ が正しく設定されていません。 サウンドカードの IRQ と設定した IRQ が同じかどうか確かめてください。 |
xxx: gus pcm not attached, out of memory | デバイスを使用するのに十分なメモリを確保できません。 |
xxx: can't open /dev/dsp! |
|
最近のグラフィックカードの中には、
HDMI を利用するため、
グラフィックカード自身がサウンドカードを持つものがあります。
このようなサウンドデバイスには、
時としてサウンドカードより若い番号が付けられることがあります。
そのような場合には、
サウンドカードをデフォルトプレイバックデバイスとして利用できません。
このことが原因かどうかを確認するには、dmesg を実行して
pcm
を探してください。
以下のような出力を得るかもしれません。
... hdac0: HDA Driver Revision: 20100226_0142 hdac1: HDA Driver Revision: 20100226_0142 hdac0: HDA Codec #0: NVidia (Unknown) hdac0: HDA Codec #1: NVidia (Unknown) hdac0: HDA Codec #2: NVidia (Unknown) hdac0: HDA Codec #3: NVidia (Unknown) pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0 pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0 pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0 pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0 hdac1: HDA Codec #2: Realtek ALC889 pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1 pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1 pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1 pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1 ...
この例では、グラフィックカード (NVidia
)
には、サウンドカード (Realtek ALC889
)
より若い番号が付けられています。
サウンドカードをデフォルトのプレイバックデバイスとして利用するには、
hw.snd.default_unit
をプレイバックで使用するユニット番号に変更してください。
#
sysctl hw.snd.default_unit=
n
ここで、n
は使用するサウンドデバイスの番号です。
この例では 4
です。
/etc/sysctl.conf
に以下の行を入れると、
設定の変更が常に反映されるようになります。
hw.snd.default_unit=4
同時に再生することのできる音源を複数実装していることは、 多くの場合望ましいことです。 FreeBSD では、「仮想サウンドチャネル」 を使ってカーネル内でサウンドを合成することにより、 サウンドカードの再生を多重化することができます。
仮想チャネルの数を決めるのに三つの sysctl(8) 変数を設定できます。
#
sysctl dev.pcm.0.play.vchans=4
#
sysctl dev.pcm.0.rec.vchans=4
#
sysctl hw.snd.maxautovchans=4
この例では四つの仮想チャネルを設定しています。
これは通常利用する上で十分実用的な数です。
dev.pcm.0.play.vchans=4
と
dev.pcm.0.rec.vchans=4
は、
デバイスが取り付けられた後で設定できます。
これらは pcm0
が再生や録音のために持っている仮想チャネルの数です。
hw.snd.maxautovchans
は、
kldload(8)
を用いて認識された新しいデバイスの仮想チャネル数です。
pcm
モジュールはハードウェアドライバとは独立して読み込むことができるので、
hw.snd.maxautovchans
は、オーディオデバイスが取り付けられた時に、
デバイスに与えられる仮想チャネルの数を表しています。
より詳細な情報については pcm(4) を参照してください。
デバイスを使用しているときに仮想チャンネルの数を変更することはできません。 まず、ミュージックプレーヤやサウンドデーモンといった デバイスを使用しているすべてのプログラムを終了してください。
/dev/dsp0
を必要とするプログラムが意識しなくても、
適切な pcm
デバイスが自動的に設定されます。
本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。