Partager via


Méthode IAudioClient3 ::InitializeSharedAudioStream (audioclient.h)

Initialise un flux partagé avec la périodicité spécifiée.

Syntaxe

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

Paramètres

[in] StreamFlags

Type : DWORD

Indicateurs pour contrôler la création du flux. Le client doit définir ce paramètre sur 0 ou sur la valeur OR au niveau du bit d’une ou de plusieurs constantes AUDCLNT_STREAMFLAGS_XXX prises en charge ou AUDCLNT_SESSIONFLAGS_XXX constantes. Les constantes AUDCLNT_STREAMFLAGS_XXX prises en charge pour ce paramètre lors de l’utilisation de cette méthode sont les suivantes :

  • AUDCLNT_STREAMFLAGS_EVENTCALLBACK

[in] PeriodInFrames

Type : UINT32

Périodicité demandée par le client. Cette valeur doit être un multiple intégral de la valeur retournée dans le paramètre pFundamentalPeriodInFrames à IAudioClient3 ::GetSharedModeEnginePeriod. PeriodInFrames doit également être supérieur ou égal à la valeur retournée dans pMinPeriodInFrames et inférieur ou égal à la valeur retournée dans pMaxPeriodInFrames.

[in] pFormat

Type : const WAVEFORMATEX*

Pointeur vers un descripteur de format. Ce paramètre doit pointer vers un descripteur de format valide de type WAVEFORMATEX ou WAVEFORMATEXTENSIBLE. Pour plus d’informations, consultez la section Remarques pour IAudioClient ::Initialize.

[in, optional] AudioSessionGuid

Type : LPCGUID

Pointeur vers un GUID de session. Ce paramètre pointe vers une valeur GUID qui identifie la session audio à laquelle appartient le flux. Si le GUID identifie une session qui a été ouverte précédemment, la méthode ajoute le flux à cette session. Si le GUID n’identifie pas une session existante, la méthode ouvre une nouvelle session et ajoute le flux à cette session. Le flux reste membre de la même session pendant toute sa durée de vie. Définir ce paramètre sur NULL revient à passer un pointeur vers une valeur GUID_NULL.

Valeur retournée

Type : HRESULT

Si la méthode réussit, retourne S_OK. En cas d’échec, les codes de retour possibles incluent, sans s’y limiter, les valeurs indiquées dans le tableau suivant.

