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

ReleaseBuffer メソッドは、IAudioRenderClient::GetBuffer メソッドの前の呼び出しで取得したバッファー領域を解放します。

構文

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesWritten,
  [in] DWORD  dwFlags
);

パラメーター

[in] NumFramesWritten

クライアントによってデータ パケットに書き込まれたオーディオ フレームの数。 このパラメーターの値は、IAudioRenderClient::GetBuffer メソッドに渡される NumFramesRequested パラメーターで指定されているように、データ パケットのサイズ以下である必要があります。

[in] dwFlags

バッファー構成フラグ。 呼び出し元は、このパラメーターを 0 または次の _AUDCLNT_BUFFERFLAGS 列挙値 (フラグ ビット) に設定できます。

AUDCLNT_BUFFERFLAGS_SILENT

このフラグ ビットが設定されている場合、オーディオ エンジンは、パケットに含まれるデータ値に関係なく、データ パケットに無音が含まれているかのように扱います。 このフラグにより、クライアントがレンダリング バッファーに無音データを明示的に書き込む必要がなくなります。

戻り値

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

リターン コード 説明
AUDCLNT_E_INVALID_SIZE
NumFramesWritten 値が、前の IAudioRenderClient::GetBuffer 呼び出しで指定された NumFramesRequested 値を超えています。
AUDCLNT_E_BUFFER_SIZE_ERROR
ストリームは排他モードであり、イベント ドリブン バッファリングを使用しますが、クライアントはバッファーのサイズではないパケットを解放しようとしました。
AUDCLNT_E_OUT_OF_ORDER
この呼び出しの前に 、IAudioRenderClient::GetBuffer への対応する呼び出しが行われませんでした。
AUDCLNT_E_DEVICE_INVALIDATED
オーディオ エンドポイント デバイスが取り外されているか、オーディオ ハードウェアまたは関連するハードウェア リソースが再構成、無効、削除、またはその他の方法で使用できなくなります。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows オーディオ サービスが実行されていません。
E_INVALIDARG
パラメーター dwFlags が有効な値ではありません。

注釈

クライアントは、 IAudioRenderClient::GetBuffer メソッドの前の呼び出しで要求したフレームの数と同じ数を解放する必要があります。 この規則の 1 つの例外は、クライアントが常に ReleaseBuffer を呼び出して 0 フレームを解放できることです (ストリームが排他モードで、イベント ドリブン バッファリングを使用している場合を除く)。

この動作は、クライアントが以前に要求した長さ 0 のパケットを "解放" するための便利な手段を提供します。 この場合、 ReleaseBuffer の呼び出しは省略可能です。 長さ 0 のパケットを取得するために GetBuffer を呼び出した後、クライアントには、GetBuffer を再度呼び出す前に ReleaseBuffer を呼び出さないオプションがあります。

さらに、前の GetBuffer 呼び出しで 0 以外のサイズのパケットが取得された場合、NumFramesRequested を 0 に設定して ReleaseBuffer を呼び出すことは成功します (ストリームが排他モードで、イベントドリブン バッファリングを使用している場合を除く)。 呼び出しの意味は、クライアントがパケットを解放する前にデータを書き込まないということです。 したがって、 メソッドは、パケットによって表されるバッファーの部分を未使用として扱い、バッファーのこの部分を次の GetBuffer 呼び出しでクライアントが再度使用できるようにします。

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

ReleaseBuffer メソッドを呼び出すコード例については、次のトピックを参照してください。

要件

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

こちらもご覧ください

IAudioClient::Initialize

IAudioRenderClient インターフェイス

IAudioRenderClient::GetBuffer