IAudioClient::GetCurrentPadding-Methode (audioclient.h)

Die GetCurrentPadding-Methode ruft die Anzahl der Frames des Abstands im Endpunktpuffer ab.

Syntax

HRESULT GetCurrentPadding(
  [out] UINT32 *pNumPaddingFrames
);

Parameter

[out] pNumPaddingFrames

Zeiger auf eine UINT32-Variable , in die die -Methode die Frameanzahl schreibt (die Anzahl der Audioframes des Abstands im Puffer).

Rückgabewert

Wenn die Methode erfolgreich ist, wird S_OK zurückgegeben. Wenn ein Fehler auftritt, umfassen mögliche Rückgabecodes die in der folgenden Tabelle gezeigten Werte, sind jedoch nicht darauf beschränkt.

Rückgabecode Beschreibung
AUDCLNT_E_NOT_INITIALIZED
Der Audiodatenstrom wurde nicht erfolgreich initialisiert.
AUDCLNT_E_DEVICE_INVALIDATED
Das Audioendpunktgerät wurde nicht angeschlossen, oder die Audiohardware oder die zugehörigen Hardwareressourcen wurden neu konfiguriert, deaktiviert, entfernt oder anderweitig nicht mehr verfügbar gemacht.
AUDCLNT_E_SERVICE_NOT_RUNNING
Der Windows-Audiodienst wird nicht ausgeführt.
E_POINTER
Der Parameter pNumPaddingFrames ist NULL.

Hinweise

Diese Methode erfordert eine vorherige Initialisierung der IAudioClient-Schnittstelle . Alle Aufrufe dieser Methode schlagen mit dem Fehler AUDCLNT_E_NOT_INITIALIZED fehl, bis der Client den Audiodatenstrom durch erfolgreichen Aufruf der IAudioClient::Initialize-Methode initialisiert .

Diese Methode ruft einen Auffüllungswert ab, der die Menge gültiger, ungelesener Daten angibt, die der Endpunktpuffer derzeit enthält. Eine Renderinganwendung kann den Abstandswert verwenden, um zu bestimmen, wie viele neue Daten sie sicher in den Endpunktpuffer schreiben kann, ohne zuvor geschriebene Daten zu überschreiben, die die Audio-Engine noch nicht aus dem Puffer gelesen hat. Eine Erfassungsanwendung kann den Abstandswert verwenden, um zu bestimmen, wie viele neue Daten sie sicher aus dem Endpunktpuffer lesen kann, ohne ungültige Daten aus einem Bereich des Puffers zu lesen, in den die Audio-Engine noch keine gültigen Daten geschrieben hat.

Der Abstandswert wird als anzahl von Audioframes ausgedrückt. Die Größe eines Audioframes wird durch den nBlockAlign-Member der WAVEFORMATEX-Struktur (oder WAVEFORMATEXTENSIBLE) angegeben, die der Client an die IAudioClient::Initialize-Methode übergeben hat. Die Größe eines Audioframes in Byte entspricht der Anzahl der Kanäle im Stream multipliziert mit der Beispielgröße pro Kanal. Beispielsweise beträgt die Framegröße vier Bytes für einen Stereodatenstrom (2-Kanal) mit 16-Bit-Beispielen.

Für einen Renderingstream im gemeinsamen Modus gibt der von GetCurrentPadding gemeldete Abstandswert die Anzahl der Audioframes an, die für die Wiedergabe im Endpunktpuffer in die Warteschlange eingereiht werden. Vor dem Schreiben in den Endpunktpuffer kann der Client den verfügbaren Speicherplatz im Puffer berechnen, indem er den Abstandswert von der Pufferlänge subtrahiert. Um sicherzustellen, dass ein nachfolgender Aufruf der IAudioRenderClient::GetBuffer-Methode erfolgreich ist, sollte der Client eine Paketlänge anfordern, die den verfügbaren Speicherplatz im Puffer nicht überschreitet. Rufen Sie zum Abrufen der Pufferlänge die IAudioClient::GetBufferSize-Methode auf .

