Share via


Metodo IAudioClient::GetDevicePeriod (audioclient.h)

Il metodo GetDevicePeriod recupera la lunghezza dell'intervallo periodico separando l'elaborazione successiva passando dal motore audio sui dati nel buffer dell'endpoint.

Sintassi

HRESULT GetDevicePeriod(
  [out] REFERENCE_TIME *phnsDefaultDevicePeriod,
  [out] REFERENCE_TIME *phnsMinimumDevicePeriod
);

Parametri

[out] phnsDefaultDevicePeriod

Puntatore a una variabile REFERENCE_TIME in cui il metodo scrive un valore di tempo specificando l'intervallo predefinito tra l'elaborazione periodica passa dal motore audio. Il tempo viene espresso in unità da 100 nanosecondi. Per informazioni sulle REFERENCE_TIME, vedere la documentazione di Windows SDK.

[out] phnsMinimumDevicePeriod

Puntatore a una variabile REFERENCE_TIME in cui il metodo scrive un valore di tempo specificando l'intervallo minimo tra l'elaborazione periodica passa dal dispositivo dell'endpoint audio. Il tempo viene espresso in unità da 100 nanosecondi.

Valore restituito

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

Codice restituito Descrizione
AUDCLNT_E_DEVICE_INVALIDATED
Il dispositivo endpoint audio è stato scollegato o 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
I parametri phnsDefaultDevicePeriod e phnsMinimumDevicePeriod sono entrambi NULL.

Commenti

Il client può chiamare questo metodo prima di chiamare il metodo IAudioClient::Initialize .

Il parametro phnsDefaultDevicePeriod specifica il periodo di pianificazione predefinito per un flusso in modalità condivisa. Il parametro phnsMinimumDevicePeriod specifica il periodo minimo di pianificazione per un flusso in modalità esclusiva.

Almeno uno dei due parametri, phnsDefaultDevicePeriod e phnsMinimumDevicePeriod, deve essere non NULL o il metodo restituisce immediatamente con codice di errore E_POINTER. Se entrambi i parametri non sono NULL, il metodo restituisce sia i periodi predefiniti che minimi.

Per un flusso in modalità condivisa, il motore audio elabora periodicamente i dati nel buffer dell'endpoint, che il motore condivide con l'applicazione client. Il motore pianifica se stesso per eseguire queste operazioni di elaborazione a intervalli regolari.

Il periodo tra l'elaborazione passa dal motore audio è fisso per un determinato dispositivo endpoint audio e rappresenta il più piccolo quantistico di elaborazione per il motore audio. Questo periodo più la latenza di flusso tra il buffer e il dispositivo endpoint rappresenta la latenza minima possibile che un'applicazione audio possa ottenere.

Il client ha la possibilità di pianificare il thread di elaborazione periodico da eseguire contemporaneamente all'intervallo di tempo del motore audio. In questo modo, il client può ottenere la latenza più piccola possibile per un flusso in modalità condivisa. Tuttavia, in un'applicazione per la quale la latenza è meno importante, il client può ridurre il sovraccarico del commutatore di processo sulla CPU pianificando i passaggi di elaborazione per verificarsi meno frequentemente. In questo caso, il buffer dell'endpoint deve essere proporzionalmente maggiore per compensare il periodo più lungo tra i passaggi di elaborazione.

Il client determina le dimensioni del buffer durante la chiamata al metodo IAudioClient::Initialize . Per un flusso in modalità condivisa, se il client passa questo metodo un valore di parametro hnsBufferDuration pari a 0, il metodo presuppone che i periodi per il client e il motore audio siano uguali e il metodo alloca un buffer abbastanza piccolo per ottenere la latenza minima possibile. Infatti, qualsiasi valore hnsBufferDuration compreso tra 0 e la somma del periodo e della latenza del dispositivo del motore audio avrà lo stesso risultato. Analogamente, per un flusso in modalità esclusiva, se il client imposta hnsBufferDuration su 0, il metodo presuppone che il periodo del client sia impostato sul periodo minimo del dispositivo dell'endpoint audio e il metodo alloca un buffer abbastanza piccolo per ottenere la latenza minima possibile.

Se il client sceglie di eseguire il thread di elaborazione periodico meno spesso, a costo di una maggiore latenza, può farlo finché crea un buffer di endpoint durante la chiamata IAudioClient::Initialize sufficientemente grande.

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

Interfaccia IAudioClient

IAudioClient::Initialize