Partager via


RenderExclusiveEventDriven

Cet exemple d’application utilise les API Core Audio pour restituer des données audio sur un périphérique de sortie spécifié par l’utilisateur. Cet exemple illustre la mise en mémoire tampon pilotée par les événements pour un client de rendu en mode exclusif. Pour un flux en mode exclusif, le client partage la mémoire tampon du point de terminaison avec le périphérique audio.

Cette rubrique contient les sections suivantes.

Description

Cet exemple illustre les fonctionnalités suivantes.

  • API MMDevice pour l’énumération et la sélection d’appareils multimédias.
  • WASAPI pour les opérations de gestion de flux.

Spécifications

Produit Version
SDK Windows Windows 7
Visual Studio 2008

 

Téléchargement de l’exemple

Cet exemple est disponible aux emplacements suivants.

Emplacement Chemin/URL
Kit de développement logiciel (SDK) Windows \Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderExclusiveEventDriven\...

 

Génération de l'exemple

Pour générer l’exemple RenderExclusiveEventDriven, procédez comme suit :

  1. Ouvrez l’interpréteur de commandes CMD pour le Kit de développement logiciel (SDK) Windows et accédez au répertoire d’exemple RenderExclusiveEventDriven.
  2. Exécutez la commande start WASAPIRenderExclusiveEventDriven.sln dans le répertoire RenderExclusiveEventDriven pour ouvrir le projet WASAPIRenderExclusiveEventDriven dans la fenêtre Visual Studio.
  3. Dans la fenêtre, sélectionnez la configuration de la solution Déboguer ou Mettre en production , sélectionnez le menu Générer dans la barre de menus, puis sélectionnez l’option Générer . Si vous n’ouvrez pas Visual Studio à partir de l’interpréteur de commandes CMD pour le SDK, Visual Studio n’aura pas accès à l’environnement de génération du SDK. Dans ce cas, l’exemple ne sera pas généré, sauf si vous définissez explicitement la variable d’environnement MSSdk, qui est utilisée dans le fichier projet WASAPIRenderExclusiveEventDriven.vcproj.

Exécution de l'exemple

Si vous générez correctement l’application de démonstration, un fichier exécutable, WASAPIRenderExclusiveEventDriven.exe, est généré. Pour l’exécuter, tapez WASAPIRenderExclusiveEventDriven dans une fenêtre de commande suivie des arguments obligatoires ou facultatifs. L’exemple suivant montre comment exécuter l’exemple en spécifiant la durée de lecture sur l’appareil multimédia par défaut.

WASAPIRenderExclusiveEventDriven.exe -d 20 -multimedia

Le tableau suivant présente les arguments.

Argument Description
-? Affiche de l’aide.
-H Affiche de l’aide.
-f Fréquence d’onde sinusoïdale en Hz.
-l Latence de rendu audio en millisecondes.
-d Durée de l’onde sinus en secondes.
-M Désactive l’utilisation de MMCSS.
-Console Utilisez l’appareil de console par défaut.
-Communications Utilisez le périphérique de communication par défaut.
-Multimédia Utilisez l’appareil multimédia par défaut.
-Terminaison Utilisez l’identificateur de point de terminaison spécifié dans la valeur du commutateur.

 

Si l’application est exécutée sans arguments, elle énumère les appareils disponibles et invite l’utilisateur à sélectionner un appareil pour la session de rendu. Une fois que l’utilisateur a spécifié un appareil, l’application restitue une onde sinusoïdale à 440 Hz pendant 10 secondes. Ces valeurs peuvent être modifiées en spécifiant les valeurs de commutateur -f et -d.

L’exemple RenderExclusiveEventDriven illustre la mise en mémoire tampon pilotée par les événements. L’exemple montre comment :

  • Instanciez un client audio, configurez-le pour qu’il s’exécute en mode exclusif et activez la mise en mémoire tampon pilotée par les événements en définissant l’indicateur AUDCLNT_STREAMFLAGS_EVENTCALLBACK dans l’appel sur IAudioClient::Initialize.
  • Associez le client aux exemples prêts à être rendus en fournissant un handle d’événement au système en appelant la méthode IAudioClient::SetEventHandle .
  • Créez un thread de rendu pour traiter des exemples à partir du moteur audio.
  • Alignez correctement les mémoires tampons sur une limite de 128 octets avant de les envoyer à l’appareil. Pour ce faire, ajustez la périodicité du moteur.
  • Vérifiez le format de combinaison du point de terminaison de l’appareil pour déterminer si les exemples peuvent être rendus. Si l’appareil ne prend pas en charge le format de combinaison, les données sont converties en PCM.
  • Gérer le basculement de flux.

Une fois la session de rendu commencée et le flux démarré, le moteur audio signale le handle d’événement fourni pour avertir le client chaque fois qu’une mémoire tampon est prête pour le client à traiter. Les données audio peuvent également être traitées dans une boucle pilotée par un minuteur. Ce mode est illustré dans l’exemple RenderExclusiveTimerDriven .

Pour plus d’informations sur le rendu d’un flux, consultez Rendu d’un flux.

Exemples de SDK qui utilisent les API audio de base