Für einen Aufzeichnungsdatenstrom im freigegebenen Modus gibt der von GetCurrentPadding gemeldete Abstandswert die Anzahl der Frames von Erfassungsdaten an, die im nächsten Paket im Endpunktpuffer verfügbar sind. Zu einem bestimmten Zeitpunkt können 0, ein oder mehrere Pakete mit Erfassungsdaten für den Client bereit sein, um aus dem Puffer zu lesen. Wenn derzeit keine Pakete verfügbar sind, meldet die Methode den Abstandswert 0. Nach dem GetCurrentPadding-Aufruf ruft ein IAudioCaptureClient::GetBuffer-Methodenaufruf ein Paket ab, dessen Länge genau dem von GetCurrentPadding gemeldeten Abstandswert entspricht. Jeder Aufruf von GetBuffer ruft ein ganzes Paket ab. Ein Paket enthält immer eine integrale Anzahl von Audioframes.

Für einen Aufzeichnungsdatenstrom im gemeinsamen Modus entspricht das Aufrufen von GetCurrentPadding dem Aufrufen der IAudioCaptureClient::GetNextPacketSize-Methode . Das heißt, der von GetCurrentPadding gemeldete Auffüllungswert entspricht der Paketlänge, die von GetNextPacketSize gemeldet wird.

Für einen Rendering- oder Aufnahmedatenstrom im exklusiven Modus, der mit dem flag AUDCLNT_STREAMFLAGS_EVENTCALLBACK initialisiert wurde, hat der Client in der Regel keine Verwendung für den von GetCurrentPadding gemeldeten Abstandswert. Stattdessen greift der Client während jedes Verarbeitungsdurchlaufs auf einen gesamten Puffer zu. Jedes Mal, wenn ein Puffer für die Verarbeitung verfügbar wird, benachrichtigt die Audio-Engine den Client, indem sie das Ereignishandle des Clients signalisiert. Weitere Informationen zu diesem Flag finden Sie unter IAudioClient::Initialize.

Für einen Rendering- oder Aufnahmedatenstrom im exklusiven Modus, der nicht mit dem flag AUDCLNT_STREAMFLAGS_EVENTCALLBACK initialisiert wurde, kann der Client den aus GetCurrentPadding abgerufenen Abstandswert in einer Weise verwenden, die der zuvor für einen Stream im freigegebenen Modus beschriebenen ähnelt. Die Details sind wie folgt.

Erstens gibt der Abstandswert für einen Renderingdatenstrom im exklusiven Modus die Anzahl der Audioframes an, die für die Wiedergabe im Endpunktpuffer in die Warteschlange eingereiht werden. Wie zuvor kann der Client den verfügbaren Speicherplatz im Puffer berechnen, indem er den Abstandswert von der Pufferlänge subtrahiert.

Zweitens gibt der von GetCurrentPadding gemeldete Abstandswert für einen Erfassungsdatenstrom im exklusiven Modus die aktuelle Länge des nächsten Pakets an. Dieser Abstandswert ist jedoch eine Momentaufnahme der Paketlänge, die sich erhöhen kann, bevor der Client die IAudioCaptureClient::GetBuffer-Methode aufruft. Daher ist die Länge des von GetBuffer abgerufenen Pakets mindestens so groß wie der Abstandswert, der vom GetCurrentPadding-Aufruf vor dem GetBuffer-Aufruf gemeldet wurde. Im Gegensatz dazu entspricht die Länge des von GetBuffer abgerufenen Pakets bei einem Aufzeichnungsdatenstrom im gemeinsamen Modus immer dem Abstandswert, der vom vorherigen GetCurrentPadding-Aufruf gemeldet wurde.

Ein Codebeispiel, das die GetCurrentPadding-Methode aufruft, finden Sie unter Rendern eines Stream.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile audioclient.h

Weitere Informationen

IAudioCaptureClient::GetBuffer

IAudioCaptureClient::GetNextPacketSize

IAudioClient-Schnittstelle

IAudioClient::Initialize

IAudioRenderClient::GetBuffer