次の方法で共有


IAudioCaptureClient::ReleaseBuffer メソッド (audioclient.h)

ReleaseBuffer メソッドはバッファーを解放します。

構文

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesRead
);

パラメーター

[in] NumFramesRead

クライアントがキャプチャ バッファーから読み取るオーディオ フレームの数。 このパラメーターは、前に取得したデータ パケット内のフレーム数と等しいか、0 である必要があります。

戻り値

メソッドが成功した場合は、S_OK を返します。 エラーが発生した場合、次の表に示す値が、可能なリターン コードに含まれますが、これらに限定されません。

リターン コード 説明
AUDCLNT_E_INVALID_SIZE
NumFramesRead パラメーターは、データ パケット サイズまたは 0 以外の値に設定されます。
AUDCLNT_E_OUT_OF_ORDER
この呼び出しの前に、対応する IAudioCaptureClient::GetBuffer 呼び出しが含まれていませんでした。
AUDCLNT_E_DEVICE_INVALIDATED
オーディオ エンドポイント デバイスが取り外されているか、オーディオ ハードウェアまたは関連するハードウェア リソースが再構成、無効、削除、またはその他の方法で使用できなくなります。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows オーディオ サービスが実行されていません。

注釈

クライアントは、 IAudioCaptureClient::GetBuffer メソッドを呼び出して、前に取得したデータ パケットの読み取りを完了したときに、このメソッドを呼び出す必要があります。

GetBuffer 呼び出しからクライアントが取得したパケット内のデータは、クライアントが ReleaseBuffer を呼び出してパケットを解放するまで有効なままであることが保証されます。

GetBuffer 呼び出しとそれに対応する ReleaseBuffer 呼び出しの間で、クライアントはデータ パケット全体を読み取るか、データ パケットを読み取らない必要があります。 クライアントが GetBuffer 呼び出しの後にパケット全体を読み取る場合は、データ パケット内のフレームの合計数に NumFramesRead を設定して ReleaseBuffer を呼び出す必要があります。 この場合、 GetBuffer を次に呼び出すと、新しいデータ パケットが生成されます。 クライアントが GetBuffer の呼び出しの後にパケットからデータを読み取らない場合は、NumFramesRead を 0 に設定して ReleaseBuffer を呼び出す必要があります。 この場合、次の GetBuffer 呼び出しでは、前の GetBuffer 呼び出しと同じデータ パケットが生成されます。

クライアントが、NumFramesRead をパケット サイズまたは 0 以外の値に設定して ReleaseBuffer を呼び出した場合、呼び出しは失敗し、エラー コード AUDCLNT_E_INVALID_SIZEを返します。

クライアントは、バッファーを取得する GetBuffer 呼び出しと、バッファーを 解放する ReleaseBuffer 呼び出しの間の過度の遅延を回避する必要があります。 オーディオ エンジンの実装では、 GetBuffer 呼び出しと対応する ReleaseBuffer 呼び出しが同じバッファー処理期間内に発生することを前提としています。 複数の期間にわたってバッファーの解放を遅らせるクライアントは、サンプル データを失うリスクがあります。

ReleaseBuffer メソッドを呼び出すコード例については、「Streamのキャプチャ」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー audioclient.h

こちらもご覧ください

IAudioCaptureClient インターフェイス

IAudioCaptureClient::GetBuffer