KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION プロパティ要求は、WaveRT バッファーの現在の書き込み位置をバイト単位で指定します。 オフロード ドライバーは、この書き込み位置情報を使用して、WaveRT バッファー内の有効なデータの量を知ることができます。

用法の要点テーブル

Yammer の入手 設定 移行先 プロパティ記述子の種類 プロパティ値の種類

いいえ

はい

Pin インスタンス経由のノード

KSP_NODE

ULONG

戻り値

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION プロパティ要求は、正常に完了したことを示すために STATUS_SUCCESS を返します。 それ以外の場合、要求は適切なエラー状態コードを返します。

解説

このプロパティ要求で提供される情報を解釈する方法をより深く理解するには、サイズが n バイトの循環バッファーを想定します。 データが書き込まれる前の初期書き込み位置は 0 です。 データは、WAVEFORMATEX.nBlockAlign バイトの倍数であるチャンクでバッファーに書き込まれます。

たとえば、バッファーには、48000 Hz でサンプリングされた 16 ビット PCM ステレオ データの 20 ミリ秒が含まれている場合があります。 したがって、WAVEFORMATEX 構造体の nBlockAlign メンバーの説明に基づくと、この例では nBlockAlign = 2 * 16 / 8 = 4 バイトになります。 つまり、バッファーの長さは 48000 * 20 / 1000 = 960 フレーム、または 960 * 4 = 3840 バイトになります。

最初 の Set 要求では、バッファーに書き込まれたバイト数を指定します。 また、"書き込み位置" はバイト単位で表されるため、値 1920 ではバッファー サイズの半分が指定されますが、値 3840 は完全なバッファー サイズを示します。 後続の Set 要求を行う目的で、書き込まれた新しいバイトの数を決定するために、どのように計算が実行されるかを、次の擬似コードで示します。

if new write position > old write position:
     bytes written = new write position – old write position
if new write position < old write position, we’ve wrapped:
     bytes written = (new write position + buffer size) – old write position
if new write position = old write position, we’ve had a glitch
     log a "duplicate write position" glitch event

要件

バージョン

Windows 8

ヘッダー

Ksmedia.h

関連項目

WAVEFORMATEX