Condividi tramite


Metodo IAudioClient3::InitializeSharedAudioStream (audioclient.h)

Inizializza un flusso condiviso con la periodicità specificata.

Sintassi

HRESULT InitializeSharedAudioStream(
  [in]           DWORD              StreamFlags,
  [in]           UINT32             PeriodInFrames,
  [in]           const WAVEFORMATEX *pFormat,
  [in, optional] LPCGUID            AudioSessionGuid
);

Parametri

[in] StreamFlags

Tipo: DWORD

Flag per controllare la creazione del flusso. Il client deve impostare questo parametro su 0 o sull'OR bit per bit di una o più costanti supportate AUDCLNT_STREAMFLAGS_XXX o costanti AUDCLNT_SESSIONFLAGS_XXX. Le costanti AUDCLNT_STREAMFLAGS_XXX supportate per questo parametro quando si usa questo metodo sono:

  • AUDCLNT_STREAMFLAGS_EVENTCALLBACK

[in] PeriodInFrames

Tipo: UINT32

Periodicità richiesta dal client. Questo valore deve essere un multiplo integrale del valore restituito nel parametro pFundamentalPeriodInFrames su IAudioClient3::GetSharedModeEnginePeriod. I periodInFrame devono essere anche maggiori o uguali al valore restituito in pMinPeriodInFrames e minore o uguale al valore restituito in pMaxPeriodInFrames.

[in] pFormat

Tipo: const WAVEFORMATEX*

Puntatore a un descrittore di formato. Questo parametro deve puntare a un descrittore di formato valido di tipo WAVEFORMATEX oWAVEFORMATEXTENSIBLE. Per altre informazioni, vedere la sezione Osservazioni per IAudioClient::Initialize.

[in, optional] AudioSessionGuid

Tipo: LPCGUID

Puntatore a un GUID di sessione. Questo parametro punta a un valore GUID che identifica la sessione audio a cui appartiene il flusso. Se il GUID identifica una sessione aperta in precedenza, il metodo aggiunge il flusso a tale sessione. Se il GUID non identifica una sessione esistente, il metodo apre una nuova sessione e aggiunge il flusso a tale sessione. Il flusso rimane un membro della stessa sessione per la sua durata. L'impostazione di questo parametro su NULL equivale a passare un puntatore a un valore GUID_NULL.

Valore restituito

