スポンサーリンク

PCM(4) FreeBSD/i386 カーネルインタフェースマニュアル PCM(4)

名称

pcm − FreeBSD オーディオデバイスドライバ

書式

device pcm0 at isa? port? tty irq 5 drq 1 flags 0x15

解説

pcm ドライバは WSS/MSS 仕様または SBPro や SB16 と互換性のある様々な ISA サウンドカードをサポートしています。音声入力/再生のみをサポートしており、 また、ほとんどのカードで疑似でない本当の全二重動作が可能です。

通常のパラメータの他に flags フィールドをセカンダリ DMA のチャネルを指定 するのに使用します (一般的には全二重カードで音声入力するために使用しま す)。 flags には、セカンダリ DMA チャネルを使用しないカードでは 0 を、使 用する場合にはチャネル C を指定するのに 0x10 + C をセットします。

PnP オーディオカードも FreeBSD リリース 2.2.6 から利用できるようになった pnp ドライバを用いることでサポートしています。詳しい情報は pnp(4) のマ ニュアルページを参照して下さい。特に (認識された) PnP カードに割り当てら れるユニット番号はレガシ ISA デバイスの後になること、実際にドライバで使用 するリソース (port および irq と drq) は "device pcm0" の行からではなく PnP の設定が用いられることは覚えておいてください。ですから、カーネルコン フィグファイルに

device pcm0 ...

のように書いたとすると、最初に見つかる PnP オーディオカードのユニット番号 は 1 となり、/dev/audio1、/dev/dsp1 等としてアクセスすることができます。 アプリケーションの多くは暗黙のうちに /dev/audio を使用するようになってい るので、以下のように /dev/audio から正しいデバイスのエントリにシンボリッ クリンクを作るのがよいでしょう。

cd /dev rm audio dsp dspW mixer ./MAKEDEV snd1 ln -s audio1 audio ln -s dsp1 dsp ln -s dspW1 dspW ln -s mixer1 mixer

本ドライバは WSS/MSS カードで最大能力を発揮します。 WSS/MSS はすっきりし た構造をしており、それぞれ独立した機能の集合になっています。偶然にもこれ らのカードは市場で一番安いオーディオカードでもあります。 SB や ESS などと いった他のカードは内部構造が複雑で、また資料が手に入らないことも稀ではあ りません。結果、これらのカードのサポートはそれほど良くありません。

ドライバは装備されているハードウェアを認識し、正しく動作させるために出来 る限りのことをします。したがってカーネルのコンフィグファイルにそれほど詳 細な設定をする必要はありません。 PnP カードについては自動的に識別するので 実に簡単です。 PnP でない ISA のカードについては (カーネルコンフィグファ イルで明示的にアドレスを指定して優先させない限りは) まずアドレス 0x530 と 0x604 で MSS カードを探し、その後に 0x220 と 0x240 で SB カードを探しま す。

IOCTL

本ドライバは Voxware の ioctl() のほとんどをサポートしており、 (広く使わ れている mpeg プレイヤや Linux のバイナリを含めて) ほとんどのアプリケー ションは修正することなしに動作します。違いはいくつかはあります (その中で も重要なひとつはオーディオバッファをメモリマップしてアクセスする能力の違 いです)。このためにアプリケーションの中にはオーディオモジュールにちょっと した変更をして再コンパイルする必要があるものもあるでしょう。サポートして いる ioctl の完全なリストについては /usr/include/machine/soundcard.h を参 照して下さい。

サポートしているカード

サポートしているコーデック (訳注: 音声の入出力を行う回路)/カードのリスト を、 PnP 設定が可能なものについては適用可能な PnP の設定情報も含めて、以 下に示します (デフォルトのパラメータを示しますが、実際のあなたのリソース はこれと違っているかもしれません。)

       CS4237, CS4236, CS4232, CS4231

pnp 1 0 os enable port0 0x534 port2 0x220 irq0 5 drq0 1 drq1 3

これらのカードはすべて MSS モードで全二重で完璧に動作します。このチッ プセットは、他にもありますが、A/Open の AW35 および AW32、 Intel のマ ザーボードのいくつか、および (CS4231は) 非 PnP のカードに使用されてい ます。

Voxware の資料によれば CS4232 はバグ持ちとの報告がありますが、本当か どうか定かではありません。私の Intel 製マザーボードの 1 つでは音声入 力が動作しませんが、これは単に音声入力の DMA チャネルが ISA の DMA コ ントローラに接続されていないためです。

