Condividi tramite


Metodo IAudioClient::GetCurrentPadding (audioclient.h)

Il metodo GetCurrentPadding recupera il numero di fotogrammi di spaziatura interna nel buffer dell'endpoint.

Sintassi

HRESULT GetCurrentPadding(
  [out] UINT32 *pNumPaddingFrames
);

Parametri

[out] pNumPaddingFrames

Puntatore a una variabile UINT32 in cui il metodo scrive il conteggio dei fotogrammi (numero di fotogrammi audio di spaziatura interna nel buffer).

Valore restituito

Se il metodo ha esito positivo, viene restituito S_OK. Se ha esito negativo, i possibili codici restituiti includono, ma non sono limitati, i valori illustrati nella tabella seguente.

Codice restituito Descrizione
AUDCLNT_E_NOT_INITIALIZED
Il flusso audio non è stato inizializzato correttamente.
AUDCLNT_E_DEVICE_INVALIDATED
Il dispositivo endpoint audio è stato scollegato oppure l'hardware audio o le risorse hardware associate sono state riconfigurate, disabilitate, rimosse o altrimenti non disponibili per l'uso.
AUDCLNT_E_SERVICE_NOT_RUNNING
Il servizio audio di Windows non è in esecuzione.
E_POINTER
Il parametro pNumPaddingFrames è NULL.

Commenti

Questo metodo richiede l'inizializzazione precedente dell'interfaccia IAudioClient . Tutte le chiamate a questo metodo avranno esito negativo con l'errore AUDCLNT_E_NOT_INITIALIZED finché il client non inizializza il flusso audio chiamando correttamente il metodo IAudioClient::Initialize .

Questo metodo recupera un valore di riempimento che indica la quantità di dati validi non letti attualmente contenuti nel buffer dell'endpoint. Un'applicazione di rendering può usare il valore di spaziatura interna per determinare la quantità di nuovi dati che può scrivere in modo sicuro nel buffer dell'endpoint senza sovrascrivere i dati scritti in precedenza che il motore audio non ha ancora letto dal buffer. Un'applicazione di acquisizione può usare il valore di riempimento per determinare la quantità di nuovi dati che può leggere in modo sicuro dal buffer dell'endpoint senza leggere dati non validi da un'area del buffer in cui il motore audio non ha ancora scritto dati validi.

Il valore di spaziatura interna viene espresso come numero di fotogrammi audio. Le dimensioni di un frame audio vengono specificate dal membro nBlockAlign della struttura WAVEFORMATEX (o WAVEFORMATEXTENSIBLE) passata dal client al metodo IAudioClient::Initialize . Le dimensioni in byte di un frame audio sono uguali al numero di canali nel flusso moltiplicato per le dimensioni del campione per canale. Ad esempio, le dimensioni del frame sono quattro byte per un flusso stereo (a 2 canali) con campioni a 16 bit.

Per un flusso di rendering in modalità condivisa, il valore di riempimento riportato da GetCurrentPadding specifica il numero di fotogrammi audio in coda per la riproduzione nel buffer dell'endpoint. Prima di scrivere nel buffer dell'endpoint, il client può calcolare la quantità di spazio disponibile nel buffer sottraendo il valore di riempimento dalla lunghezza del buffer. Per garantire che una chiamata successiva al metodo IAudioRenderClient::GetBuffer abbia esito positivo, il client deve richiedere una lunghezza del pacchetto che non superi lo spazio disponibile nel buffer. Per ottenere la lunghezza del buffer, chiamare il metodo IAudioClient::GetBufferSize .

Per un flusso di acquisizione in modalità condivisa, il valore di riempimento riportato da GetCurrentPadding specifica il numero di fotogrammi di dati di acquisizione disponibili nel pacchetto successivo nel buffer dell'endpoint. In un determinato momento, zero, uno o più pacchetti di dati di acquisizione potrebbero essere pronti per la lettura del client dal buffer. Se non sono attualmente disponibili pacchetti, il metodo segnala un valore di riempimento pari a 0. Dopo la chiamata GetCurrentPadding , una chiamata al metodo IAudioCaptureClient::GetBuffer recupererà un pacchetto la cui lunghezza è esattamente uguale al valore di riempimento segnalato da GetCurrentPadding. Ogni chiamata a GetBuffer recupera un intero pacchetto. Un pacchetto contiene sempre un numero integrale di fotogrammi audio.

Per un flusso di acquisizione in modalità condivisa, la chiamata a GetCurrentPadding equivale a chiamare il metodo IAudioCaptureClient::GetNextPacketSize . Ovvero, il valore di riempimento segnalato da GetCurrentPadding è uguale alla lunghezza del pacchetto segnalata da GetNextPacketSize.

Per un flusso di acquisizione o rendering in modalità esclusiva inizializzato con il flag AUDCLNT_STREAMFLAGS_EVENTCALLBACK, il client in genere non usa per il valore di riempimento segnalato da GetCurrentPadding. Al contrario, il client accede a un intero buffer durante ogni passaggio di elaborazione. Ogni volta che un buffer diventa disponibile per l'elaborazione, il motore audio invia una notifica al client segnalando l'handle dell'evento del client. Per altre informazioni su questo flag, vedere IAudioClient::Initialize.

Per un flusso di acquisizione o rendering in modalità esclusiva non inizializzato con il flag AUDCLNT_STREAMFLAGS_EVENTCALLBACK, il client può usare il valore di riempimento ottenuto da GetCurrentPadding in modo simile a quello descritto in precedenza per un flusso in modalità condivisa. I dettagli sono i seguenti.

Innanzitutto, per un flusso di rendering in modalità esclusiva, il valore di riempimento specifica il numero di fotogrammi audio in coda per la riproduzione nel buffer dell'endpoint. Come in precedenza, il client può calcolare la quantità di spazio disponibile nel buffer sottraendo il valore di spaziatura interna dalla lunghezza del buffer.

In secondo luogo, per un flusso di acquisizione in modalità esclusiva, il valore di riempimento segnalato da GetCurrentPadding specifica la lunghezza corrente del pacchetto successivo. Tuttavia, questo valore di riempimento è uno snapshot della lunghezza del pacchetto, che potrebbe aumentare prima che il client chiami il metodo IAudioCaptureClient::GetBuffer . Pertanto, la lunghezza del pacchetto recuperato da GetBuffer è pari almeno alla dimensione, ma potrebbe essere maggiore del valore di riempimento segnalato dalla chiamata GetCurrentPadding che precedeva la chiamata GetBuffer . Al contrario, per un flusso di acquisizione in modalità condivisa, la lunghezza del pacchetto ottenuto da GetBuffer è sempre uguale al valore di riempimento riportato dalla chiamata GetCurrentPadding precedente.

Per un esempio di codice che chiama il metodo GetCurrentPadding, vedere Rendering di un Stream.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione audioclient.h

Vedi anche

IAudioCaptureClient::GetBuffer

IAudioCaptureClient::GetNextPacketSize

Interfaccia IAudioClient

IAudioClient::Initialize

IAudioRenderClient::GetBuffer