Microsoft DirectX 8.0

オーディオ キャプチャ

Microsoft® DirectShow® を使用すると、マイクロホンやテープ プレーヤーなどのデバイスからシステムのサウンド カードによる入力を介して、オーディオ データをキャプチャできる。一般に、次のような状況での使用が考えられる。

エンドユーザーがサウンド カードからハード ディスクにオーディオをキャプチャするにはいくつかのオプションがある。多くのサウンド カードには、オーディオ入力からミキシングや録音を行うためのアプリケーションが付属している。Microsoft® Windows® オペレーティング システムには、マイクロホンからの録音を行う単純なユーティリティ アプリケーションとして、サウンド レコーダーがある。Windows Media™ Tools には、このようなタスクを実行できるスタンドアロン アプリケーションの Windows Media Encoder がある。また、Windows Media Encoder は、DirectShow アプリケーションに Microsoft® DirectX® Media Object (DMO) として組み込むこともできる。ここでは、DirectShow を使った独自アプリケーションにオーディオ キャプチャ機能を統合する方法について説明する。

オーディオ キャプチャ フィルタ

サウンド カード上のアナログ入力からのオーディオ キャプチャは、オーディオ キャプチャ フィルタを使うことで可能になる。このフィルタでは、Microsoft® Platform SDK waveInXXX API (waveInOpen、waveInStart、waveInGetID など) を使用し、これらの API をドライバでサポートする任意のデバイスを DirectShow フィルタ グラフに追加できるようにする。オーディオ キャプチャ フィルタにより、マイクロホンやラインイン入力など、サウンド カード上のすべての入力が公開される。CD オーディオ入力からキャプチャすることもできるが、この場合、オーディオ ストリームは既にデジタル アナログ コンバータを経由しているため、オリジナルの CD と比較すると音質が低下する。CD からの直接デジタル キャプチャについては、Windows Media 7 SDK を参照すること。

各入力ピンの数、種類、性質、および名前は、サウンド カードとそのドライバにより異なる。特定のサウンド カードの機能を完全に理解して利用するには、カード製造業者からドキュメンテーションを入手する必要がある。

オーディオ キャプチャ フィルタは、サウンド カード上の入力を通常の DirectShow 入力ピンとして表す。これらのピンは、ドライバが入力ミキサー ラインとして何を公開するかを表す。これらのピンにデータは流れない。これらは各ラインのレベルを有効にして設定するための手段を提供するのみである。各ラインで利用できるコントロールの種類は、ドライバにより異なる、たとえばドライバによるサポートがあれば、入力ライン上の低音域部と高音域部を制御するためだけにピンを使うことができる。

GraphEdit ユーティリティ プログラム内のオーディオ キャプチャ フィルタを見るには、以下のようにする :

システム上の各カードはフィルタの別々のインスタンスによって表現される。フィルタ上に見えるピンは違っているあるいは違った名前をもっている可能性がある、それはシステムのサウンドカードドライバに依存する。それらのピンは IAMAudioInputMixer インターフェイスをサポートする、IAMAudioInputMixer::put_Enableを使うことによってアプリケーションは入力 (複数も可) を選択できる。

入力の有効と無効を個別に切り替えることに加え、アプリケーションは低音域部、高音域部、およびボリューム レベルも個別に設定できる。複数の入力を同時にキャプチャする場合、フィルタ自体に実装されている IAMAudioInputMixer インターフェイスを通じて、ミキシング、低音域部、高音域部、およびボリューム レベル全体を制御できる。また、フィルタには IAMBufferNegotiation も実装されている。これはオーディオ プレビューにおける遅延時間制御に使用する。オーディオ キャプチャ フィルタのバッファ サイズは、既定では 0.5 秒に設定される。これはキャプチャ用に最適化されているが、ライブ オーディオをキャプチャしながらプレビューする場合は、ストリームのレンダリングに 0.5 秒の遅延が生じることになる。この遅延時間を短縮するには、IAMBufferNegotiation::SuggestAllocatorProperties メソッドを使って、ALLOCATOR_PROPERTIES 構造体の cbBuffer メンバにこれより小さいサイズを指定する。通常は 80 ミリ秒のバッファが安全であるが、30 〜 40 ミリ秒のバッファでも十分なことが多い。バッファが小さすぎると、音質は低下する。