GUSPnP
pnp 1 0 os enable port0 0x220 port1 0x320 port2 0x32c irq0 5 drq0 7 drq1 5

MSS モードで全二重をサポートしています。 GUSPnP は、本物の CS4231 を 使用しておらず、また mu-law 形式を扱うときのエミュレーションにバグが あると疑っています。このカードはもう生産されていませんので、わざわざ カードを (mu-law で動作することがわかっている) "Mode3" にセットする特 別なコードを採り入れることはしないで内部的に U8 形式を用いてドライバ 内部でソフトウェアで形式の変換をしています。このことによって分解能が 失われますので、このカードでは可能な限り 16 ビットモードを使用して下 さい。

Yamaha OPL-SAx
pnp 1 0 os enable port0 0x220 port1 0x530 port2 0x388 port3 0x370 irq0 5 drq0 1 drq1 3

すべてのモードで完全に動作します。このチップは様々な PnP カードで使用 されているのみならず、 (非 PnP モードで) マザーボードやラップトップマ シンで用いられています (たとえば東芝の Libretto)。

OPTi931
pnp 1 1 os enable port0 0x534 port2 0x220 port3 0xe0d irq0 10 drq0 1 drq1 6

このチップはバグ持ちですが、これらのチップ以外に全二重で動作するカー ドを見付けることが出来なかった時期もあったので、ドライバでたくさんの 回避策をとって全二重で動作するようにしました。チップのバグのた め、u-law 形式は内部では U8 形式を用いています。

SB16, Vibra16C, および古い SB16/AWExx カード
pnp 1 0 os enable port0 0x220 irq0 5 drq0 1 drq1 5

これらのコーデックは、片方向を 8 ビットで、もう一方を 16 ビットで使用 することで、制限付きの全二重動作可能です。ドライバはこのモードでの動 作をサポートしていますが、このモードでの動作は CreativeLabs ではサ ポートされていないことを覚えておいて下さい。

Vibra16X および新しめの SB16/AWExx カード
pnp 1 0 os enable port0 0x220 irq0 5 drq0 1 drq1 3

最近になって CreativeLabs はコーデック (DSP) を変更しましたが、新しい 回路は古い物と若干異なっています。最も顕著な違いは 2 つの 8 ビット DMA チャネルの使用法です。これによって本ドライバの全二重動作サポート が動作しなくなったようです。ウェーブテーブルを使用することによって全 二重動作は可能になるかもしれませんが、本ドライバではウェーブテーブル をサポートしていないので半二重で我慢してください。

SBPro とそのクローン
その他のほとんどのカードの既定動作がこのモードです。それらのカードに 対しては限定的な (そしてバグがあるかもしれない) サポート、8 ビット半 二重しかありません。 (ESS チップの場合のように)時としてハードウェアが それ以上の能力をもっている場合でも、です。

診断と問題解決

       This is XXX but LDN Y is disabled

これは bios が PnP デバイスを使用不可のままにしており、手動で "-c" つ きでブートして上記の pnp 設定を行わなければならないことを示していま す。

pcmX: unit not configured, perhaps you want pcmY ?
これは正しくないユニットを用いていることを示しています。一般に、正し いユニットへのシンボリックリンクを作らずに PnP カードを使用していると きに起こります。 /dev ディレクトリで正しいユニットを指すようにシンボ リックリンクを (場合によってはデバイスエントリも) 作り直して下さい。

timeout flushing dbuf_out ...
これはカードの設定に問題 (具体的には、DMA チャネル) があるかあるいは (滅多にないことですが) ドライバに問題があるかによって、カードが正しく 認識されていないことを示します。音声入力に使用する DMA チャネルを確認 して下さい。

capture does not work
これは入力 DMA チャネルが正しく設定されないときによく起こります。

バグ

資料がないため、SB16 のサポート状態は十分ではありません。同様に、ミキサの サポートは不完全であり、またあなたのカードの機能 (たとえば全体の音量の制 御など) の中にはすべてのデバイスについてサポートされていないものがあるか もしれません。

歴史

pcm デバイスドライバは FreeBSD 2.2.6 で初めて登場しました。

作者

pcm デバイスドライバおよびこのマニュアルページは Luigi Rizzo (luigi@iet.unipi.it) が書きました。

FreeBSD June 3, 1998 FreeBSD

スポンサーリンク