Delen via


RenderSharedEventDriven

In deze voorbeeldtoepassing worden de Core Audio-API's gebruikt om audiogegevens weer te geven op een uitvoerapparaat dat is opgegeven door de gebruiker. In dit voorbeeld ziet u gebeurtenisgestuurde buffering voor een renderingclient in de gedeelde modus. Voor een stream in de gedeelde modus deelt de client de eindpuntbuffer met de audio-engine.

Dit onderwerp bevat de volgende secties.

Beschrijving

In dit voorbeeld ziet u de volgende functies.

  • MMDevice-API- voor opsomming en selectie van multimediaapparaten.
  • WASAPI voor stroombeheerbewerkingen.

Eisen

Product Versie
Windows SDK- Windows 7
Visual Studio 2008

 

Het voorbeeld downloaden

Dit voorbeeld is beschikbaar op de volgende locaties.

Plaats Pad/URL
Windows SDK \Program Files\Microsoft SDK's\Windows\v7.0\Samples\Multimedia\Audio\RenderSharedEventDriven\...

 

Het voorbeeld bouwen

Voer de volgende stappen uit om het renderSharedEventDriven-voorbeeld te bouwen:

  1. Open de CMD-shell voor de Windows SDK en ga naar de map RenderSharedEventDriven-voorbeeld.
  2. Voer de opdracht start WASAPIRenderSharedEventDriven.sln uit in de map RenderSharedEventDriven om het PROJECT WASAPIRenderSharedEventDriven te openen in het Visual Studio-venster.
  3. Selecteer in het venster de Debug of Release solution configuration, selecteer het Build menu in de menubalk en selecteer de optie Build. Als u Visual Studio niet opent vanuit de CMD-shell voor de SDK, heeft Visual Studio geen toegang tot de SDK-buildomgeving. In dat geval wordt het voorbeeld niet gebouwd, tenzij u expliciet omgevingsvariabele MSSdk instelt, die wordt gebruikt in het projectbestand WASAPIRenderSharedEventDriven.vcproj.

Het voorbeeld uitvoeren

Als u de demotoepassing bouwt, wordt een uitvoerbaar bestand, WASAPIRenderSharedEventDriven.exe, gegenereerd. Als u het wilt uitvoeren, typt u WASAPIRenderSharedEventDriven in een opdrachtvenster, gevolgd door vereiste of optionele argumenten. In het volgende voorbeeld ziet u hoe u het voorbeeld uitvoert door de afspeelduur op te geven op het standaard multimediaapparaat.

WASAPIRenderSharedEventDriven.exe -d 20 -multimedia

In de volgende tabel ziet u de argumenten.

Argument Beschrijving
-? Toont help.
-h Toont help.
-f Sinusgolffrequentie in Hz.
-l Audio-renderlatentie in milliseconden.
-d Sinusgolfduur in seconden.
-m Hiermee schakelt u het gebruik van MMCSS uit.
-troosten Gebruik het standaardconsoleapparaat.
-communicatie Gebruik het standaardcommunicatieapparaat.
-multimedia Gebruik het standaard multimediaapparaat.
-Eindpunt Gebruik de eindpunt-id die is opgegeven in de schakelwaarde.

 

Als de toepassing zonder argumenten wordt uitgevoerd, worden de beschikbare apparaten opgesomd en wordt de gebruiker gevraagd een apparaat voor de renderingsessie te selecteren. Nadat de gebruiker een apparaat heeft opgegeven, geeft de toepassing gedurende 10 seconden een sinusgolf van 440 Hz weer. Deze waarden kunnen worden gewijzigd door -f en -d switchwaarden op te geven.

RenderSharedEventDriven demonstreert gebeurtenisgestuurde buffering. In het voorbeeld ziet u hoe u het volgende kunt doen:

  • Instantieer een audioclient, configureer deze zo dat deze wordt uitgevoerd in de exclusieve modus en schakel gebeurtenisgestuurde buffering in door de vlag AUDCLNT_STREAMFLAGS_EVENTCALLBACK in de aanroep in te stellen op IAudioClient::Initialiseer.
  • Koppel de client aan de voorbeelden die klaar zijn om te worden weergegeven door een gebeurtenisgreep aan het systeem te leveren door de methode IAudioClient::SetEventHandle aan te roepen.
  • Maak een renderthread om voorbeelden van de audio-engine te verwerken.
  • Controleer de mixindeling van het apparaateindpunt om te bepalen of de voorbeelden kunnen worden weergegeven. Als het apparaat de mixindeling niet ondersteunt, worden de gegevens geconverteerd naar PCM.
  • Stroomwisseling verwerken.

Nadat de renderingsessie is gestart en de stream wordt gestart, geeft de audio-engine de opgegeven gebeurtenis-handle aan om de client telkens op de hoogte te stellen wanneer een buffer gereed is voor het verwerken van de client. De audiogegevens kunnen ook worden verwerkt in een timergestuurde lus. Deze modus wordt gedemonstreerd in het voorbeeld RenderSharedTimerDriven.

Zie Een Stream-weergeven voor meer informatie over het weergeven van een stream.

SDK-voorbeelden die gebruikmaken van de Core Audio-API's