次の方法で共有


RenderExclusiveEventDriven

このサンプル アプリケーションでは、コア オーディオ API を使用して、ユーザーが指定した出力デバイスにオーディオ データをレンダリングします。 このサンプルでは、排他的モードでのレンダリング クライアントのイベント ドリブン バッファリングを示します。 排他モード ストリームの場合、クライアントはエンドポイント バッファーをオーディオ デバイスと共有します。

このトピックには、次のセクションが含まれています。

形容

このサンプルでは、次の機能を示します。

  • マルチメディア デバイスの列挙と選択のための MMDevice API します。
  • ストリーム管理操作用の WASAPI。

必要条件

バージョン
Windows SDK Windows 7
Visual Studio 2008

 

サンプルのダウンロード

このサンプルは、次の場所にあります。

場所 パス/URL
Windows SDK \Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderExclusiveEventDriven\...

 

サンプルのビルド

RenderExclusiveEventDriven サンプルをビルドするには、次の手順に従います。

  1. Windows SDK の CMD シェルを開き、RenderExclusiveEventDriven サンプル ディレクトリに変更します。
  2. RenderExclusiveEventDriven ディレクトリ start WASAPIRenderExclusiveEventDriven.sln コマンドを実行して、Visual Studio ウィンドウで WASAPIRenderExclusiveEventDriven プロジェクトを開きます。
  3. ウィンドウ内から、デバッグ またはリリース ソリューション構成 選択し、メニュー バーから ビルド メニューを選択し、ビルド オプションを選択します。 SDK の CMD シェルから Visual Studio を開かない場合、Visual Studio は SDK ビルド環境にアクセスできません。 その場合、プロジェクト ファイル WASAPIRenderExclusiveEventDriven.vcproj で使用される環境変数 MSSdk を明示的に設定しない限り、サンプルはビルドされません。

サンプルの実行

デモ アプリケーションを正常にビルドすると、実行可能ファイル (WASAPIRenderExclusiveEventDriven.exe) が生成されます。 これを実行するには、コマンド ウィンドウに「WASAPIRenderExclusiveEventDriven」と入力し、その後に必須または省略可能な引数を入力します。 次の例は、既定のマルチメディア デバイスで再生時間を指定してサンプルを実行する方法を示しています。

WASAPIRenderExclusiveEventDriven.exe -d 20 -multimedia

次の表に、引数を示します。

引数 形容
-? ヘルプを表示します。
-h ヘルプを表示します。
-f Hz 単位の正弦波周波数。
-l オーディオ レンダリングの待機時間 (ミリ秒単位)。
-d 正弦波の継続時間 (秒)。
-m MMCSS の使用を無効にします。
-慰める 既定のコンソール デバイスを使用します。
-通信 既定の通信デバイスを使用します。
-マルチメディア 既定のマルチメディア デバイスを使用します。
-エンドポイント スイッチ値で指定されたエンドポイント識別子を使用します。

 

アプリケーションを引数なしで実行すると、使用可能なデバイスが列挙され、レンダリング セッション用のデバイスを選択するようにユーザーに求められます。 ユーザーがデバイスを指定した後、アプリケーションは 440 Hz で 10 秒間正弦波をレンダリングします。 これらの値は、-f と -d スイッチの値を指定することで変更できます。

RenderExclusiveEventDriven サンプルでは、イベント ドリブン バッファリングを示します。 このサンプルでは、次の方法を示します。

  • オーディオ クライアントをインスタンス化し、排他モードで実行するように構成し、IAudioClient::Initializeへの呼び出しで AUDCLNT_STREAMFLAGS_EVENTCALLBACK フラグを設定して、イベント ドリブン バッファリング有効にします。
  • IAudioClient::SetEventHandle メソッドを呼び出して、イベント ハンドルをシステムに提供することで、レンダリングする準備ができているサンプルにクライアントを関連付けます。
  • オーディオ エンジンからサンプルを処理するレンダリング スレッドを作成します。
  • バッファーをデバイスに送信する前に、バッファーを 128 バイトの境界に適切に配置します。 これは、エンジンの周期性を調整することによって行われます。
  • デバイス エンドポイントのミックス形式を確認して、サンプルをレンダリングできるかどうかを判断します。 デバイスがミックス形式をサポートしていない場合、データは PCM に変換されます。
  • ストリーム切り替えを処理します。

レンダリング セッションが開始され、ストリームが開始されると、オーディオ エンジンは、バッファーを処理する準備が整うたびに、指定されたイベント ハンドルに通知してクライアントに通知します。 オーディオ データは、タイマー駆動ループで処理することもできます。 このモードは、RenderExclusiveTimerDriven サンプルで示されています。

ストリームのレンダリングの詳細については、「Streamのレンダリング」を参照してください。

コア オーディオ API を使用する SDK サンプルを する