Delen via


Audiosessies

Een audiosessie is een groep gerelateerde audiostreams die een WASAPI-client gezamenlijk kan beheren. Clients kunnen het volumeniveau en dempingsstatus van elke afzonderlijke sessie regelen. Het systeem past client-opgegeven volume toe en dempt instellingen uniform op alle streams in de sessie.

Wanneer een client een audiostream initialiseert, wordt de audiostream toegewezen aan een audiosessie. Zie IAudioClient::Initializevoor meer informatie.

Een audiosessie bevat renderingstreams of capturestreams, maar niet beide. Standaard zijn de volume- en dempinstellingen voor een renderingsessie permanent voor het opnieuw opstarten van het systeem. De volume- en dempinstellingen voor een capture-sessie zijn niet permanent. (Een sessie die streams bevat die in de loopbackmodus werken, wordt hetzelfde behandeld als een capture-sessie. Dat wil gezegd, de sessie-instellingen zijn niet permanent. Zie Loopback-opnamevoor meer informatie over loopbackmodus.)

Elke audiostream behoort tot precies één sessie. Een client wijst een audiostream toe aan een bepaalde sessie op het moment dat het streamobject wordt geïnitialiseerd. De stream behoudt het lidmaatschap van de sessie voor de levensduur van de stream. Nadat een streamobject is gemaakt, bestaat het object totdat een client de laatst getelde verwijzing naar het object vrijgeeft en vervolgens het object wordt verwijderd.

Hoewel een client de sessie waaraan een bestaande stream is toegewezen niet kan wijzigen, kan deze een vergelijkbaar effect bereiken door de stream te verwijderen (door alle verwijzingen naar de stream uit te brengen), een nieuwe stream te maken om de verwijderde stream te vervangen en de nieuwe stream toe te wijzen aan een andere sessie.

Elke renderingsessie vertegenwoordigt een subset van de streams die de globale mix vormen die wordt afgespeeld via een bepaald audio-eindpuntapparaat. De globale combinatie combineert alle sessies van alle toepassingen die het apparaat delen.

Vaak wijst een toepassing met verschillende streams alle streams toe aan dezelfde sessie. De toepassing kan echter, als optie, verschillende streams toewijzen aan verschillende sessies. Een stream die niet expliciet aan een sessie wordt toegewezen, behoort tot de standaardsessie.

Typische audiotoepassingen moeten voorkomen dat het volume wordt gewijzigd en instellingen voor sessies worden gedempt. In plaats daarvan beheren gebruikers deze instellingen via de gebruikersinterfaces van besturingsprogramma's. In Windows Vista geeft bijvoorbeeld het door het systeem geleverde programma, Sndvol.exe, een volumeregeling en dempingsbesturingselement weer voor elke actieve of onlangs actieve renderingsessie in het systeem. Via deze besturingselementen kunnen gebruikers het volume aanpassen en instellingen dempen voor alle sessies in het systeem.

Het Sndvol-programma geeft momenteel alleen volumebesturingselementen weer voor apparaten met audiorenderingseindpunten. Er worden geen volumebesturingselementen weergegeven voor audio-opnameapparaten.

Een sessie is actief als deze een of meer actieve streams bevat. Een actieve stream bevindt zich in de actieve status. Een inactieve stroom bevindt zich in de gestopte status. Een sessie wordt actief wanneer de eerste stream actief wordt. Een sessie wordt inactief wanneer de laatste actieve stream inactief wordt. Nadat een sessie gedurende een bepaalde periode inactief is geweest, wordt de status van de sessie gewijzigd van inactief naar verlopen.