Tipo: HRESULT

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_ALREADY_INITIALIZED
L'oggetto IAudioClient è già inizializzato.
AUDCLNT_E_WRONG_ENDPOINT_TYPE
Il flag AUDCLNT_STREAMFLAGS_LOOPBACK è impostato, ma il dispositivo endpoint è un dispositivo di acquisizione, non un dispositivo di rendering.
AUDCLNT_E_CPUUSAGE_EXCEEDED
Indica che la durata del passaggio del processo ha superato l'utilizzo massimo della CPU. Il motore audio tiene traccia dell'utilizzo della CPU mantenendo il numero di volte in cui la durata del passaggio del processo supera l'utilizzo massimo della CPU. L'utilizzo massimo della CPU viene calcolato come percentuale della periodicità del motore. Il valore percentuale è il valore della limitazione della CPU del sistema (entro l'intervallo del 10% e del 90%). Se questo valore non viene trovato, viene usato il valore predefinito del 40% per calcolare l'utilizzo massimo della CPU.
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_DEVICE_IN_USE
Il dispositivo endpoint è già in uso. Il dispositivo viene usato in modalità esclusiva oppure il dispositivo viene usato in modalità condivisa e il chiamante ha chiesto di usare il dispositivo in modalità esclusiva.
AUDCLNT_E_ENGINE_FORMAT_LOCKED
Il client specificato AUDCLNT_STREAMOPTIONS_MATCH_FORMAT quando si chiama IAudioClient2::SetClientProperties, ma il formato del motore audio è stato bloccato da un altro client. In questo caso, è possibile chiamare IAudioClient2::SetClientProperties senza specificare l'opzione di formato di corrispondenza e quindi usare il formato corrente del motore audio.
AUDCLNT_E_ENGINE_PERIODICITY_LOCKED
Il client specificato AUDCLNT_STREAMOPTIONS_MATCH_FORMAT quando si chiama IAudioClient2::SetClientProperties, ma la periodicità del motore audio è stata bloccata da un altro client. In questo caso, è possibile chiamare IAudioClient2::SetClientProperties senza specificare l'opzione di formato di corrispondenza e quindi usare la periodicità corrente del motore audio.
AUDCLNT_E_ENDPOINT_CREATE_FAILED
Il metodo non è riuscito a creare l'endpoint audio per il rendering o il dispositivo di acquisizione. Ciò può verificarsi se il dispositivo dell'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_INVALID_DEVICE_PERIOD
Indica che il periodo di dispositivo richiesto specificato con PeriodInFrames non è un multiplo integrale della periodicità fondamentale del motore audio, è più breve del periodo minimo del motore o è più lungo del periodo massimo del motore. Ottenere i valori di periodicità supportati del motore chiamando IAudioClient3::GetSharedModeEnginePeriod.
AUDCLNT_E_UNSUPPORTED_FORMAT
Il motore audio (modalità condivisa) o il dispositivo endpoint audio (modalità esclusiva) non supporta il formato specificato.
AUDCLNT_E_SERVICE_NOT_RUNNING
Il servizio audio Di Windows non è in esecuzione.
E_POINTER
Il parametro pFormat è NULL.
E_INVALIDARG
Il parametro pFormat punta a una descrizione del formato non valida; o il flag di AUDCLNT_STREAMFLAGS_LOOPBACK è impostato, ma ShareMode non è uguale a AUDCLNT_SHAREMODE_SHARED; o il flag di AUDCLNT_STREAMFLAGS_CROSSPROCESS è impostato, ma ShareMode è uguale a AUDCLNT_SHAREMODE_EXCLUSIVE.

Una chiamata precedente a SetClientProperties è stata effettuata con una categoria non valida per i flussi audio/rendering.

E_OUTOFMEMORY
Memoria insufficiente.

Commenti

A differenza di IAudioClient::Initialize, questo metodo non consente di specificare una dimensione del buffer. La dimensione del buffer viene calcolata in base alla periodicità richiesta con il parametro PeriodInFrames . È responsabilità dell'app client assicurarsi che gli esempi audio vengano trasferiti e fuori dal buffer in modo tempestivo.

I client audio devono verificare la presenza di valori consentiti per il parametro PeriodInFrames chiamando IAudioClient3::GetSharedModeEnginePeriod. Il valore di PeriodInFrames deve essere un multiplo integrale del valore restituito nel parametro pFundamentalPeriodInFrames . PeriodInFrames deve essere maggiore o uguale al valore restituito in pMinPeriodInFrames e minore o uguale al valore di pMaxPeriodInFrames.

Ad esempio, per un formato 44100 kHz, GetSharedModeEnginePeriod potrebbe restituire:

  • pDefaultPeriodInFrames = 448 frame (circa 10,16 millisecondi)

  • pFundamentalPeriodInFrames = 4 fotogrammi (circa 0,09 millisecondi)

  • pMinPeriodInFrames = 48 fotogrammi (circa 1,09 millisecondi)

  • pMaxPeriodInFrames = 448 frame (uguale al valore predefinito)

I valori consentiti per il parametro PeriodInFrames in InitializeSharedAudioStream includono 48 e 448. Includono anche cose come 96 e 128.

Non includerebbero 4 (che è minore del valore minimo consentito) o 98 (che non è un multiplo del fondamentale) o 1000 (maggiore del valore massimo consentito).

Requisiti

Requisito Valore
Client minimo supportato Windows 10 [solo app desktop]
Server minimo supportato Windows Server 2016 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione audioclient.h

Vedi anche

IAudioClient

IAudioClient2

IAudioClient3