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 MSS モードで全二重をサポートしています。 GUSPnP は、本物の CS4231 を 使用しておらず、また mu-law 形式を扱うときのエミュレーションにバグが あると疑っています。このカードはもう生産されていませんので、わざわざ カードを (mu-law で動作することがわかっている) "Mode3" にセットする特 別なコードを採り入れることはしないで内部的に U8 形式を用いてドライバ 内部でソフトウェアで形式の変換をしています。このことによって分解能が 失われますので、このカードでは可能な限り 16 ビットモードを使用して下 さい。 Yamaha OPL-SAx すべてのモードで完全に動作します。このチップは様々な PnP カードで使用 されているのみならず、 (非 PnP モードで) マザーボードやラップトップマ シンで用いられています (たとえば東芝の Libretto)。 OPTi931 このチップはバグ持ちですが、これらのチップ以外に全二重で動作するカー ドを見付けることが出来なかった時期もあったので、ドライバでたくさんの 回避策をとって全二重で動作するようにしました。チップのバグのた め、u-law 形式は内部では U8 形式を用いています。 SB16, Vibra16C, および古い SB16/AWExx カード これらのコーデックは、片方向を 8 ビットで、もう一方を 16 ビットで使用 することで、制限付きの全二重動作可能です。ドライバはこのモードでの動 作をサポートしていますが、このモードでの動作は CreativeLabs ではサ ポートされていないことを覚えておいて下さい。 Vibra16X および新しめの SB16/AWExx カード 最近になって CreativeLabs はコーデック (DSP) を変更しましたが、新しい 回路は古い物と若干異なっています。最も顕著な違いは 2 つの 8 ビット DMA チャネルの使用法です。これによって本ドライバの全二重動作サポート が動作しなくなったようです。ウェーブテーブルを使用することによって全 二重動作は可能になるかもしれませんが、本ドライバではウェーブテーブル をサポートしていないので半二重で我慢してください。 SBPro とそのクローン 診断と問題解決 |
This is XXX but LDN Y is disabled
これは bios が PnP デバイスを使用不可のままにしており、手動で "-c" つ きでブートして上記の pnp 設定を行わなければならないことを示していま す。 pcmX: unit not configured, perhaps you want pcmY ? timeout flushing dbuf_out ... capture does not work バグ |
資料がないため、SB16 のサポート状態は十分ではありません。同様に、ミキサの サポートは不完全であり、またあなたのカードの機能 (たとえば全体の音量の制 御など) の中にはすべてのデバイスについてサポートされていないものがあるか もしれません。 |
歴史
pcm デバイスドライバは FreeBSD 2.2.6 で初めて登場しました。 |
作者
pcm デバイスドライバおよびこのマニュアルページは Luigi Rizzo (luigi@iet.unipi.it) が書きました。 FreeBSD June 3, 1998 FreeBSD |