Sndvol geeft volume- en dempingsbesturingselementen weer voor alle actieve en inactieve renderingsessies. Sndvol verwijdert het volume en dempt besturingselementen voor een sessie wanneer de status van de sessie verandert van inactief naar verlopen of wanneer de sessie wordt beëindigd. (Een sessie wordt beëindigd wanneer de laatste van de streams wordt verwijderd; dat wil zeggen, wanneer een client het uiteindelijke aantal verwijzingen publiceert op het laatste resterende streamobject in de sessie.) De enige uitzondering op deze regel is voor systeemmeldingsgeluiden. Sndvol geeft altijd het volume en dempingsbesturingselementen weer voor systeemmeldingsgeluiden, ongeacht de status van de sessie voor deze geluiden.

Normaal gesproken behoort een stream tot een sessie die alleen het proces omvat dat de toepassing bevat die de stream heeft gemaakt. Toepassingen hebben echter de mogelijkheid om kruisprocessessies te definiëren die stromen uit twee of meer processen combineren.

WASAPI ondersteunt voornamelijk sessies voor meerdere processen, zodat:

  • Het Sndvol-programma kan de gebruiker met één volumeregeling presenteren voor het beheren van systeemmeldingsgeluiden in alle toepassingen.
  • Een mediaspeler die in één proces wordt uitgevoerd, kan beveiligde inhoud streamen naar een ontsleutelingsprogramma dat in een ander proces wordt uitgevoerd.

Net als bij de besturingsinstellingen voor processpecifieke renderingsessies zijn de besturingsinstellingen voor renderingsessies tussen processen standaard permanent voor het opnieuw opstarten van het systeem. WASAPI biedt dit gedrag voornamelijk ten behoeve van systeemmeldingsgeluiden, die de volume- en dempinstellingen van de gebruiker moeten behouden, omdat de toepassingsmix na verloop van tijd varieert.

Het Sndvol-programma labelt de volumeregeling voor elke sessie met een weergavenaam en een pictogram. Een client heeft de mogelijkheid om expliciet een weergavenaam en pictogram toe te wijzen aan een sessie. Als de client deze items niet opgeeft, geeft Sndvol in plaats daarvan een standaardnaam en standaardpictogram weer. De standaardnaam bevat informatie zoals de titel van het toepassingsvenster. Het standaardpictogram is het pictogram voor het toepassingsvenster. Alleen in het geval van processpecifieke sessies bieden deze standaardinstellingen zinvolle informatie aan gebruikers. Houd er rekening mee dat een sessie voor meerdere processen kan worden gekoppeld aan meer dan één toepassing. In dit geval zijn alleen een door de client geleverde weergavenaam en -pictogram zinvol.

Hoewel de volume- en dempinstellingen voor een renderingsessie standaard permanent zijn voor het opnieuw opstarten van het systeem, zijn de door de client geleverde weergavenaam en het pictogram niet. Om ervoor te zorgen dat Sndvol de door de client geleverde naam en pictogram weergeeft, moet de client expliciet de naam en het pictogram toewijzen aan de sessie op het moment dat de client de eerste stream aan de sessie toewijst. Het systeem behoudt de weergavenaam en het pictogram voor een sessie alleen totdat de sessie wordt beëindigd.

Elke sessie wordt geïdentificeerd door een sessie-GUID. Op het moment dat een client een stream opent, wijst de client die stream toe aan een bepaalde sessie. De client levert de volgende twee stukjes informatie om die sessie te identificeren:

  • Een sessie-GUID.
  • Of de sessie nu een proces- of processpecifieke sessie is: een processpecifieke sessie bevat alleen streams van het clientproces.

Deze informatie is voldoende om een bepaalde sessie te onderscheiden van alle andere sessies op dezelfde computer. De sessie-GUID voor een processpecifieke sessie identificeert de sessie alleen binnen het bereik van het proces dat eigenaar is van de sessie. De sessie-GUID voor een sessie tussen processen is daarentegen uniek binnen het bereik van alle processen die op de computer worden uitgevoerd.