Code de retour Description
AUDCLNT_E_ALREADY_INITIALIZED
L’objet IAudioClient est déjà initialisé.
AUDCLNT_E_WRONG_ENDPOINT_TYPE
L’indicateur AUDCLNT_STREAMFLAGS_LOOPBACK est défini, mais l’appareil de point de terminaison est un appareil de capture, pas un appareil de rendu.
AUDCLNT_E_CPUUSAGE_EXCEEDED
Indique que la durée de passage du processus a dépassé l’utilisation maximale du processeur. Le moteur audio effectue le suivi de l’utilisation du processeur en conservant le nombre de fois où la durée de la passe de processus dépasse l’utilisation maximale du processeur. L’utilisation maximale du processeur est calculée en pourcentage de la périodicité du moteur. La valeur de pourcentage est la valeur de limitation du processeur du système (dans la plage de 10 % et 90 %). Si cette valeur est introuvable, la valeur par défaut de 40 % est utilisée pour calculer l’utilisation maximale du processeur.
AUDCLNT_E_DEVICE_INVALIDATED
Le périphérique de point de terminaison audio a été débranché, ou le matériel audio ou les ressources matérielles associées ont été reconfigurés, désactivés, supprimés ou autrement indisponibles.
AUDCLNT_E_DEVICE_IN_USE
L’appareil de point de terminaison est déjà utilisé. Soit l’appareil est utilisé en mode exclusif, soit l’appareil est utilisé en mode partagé et l’appelant a demandé d’utiliser l’appareil en mode exclusif.
AUDCLNT_E_ENGINE_FORMAT_LOCKED
Le client a spécifié AUDCLNT_STREAMOPTIONS_MATCH_FORMAT lors de l’appel de IAudioClient2 ::SetClientProperties, mais le format du moteur audio a été verrouillé par un autre client. Dans ce cas, vous pouvez appeler IAudioClient2 ::SetClientProperties sans spécifier l’option de format de correspondance, puis utiliser le format actuel du moteur audio.
AUDCLNT_E_ENGINE_PERIODICITY_LOCKED
Le client a spécifié AUDCLNT_STREAMOPTIONS_MATCH_FORMAT lors de l’appel de IAudioClient2 ::SetClientProperties, mais la périodicité du moteur audio a été verrouillée par un autre client. Dans ce cas, vous pouvez appeler IAudioClient2 ::SetClientProperties sans spécifier l’option de format de correspondance, puis utiliser la périodicité actuelle du moteur audio.
AUDCLNT_E_ENDPOINT_CREATE_FAILED
La méthode n’a pas pu créer le point de terminaison audio pour le rendu ou le périphérique de capture. Cela peut se produire si l’appareil du point de terminaison audio a été débranché, ou si le matériel audio ou les ressources matérielles associées ont été reconfigurés, désactivés, supprimés ou rendus indisponibles.
AUDCLNT_E_INVALID_DEVICE_PERIOD
Indique que la période d’appareil demandée spécifiée avec PeriodInFrames n’est pas un multiple intégral de la périodicité fondamentale du moteur audio, est plus courte que la période minimale du moteur ou est plus longue que la période maximale du moteur. Obtenez les valeurs de périodicité prises en charge du moteur en appelant IAudioClient3 ::GetSharedModeEnginePeriod.
AUDCLNT_E_UNSUPPORTED_FORMAT
Le moteur audio (mode partagé) ou le périphérique de point de terminaison audio (mode exclusif) ne prend pas en charge le format spécifié.
AUDCLNT_E_SERVICE_NOT_RUNNING
Le service audio Windows n’est pas en cours d’exécution.
E_POINTER
Le paramètre pFormat a la valeur NULL.
E_INVALIDARG
Le paramètre pFormat pointe vers une description de format non valide ; ou l’indicateur AUDCLNT_STREAMFLAGS_LOOPBACK est défini, mais ShareMode n’est pas égal à AUDCLNT_SHAREMODE_SHARED ; ou l’indicateur AUDCLNT_STREAMFLAGS_CROSSPROCESS est défini, mais ShareMode est égal à AUDCLNT_SHAREMODE_EXCLUSIVE.

Un appel précédent à SetClientProperties a été effectué avec une catégorie non valide pour les flux audio/de rendu.

E_OUTOFMEMORY
Mémoire insuffisante.

Remarques

Contrairement à IAudioClient ::Initialize, cette méthode ne vous permet pas de spécifier une taille de mémoire tampon. La taille de la mémoire tampon est calculée en fonction de la périodicité demandée avec le paramètre PeriodInFrames . Il incombe à l’application cliente de s’assurer que les échantillons audio sont transférés dans et hors de la mémoire tampon en temps opportun.

Les clients audio doivent case activée pour les valeurs autorisées pour le paramètre PeriodInFrames en appelant IAudioClient3 ::GetSharedModeEnginePeriod. La valeur de PeriodInFrames doit être un multiple intégral de la valeur retournée dans le paramètre pFundamentalPeriodInFrames . PeriodInFrames doit également être supérieur ou égal à la valeur retournée dans pMinPeriodInFrames et inférieur ou égal à la valeur de pMaxPeriodInFrames.

Par exemple, pour un format 44100 kHz, GetSharedModeEnginePeriod peut retourner :

  • pDefaultPeriodInFrames = 448 images (environ 10,16 millisecondes)

  • pFundamentalPeriodInFrames = 4 images (environ 0,09 millisecondes)

  • pMinPeriodInFrames = 48 images (environ 1,09 millisecondes)

  • pMaxPeriodInFrames = 448 images (identique à la valeur par défaut)

Les valeurs autorisées pour le paramètre PeriodInFrames à InitializeSharedAudioStream incluent 48 et 448. Ils incluraient également des éléments tels que 96 et 128.

Ils n’incluraient PAS 4 (qui est plus petit que la valeur minimale autorisée) ou 98 (qui n’est pas un multiple de la valeur fondamentale) ou 1000 (qui est plus grand que la valeur maximale autorisée).

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10 (applications de bureau uniquement)
Serveur minimal pris en charge Windows Server 2016 (applications de bureau uniquement)
Plateforme cible Windows
En-tête audioclient.h

Voir aussi

IAudioClient

IAudioClient2

IAudioClient3