キャプチャに利用できるサンプリング レートとオーディオ フォーマットは、ドライバにより決定される。利用できるサンプリング レートとフォーマットを列挙するには、オーディオ キャプチャ フィルタの出力ピン上の IAMStreamConfig インターフェイスを使用する。フィルタは、出力ピンのメディア タイプを受け入れる任意のフィルタに、ダウンストリームを接続できる。その後、オーディオ データは、スピーカによるレンダリング、カスタムの変換フィルタによる変換、ファイルへの圧縮および書き込みが可能になる。

オーディオ キャプチャ フィルタ グラフ

次に、さまざまなオーディオ キャプチャ ソリューションに対して考えられるいくつかのフィルタ グラフを示す。

  WaveDest フィルタはサンプルとして提供されるが、構築と登録はユーザー自身が行わなければならない。

オーディオ キャプチャ フィルタ グラフの作成

オーディオ キャプチャ フィルタ グラフを作成するには、次の 3 つの基本作業がある。

  1. グラフの構築
  2. オーディオ キャプチャ ソースの列挙
  3. ユーザーによる入力ライン選択への対応

グラフの構築

ファイルに書き込むオーディオ キャプチャ グラフの構築方法は、作成するファイルのフォーマットにより異なる。AVI フォーマットに保存する場合、Capture Graph Builder を使ってグラフを構築する。これが最も簡単なオーディオ キャプチャ方法である。結果のファイルには、1 つのオーディオ ストリームが含まれ、ビデオ ストリームは含まれない。ASF フォーマットに保存する場合も Capture Graph Builder を使用できるが、あらかじめ Windows Media SDK をインストールして、アンロックするソフトウェア キーを取得する必要がある。Capture Graph Builder の使用法の詳細については、「キャプチャ アプリケーションの書き方」を参照すること。その情報の多くは、オーディオ専用グラフにも同様に適用できる。

WAV ファイルに書き込む場合、このファイルは WaveDest フィルタを認識しないので、Capture Graph Builder を使用できない。DirectShow はこのフィルタをサンプルとしてのみ提供し、コンパイルと登録はユーザーが行う必要がある。WaveDest をローカル システムに登録したら、IFilterGraph::AddFilter メソッドでオーディオ キャプチャ フィルタ、WavDest フィルタ、およびファイル ライタ フィルタをグラフに追加し、IFilterGraph::ConnectDirect メソッドでピンを接続することでグラフを手動で構築する必要がある。

オーディオ キャプチャ ソースの列挙

フィルタ グラフ マネージャおよび Capture Graph Builder またはその一方のインスタンスを作成してから、System Device Enumerator を使って、システム上で利用できるすべてのオーディオ キャプチャ デバイスの一覧を取得する。この方法の詳細については、「デバイスとフィルタの列挙」を参照すること。返された一覧の先頭にあるデバイスは、ユーザーが 優先録音デバイスとして選択したデバイスとなる (優先デバイスを選択するには、コントロールパネルの [サウンドとマルチメディア] をクリックする)。 デバイス列挙チュートリアルもデバイスを指定するフレンドリ名文字列の取得方法を示す。するとこの文字列がリストボックスに挿入され、複数デバイスからユーザーが選択可能になる

ユーザーによる入力ライン選択への対応

オーディオ キャプチャ フィルタをグラフに追加したら、IAMAudioInputMixer インターフェイス メソッドを使って、有効にするライン、およびそのラインのボリューム、低音域部、および高音域部の設定を選択できる (ドライバでサポートされる場合)。また、フィルタのプロパティ ページを使う方法でも、ユーザーが利用できるピンから選択したり、各種レベルを設定したりすることができる。詳細については、「フィルタのプロパティ ページの表示」および「オーディオ キャプチャ フィルタ」を参照すること。そのほかに、アプリケーションのプログラミング コードでピンを列挙して、独自のユーザー インターフェイスを作成することもできる。ピンの列挙についての情報は、「ピンの列挙」を参照すること。