FreeBSD ハンドブック
Prev | Chapter 7. マルチメディア | Next

# 7.2. サウンドカードの設定

寄稿: Moses Moore. FreeBSD 5.X のための再構成: Marc Fonvieille.

## 7.2.1. システムを設定する

設定をはじめる前に、あなたが持っているカードのモデル、 そのカードが使用しているチップ、そして PCI, ISA どちらのカードなのかを確認する必要があります。 FreeBSD は PCI および ISA の両方のカードに幅広く対応しています。 使用しているカードが対応しているかどうかは、 ハードウェアノート の対応オーディオデバイスの一覧を調べてください。 この文書には、カードに対してどのドライバを利用すればよいか についても言及されています。

サウンドデバイスを使うために、 適切なデバイスドライバを読み込まなければいけません。 これには二つの方法のどちらかでできるでしょう。 もっとも簡単な方法は kldload(8) を使ってサウンドカードのカーネルモジュールを単に読み込むことです。 次のコマンドで実現できます。

    # kldload snd_emu10k1

または `/boot/loader.conf` ファイルにこのような適切な行を加えて実現することもできます。

    snd_emu10k1_load="YES"

以上は Creative SoundBlaster® Live! サウンドカードの例です。 他に利用可能な読み込み可能なサウンドモジュールは `/boot/defaults/loader.conf` に記載されています。 どのドライバを利用すればいいか確かでなければ、 `snd_driver` モジュールを読み込んでみてください。

    # kldload snd_driver

`snd_driver` モジュールは、 一般に使用されるカードに対応したドライバをまとめて一度に読み込む メタドライバです。このドライバを使用すれば、 速やかに正しいドライバを探し出すことができるでしょう。 `/boot/loader.conf` ファイルを使用して、 すべてのサウンドドライバを読み込むこともできます。

`snd_driver` メタドライバの読み込み後に、 どのドライバがサウンドカードに選択されたのかを知りたいのなら `cat /dev/sndstat` コマンドで `/dev/sndstat` ファイルを調べてください。

> Note: FreeBSD 4.X ですべてのサウンドドライバを読み込むためには、 `snd_driver` モジュールの代わりに `snd` モジュールを使用してください。

二つ目の方法は、 サウンドカードのドライバをカーネルへ静的に組み込むことです。 以下の節では、この方法でハードウェアを対応させる方法を説明します。 カーネル再構築の詳細は Chapter 8 を参照してください。

### 7.2.1.1. サウンドに対応したカスタムカーネルを設定する

はじめに、汎用オーディオドライバ sound(4) をカーネルに追加します。 カーネルコンフィグレーションファイルに以下の行を追加してください。

    device sound

FreeBSD 4.X では、次の行を使用します。

    device pcm

次に、サウンドカードに対応したドライバを追加します。 それには、どのドライバがカードに対応しているかを知る必要があります。 使用しているカードに対する正しいドライバを決定するために、 ハードウェアノート の対応オーディオデバイスの一覧を調べてください。 たとえば、Creative SoundBlaster Live! サウンドカードは snd_emu10k1(4) ドライバが対応しています。 このカードを使用するためには、カーネルコンフィグレーションファイルに 以下の行を追加してください。

    device "snd_emu10k1"

ドライバのマニュアルページを読んで、 追加すべき構文を調べてください。 カーネルコンフィグレーションファイルにおける サウンドドライバの構文に関する情報は、 `/usr/src/sys/conf/NOTES` (FreeBSD 4.X では `/usr/src/sys/i386/conf/LINT`) にもあります。

PnP 非対応の ISA カードでは、 カーネルにカードが使用する資源 (IRQ, I/O ポートなど) を明示的に指定する必要があるかもしれません。 この場合は、`/boot/device.hints` ファイルを使用してください。 システムの起動時に、loader(8) はこのファイルを読み、設定情報をカーネルに渡します。 たとえば、PnP 非対応の古い Creative SoundBlaster 16 (ISA 接続) には snd_sb16(4) とともに snd_sbc(4) ドライバを使用します。 このカードを使用する場合には、カーネルコンフィグレーションファイルに 以下の行を追加すると同時に、

    device snd_sbc
    device snd_sb16