In het geval van een processpecifieke sessie gebruikt het systeem een combinatie van sessie-GUID en proces-id om de sessie uniek te identificeren binnen het bereik van de computer. Dus als clients in twee verschillende processen hun respectieve streams toewijzen aan twee processpecifieke sessies met identieke sessie-GUID's, behandelt het systeem de sessies als afzonderlijk omdat hun proces-id's verschillen. Als een sessie voor meerdere processen dezelfde sessie-GUID gebruikt als een of meer processpecifieke sessies, behandelt het systeem de sessie voor meerdere processen als verschillend van de processpecifieke sessies, ook al delen ze dezelfde sessie-GUID.

In Windows Vista wijzen bijvoorbeeld API's op een hoger niveau, zoals de Windows-multimedia-waveOutXxx--functies en DirectSound doorgaans de audiostreams toe die ze maken op standaard, processpecifieke sessies die worden geïdentificeerd door de sessie-GUID-waarde GUID_NULL. Voor clients van deze API's is de standaardsessie voor elk clientproces gescheiden van de standaardsessies voor andere clientprocessen, ook al hebben de sessies identieke sessie-GUID's. Bovendien, als een of meer toepassingen streams toewijzen aan de sessie voor meerdere processen die wordt geïdentificeerd door de sessie-GUID-waarde GUID_NULL, behandelt het systeem deze cross-process sessie als gescheiden van de standaard, processpecifieke sessies die dezelfde sessie-GUID delen. Daarom geeft het Sndvol-programma een afzonderlijk volumebesturingselement weer voor de standaard- en processpecifieke sessie van elke client en wordt er een extra volumeregeling weergegeven voor de sessie voor meerdere processen die wordt geïdentificeerd door de sessie-GUID-waarde GUID_NULL, als die sessie bestaat.

Elke sessie is gekoppeld aan slechts één audio-eindpuntapparaat. Als twee sessies identieke sessie-GUID's en proces-id's hebben, maar aan verschillende apparaten zijn gekoppeld, behandelt het systeem de twee sessies als afzonderlijk. Een sessie kan nooit zowel opname- als renderingstreams bevatten, omdat een opnamestroom alleen kan worden gekoppeld aan een opnameapparaat en een renderingstream alleen kan worden gekoppeld aan een renderingapparaat.

Zoals eerder vermeld, zijn de volume- en dempinstellingen voor een sessie permanent voor het opnieuw opstarten van het systeem. Twee of meer exemplaren van een toepassing kunnen processpecifieke sessies met identieke sessie-GUID's maken. Via het Sndvol-programma kan de gebruiker verschillende volume- en dempinstellingen voor elk van deze sessies selecteren. Nadat deze sessies zijn beëindigd, behoudt het systeem de controle-instellingen van slechts één van deze sessies: de laatste sessie die moet worden beëindigd. Als een nieuw exemplaar van de toepassing later een processpecifieke sessie met dezelfde sessie-GUID als voorheen maakt, neemt die sessie de eerder opgeslagen volume- en dempinstellingen over.

Een toepassing mag niet proberen een stream toe te voegen aan of het volumeniveau te beheren van een sessie die eigendom is van een andere, niet-gerelateerde toepassing. Bovendien mag een toepassing niet proberen om het volumeniveau van de door het systeem beheerde sessie voor meldingsgeluiden te regelen. Een toepassing kan echter een geluid afspelen via de systeemsessie voor meldingsgeluiden door de functie PlaySound aan te roepen. Zie Notification Sounds for Legacy Audio Applicationsvoor meer informatie.

Een toepassing kan zich registreren om meldingen te ontvangen wanneer de status van een sessie wordt gewijzigd. Zie audiosessie-gebeurtenissenvoor meer informatie.

In zeldzame gevallen moet een toepassing die een processpecifieke sessie maakt mogelijk het beheer van de processpecifieke sessies voor twee of meer toepassingsexemplaren consolideren onder één volumeregeling in Sndvol. Zie Groepeerparametersvoor meer informatie.

programmeerhandleiding voor