RenderExclusiveEventDriven
このサンプル アプリケーションでは、コア オーディオ API を使用して、ユーザーが指定した出力デバイスにオーディオ データをレンダリングします。 このサンプルでは、排他的モードでのレンダリング クライアントのイベント ドリブン バッファリングを示します。 排他モード ストリームの場合、クライアントはエンドポイント バッファーをオーディオ デバイスと共有します。
このトピックは、次のセクションで構成されています。
説明
このサンプルでは、次の機能について説明します。
- マルチメディア デバイスの列挙と選択のための MMDevice API 。
- ストリームの管理操作用の WASAPI。
要件
Product | バージョン |
---|---|
Windows SDK | Windows 7 |
Visual Studio | 2008 |
サンプルのダウンロード
このサンプルは、次の場所にあります。
場所 | パス/URL |
---|---|
Windows SDK | \Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderExclusiveEventDriven\... |
サンプルのビルド
RenderExclusiveEventDriven サンプルをビルドするには、次の手順を使用します。
- Windows SDK の CMD シェルを開き、RenderExclusiveEventDriven サンプル ディレクトリに変更します。
- RenderExclusiveEventDriven ディレクトリでコマンド
start WASAPIRenderExclusiveEventDriven.sln
を実行して、Visual Studio ウィンドウで WASAPIRenderExclusiveEventDriven プロジェクトを開きます。 - ウィンドウ内から、[デバッグ] または [リリース] ソリューションの構成を選択し、メニュー バーから [ビルド] メニューを選択して、[ビルド] オプションを選択します。 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 の使用を無効にします。 |
-console | 既定のコンソール デバイスを使用します。 |
-communications | 既定の通信デバイスを使用します。 |
-multimedia | 既定のマルチメディア デバイスを使用します。 |
-endpoint | スイッチ値で指定されたエンドポイント識別子を使用します。 |
アプリケーションを引数なしで実行すると、使用可能なデバイスが列挙され、レンダリング セッション用のデバイスを選択するようにユーザーに求めます。 ユーザーがデバイスを指定すると、アプリケーションは 440 Hz で 10 秒間正弦波をレンダリングします。 これらの値は、-f スイッチ値と -d スイッチ値を指定することで変更できます。
RenderExclusiveEventDriven サンプルでは、イベント ドリブン バッファリングを示します。 このサンプルは次の方法を示しています。
- オーディオ クライアントをインスタンス化し、排他モードで実行するように構成して、IAudioClient::Initialize の呼び出しで AUDCLNT_STREAMFLAGS_EVENTCALLBACK フラグを設定することでイベント ドリブン バッファリングを有効にします。
- IAudioClient::SetEventHandle メソッドを呼び出してイベント ハンドルをシステムに提供することで、レンダリングする準備ができているサンプルにクライアントを関連付けます。
- オーディオ エンジンからサンプルを処理するレンダリング スレッドを作成します。
- バッファーをデバイスに送信する前に、バッファーを 128 バイトの境界に適切に配置します。 これは、エンジンの周期性を調整することによって行われます。
- デバイス エンドポイントの混合形式を確認して、サンプルをレンダリングできるかどうかを判断します。 デバイスが混合形式をサポートしていない場合、データは PCM に変換されます。
- ストリームの切り替えを処理します。
レンダリング セッションが開始され、ストリームが開始されると、オーディオエンジンは、クライアントが処理できるバッファの準備が整うたびに、提供されたイベントハンドルにシグナルを送り、クライアントに通知します。 オーディオ データは、タイマー駆動型ループで処理することもできます。 このモードは、RenderExclusiveTimerDriven サンプルで示されています。
ストリームのレンダリングの詳細については、「ストリーム のレンダリング」を参照してください。
関連トピック