`/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"

この例では、 I/O ポートに `0x220` を、 IRQ に `5` を使用します。

`/boot/device.hints` ファイルに用いるべき構文は、 各ドライバのマニュアルページに記載されています。 FreeBSD 4.X では、 この設定をカーネルコンフィグレーションファイルに直接記述します。 ISA カードでは、たとえば以下のような行を追加してください。

    device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15

初期設定は以上の通りです。 カードを使用する状況によっては、 IRQ やその他の設定を変更する必要があるかもしれません。 詳細は snd_sbc(4) マニュアルページをご覧ください。

> Note: FreeBSD 4.X において、 マザーボードに搭載されたサウンドデバイスを利用するシステムでは、 以下の設定が必要になるかもしれません。

>     options PNPBIOS

## 7.2.2. サウンドカードのテスト

カーネルを変更して再起動するか、必要となるモジュールを読み込むと、 システムのメッセージバッファ (dmesg(8)) にサウンドカードが認識されたことが示されます。 たとえば、次のようなメッセージが出力されます。

    pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0
    pcm0: [GIANT-LOCKED]
    pcm0: <Cirrus Logic CS4205 AC97 Codec>

サウンドカードの状態は、`/dev/sndstat` ファイルを使用して確認することができます。

    # cat /dev/sndstat
    FreeBSD Audio Driver (newpcm)
    Installed devices:
    pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz 16384
    kld snd_ich (1p/2r/0v channels duplex default)

この出力はシステムによって異なるでしょう。 `pcm` デバイスがなければ、 今までの手順を振り返ってみてください。 カーネルコンフィグレーションファイルをもう一度見直して、 正しいデバイスを選択しているかどうか確認してください。 トラブルシューティングは Section 7.2.2.1 を参照してください。

すべてうまくいけば、サウンドカードが機能するでしょう。 CD-ROM または DVD-ROM ドライブがサウンドカードと適切に接続されていれば、 cdcontrol(1) を使ってドライブ内の CD を再生できます。

    % cdcontrol -f /dev/acd0 play 1

`audio/workman` のように、よりよいインタフェースを提供する さまざまなアプリケーションがあります。 MP3 オーディオファイルを聴くために `audio/mpg123` のようなアプリケーションをインストールしようと思うかもしれません。 手っ取り早くカードをテストするには、 `/dev/dsp` デバイスにデータを送ってみてください。 たとえば、以下のようにします。

    % cat filename > /dev/dsp

ここで `filename` はどんなファイルでも構いません。 このコマンドラインを実行すると雑音が発生するはずです。 これにより、サウンドカードが実際に動作していることを確認できます。

> Note: FreeBSD 4.X のユーザは、 サウンドカードのデバイスノードを使用前に作成する必要があります。 カードが認識されてメッセージバッファに `pcm0` が表示されたなら、 `root` 権限で次を実行しなければなりません。

>     # cd /dev
>     # sh MAKEDEV snd0

> もしカードが `pcm1` として認識されたのなら `snd0` を `snd1` に置き換えて、上と同様に実行してください。

> `MAKEDEV` を実行すると、サウンド関連のアプリケーションが使用する デバイスノード群が作成されます。

サウンドカードのミキサレベルは mixer(8) コマンドで変更することができます。 詳細は mixer(8) マニュアルページをご覧ください。

### 7.2.2.1. よくある問題

エラー | 解決方法
--- | ---
“`unsupported subdevice XX`” | いくつかのデバイスノードが正しく作成されて いません。上記の手順をくり返してください。
“`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!`” | `fstat | grep dsp` を使って、他のアプリケーションがデバイスを 使用しているか調べてください。 注目すべきトラブルメーカは esound と KDE のサウンド機能です。

## 7.2.3. 複数音源の利用

寄稿: Munish Chopra.

特定のアプリケーションとのサウンドデバイスの共用に対応していない時、 esound または artsd のように 同時に再生することのできる音源を複数実装していることは、 多くの場合望ましいことです。

FreeBSD では、 仮想サウンドチャネル を使ってこれを実現でき、sysctl(8) で設定できます。 仮想チャネルはカーネル内でサウンドを合成することにより、 サウンドカードの再生チャネルを多重化することができます。

仮想チャネルの数を決めるのに二つの sysctl 変数を設定できます。 `root` ユーザで以下のようにします。

    # sysctl hw.snd.pcm0.vchans=4
    # sysctl hw.snd.maxautovchans=4

上記の例では四つの仮想チャネルを設定しています。 これは通常利用する上で十分実用的な数です。 `hw.snd.pcm0.vchans` は `pcm0` が持っている仮想チャネルの数で、 一度デバイスが取り付けられると設定することができます。 `hw.snd.maxautovchans` は、 kldload(8) を用いて認識された新しいデバイスの仮想チャネル数です。 `pcm` モジュールはハードウェアドライバとは独立して読み込むことができるので、 後でどんなにデバイスを認識しても `hw.snd.maxautovchans` は仮想チャネルを格納できます。

> Note: デバイスを使用しているときに 仮想チャンネルの数を変更することはできません。 まず、ミュージックプレーヤやサウンドデーモンといった デバイスを使用しているすべてのプログラムを終了してください。

devfs(5) を使用していないのなら、 利用するアプリケーションに `/dev/dsp0`.`x` を指定しなければならないでしょう。 上記の例のように仮想チャネル数を 4 に設定すると `x` は 0 から 3 となります。 devfs(5) を使用しているシステムでは、 ユーザが意識しなくてもこれらが自動的に設定されます。

## 7.2.4. ミキサチャネルの初期値を設定する

寄稿: Josef El-Rayes.

各ミキサチャネルの初期値は pcm(4) ドライバのソースにハードコーディングされています。 起動時に記録していたミキサの値を設定する さまざまなアプリケーションやデーモンがありますが、 あまりよい解決方法ではありません。 FreeBSD 5.3-RELEASE 以降では、適切な値を `/boot/device.hints` ファイルに記述することにより、 ドライバレベルでミキサの初期値を設定することができます。 たとえば、以下のような行を追加します。

    hint.pcm.0.vol="100"

この例では、pcm(4) が読み込まれたと同時に、 ボリュームチャネルの初期値を 100 に設定します。

Prev | Home | Next
マルチメディア | Up | MP3 オーディオ