Condividi tramite


Sessioni audio

Una sessione audio è un gruppo di flussi audio correlati che un client WASAPI può gestire collettivamente. I client possono controllare il livello del volume e lo stato di disattivazione di ogni singola sessione. Il sistema applica in modo uniforme le impostazioni del volume e dell'audio specificate dal client a tutti i flussi della sessione.

Quando un client inizializza un flusso audio, assegna il flusso audio a una sessione audio. Per altre informazioni, vedere IAudioClient::Initialize.

Una sessione audio contiene flussi di rendering o flussi di acquisizione, ma non entrambi. Per impostazione predefinita, le impostazioni del volume e dell'audio per una sessione di rendering sono persistenti tra i riavvii di sistema. Le impostazioni del volume e dell'audio per una sessione di acquisizione non sono persistenti. Una sessione che contiene flussi che operano in modalità loopback viene considerata come una sessione di acquisizione. Ovvero, le impostazioni della sessione non sono persistenti. Per altre informazioni sulla modalità loopback, vedere Registrazione loopback.

Ogni flusso audio appartiene esattamente a una sessione. Un client assegna un flusso audio a una determinata sessione al momento dell'inizializzazione dell'oggetto flusso. Il flusso mantiene l'appartenenza alla sessione per la durata del flusso. Dopo aver creato un oggetto flusso, l'oggetto esiste fino a quando un client non rilascia l'ultimo riferimento con conteggio all'oggetto e quindi l'oggetto viene eliminato.

Anche se un client non può modificare la sessione a cui è assegnato un flusso esistente, può ottenere un effetto simile eliminando il flusso (rilasciando tutti i riferimenti a esso), creando un nuovo flusso per sostituire il flusso eliminato e assegnando il nuovo flusso a un'altra sessione.

Ogni sessione di rendering rappresenta un subset dei flussi che formano la combinazione globale riprodotta tramite un particolare dispositivo endpoint audio. La combinazione globale combina tutte le sessioni di tutte le applicazioni che condividono il dispositivo.

Spesso un'applicazione con diversi flussi assegna tutti i flussi alla stessa sessione. Tuttavia, l'applicazione può, come opzione, assegnare flussi diversi a sessioni diverse. Qualsiasi flusso che l'applicazione non assegna in modo esplicito a una sessione appartiene alla sessione predefinita.

Le applicazioni audio tipiche devono evitare di modificare il volume e disattivare le impostazioni per le sessioni. Gli utenti controllano invece queste impostazioni tramite le interfacce utente dei programmi di controllo. Ad esempio, in Windows Vista, il programma fornito dal sistema, Sndvol.exe, visualizza un controllo del volume e un controllo disattivato per ogni sessione di rendering attiva o attiva di recente nel sistema. Tramite questi controlli, gli utenti possono modificare il volume e disattivare le impostazioni per tutte le sessioni nel sistema.

Il programma Sndvol attualmente visualizza i controlli del volume solo per i dispositivi endpoint di rendering audio. Non visualizza i controlli del volume per i dispositivi di acquisizione audio.

Una sessione è attiva se contiene uno o più flussi attivi. Un flusso attivo si trova nello stato in esecuzione. Uno stato di flusso inattivo è arrestato. Una sessione diventa attiva quando il primo flusso diventa attivo. Una sessione diventa inattiva quando l'ultimo flusso attivo diventa inattivo. Dopo che una sessione è stata inattiva per un periodo di tempo, il sistema modifica lo stato della sessione da inattivo a scaduto.

Sndvol visualizza i controlli volume e disattivazione disattivata per tutte le sessioni di rendering attive e inattive. Sndvol rimuove il volume e disattiva i controlli per una sessione quando lo stato della sessione passa da inattivo a scaduto o quando la sessione termina. Una sessione termina quando viene eliminato l'ultimo dei flussi, ovvero quando un client rilascia il conteggio dei riferimenti finali sull'ultimo oggetto flusso rimanente nella sessione. L'unica eccezione a questa regola riguarda i suoni delle notifiche di sistema. Sndvol visualizza sempre i controlli volume e disattivazione per i suoni di notifica del sistema indipendentemente dallo stato della sessione per questi suoni.

In genere, un flusso appartiene a una sessione che si estende solo sul processo che contiene l'applicazione che ha creato il flusso. Tuttavia, le applicazioni hanno la possibilità di definire sessioni tra processi che combinano flussi da due o più processi.

WASAPI supporta principalmente sessioni tra processi in modo che:

  • Il programma Sndvol può presentare all'utente un singolo controllo volume per gestire i suoni delle notifiche di sistema in tutte le applicazioni.
  • Un lettore multimediale eseguito in un processo può trasmettere contenuto protetto a un programma di decrittografia eseguito in un altro processo.

Analogamente alle impostazioni di controllo per le sessioni di rendering specifiche del processo, le impostazioni di controllo per le sessioni di rendering tra processi sono, per impostazione predefinita, persistenti tra riavvii del sistema. WASAPI fornisce questo comportamento principalmente per il vantaggio dei suoni di notifica del sistema, che devono conservare il volume dell'utente e disattivare le impostazioni quando la combinazione di applicazioni varia nel tempo.

Il programma Sndvol etichetta il controllo volume per ogni sessione con un nome visualizzato e un'icona. Un client ha la possibilità di assegnare in modo esplicito un nome visualizzato e un'icona a una sessione. Se il client non fornisce questi elementi, Sndvol visualizza invece un nome predefinito e un'icona predefinita. Il nome predefinito incorpora informazioni quali il titolo della finestra dell'applicazione. L'icona predefinita è l'icona per la finestra dell'applicazione. Solo nel caso di sessioni specifiche del processo, queste impostazioni predefinite forniscono informazioni significative agli utenti. Si noti che una sessione tra processi può essere associata a più di un'applicazione. In questo caso, solo un nome visualizzato e un'icona forniti dal client sono significativi.

Anche se le impostazioni del volume e dell'audio per una sessione di rendering sono, per impostazione predefinita, persistenti nei riavvii del sistema, il nome visualizzato e l'icona forniti dal client non sono. Per assicurarsi che Sndvol visualizzi il nome e l'icona forniti dal client, il client deve assegnare in modo esplicito il nome e l'icona alla sessione al momento in cui il client assegna il primo flusso alla sessione. Il sistema mantiene il nome visualizzato e l'icona per una sessione solo fino al termine della sessione.

Ogni sessione viene identificata da un GUID di sessione. Al momento dell'apertura di un flusso da parte di un client, il client assegna tale flusso a una determinata sessione. Il client fornisce le due informazioni seguenti per identificare la sessione:

  • GUID di sessione.
  • Indipendentemente dal fatto che la sessione sia una sessione specifica del processo o di un processo, una sessione specifica del processo contiene solo flussi dal processo del client.

Queste informazioni sono sufficienti per distinguere una determinata sessione da tutte le altre sessioni nello stesso computer. Il GUID di sessione per una sessione specifica del processo identifica in modo univoco la sessione solo nell'ambito del processo proprietario della sessione. Al contrario, il GUID di sessione per una sessione tra processi è univoco nell'ambito di tutti i processi in esecuzione nel computer.

Nel caso di una sessione specifica del processo, il sistema usa una combinazione di GUID di sessione e ID processo per identificare in modo univoco la sessione nell'ambito del computer. Pertanto, se i client in due processi diversi assegnano i rispettivi flussi a due sessioni specifiche del processo con GUID di sessione identici, il sistema considera le sessioni come separate perché i relativi ID processo sono diversi. Inoltre, se una sessione tra processi usa lo stesso GUID di sessione di una o più sessioni specifiche del processo, il sistema considera la sessione tra processi diversa dalle sessioni specifiche del processo, anche se condividono lo stesso GUID di sessione.

Ad esempio, in Windows Vista, api di livello superiore, ad esempio le funzioni waveOutXxx multimediali di Windows e DirectSound assegnano in genere i flussi audio creati alle sessioni predefinite specifiche del processo identificate dal valore GUID della sessione GUID_NULL. Per i client di queste API, la sessione predefinita per ogni processo client è separata dalle sessioni predefinite per altri processi client, anche se le sessioni hanno GUID di sessione identici. Inoltre, se una o più applicazioni assegnano flussi alla sessione tra processi identificata dal valore GUID della sessione GUID_NULL, il sistema considera questa sessione tra processi come separata dalle sessioni predefinite specifiche del processo che condividono lo stesso GUID di sessione. Di conseguenza, il programma Sndvol visualizza un controllo volume separato per la sessione predefinita e specifica del processo di ogni client e visualizza un controllo del volume aggiuntivo per la sessione tra processi identificata dal valore GUID della sessione GUID_NULL, se tale sessione esiste.

Ogni sessione è associata a un solo dispositivo endpoint audio. Se due sessioni hanno GUID di sessione identici e ID processo, ma sono associati a dispositivi diversi, il sistema considera le due sessioni come separate. Una sessione non può mai contenere flussi di acquisizione e rendering perché un flusso di acquisizione può essere associato solo a un dispositivo di acquisizione e un flusso di rendering può essere associato solo a un dispositivo di rendering.

Come accennato in precedenza, le impostazioni del volume e dell'audio per una sessione sono persistenti tra i riavvii di sistema. Due o più istanze di un'applicazione possono creare sessioni specifiche del processo con GUID di sessione identici. Tramite il programma Sndvol, l'utente può selezionare impostazioni di volume e disattivazione diverse per ognuna di queste sessioni. Al termine di queste sessioni, il sistema mantiene le impostazioni di controllo di una sola di queste sessioni, ovvero l'ultima sessione da terminare. Successivamente, se una nuova istanza dell'applicazione crea una sessione specifica del processo con lo stesso GUID di sessione precedente, tale sessione eredita le impostazioni del volume e dell'audio salvate in precedenza.

Un'applicazione non deve tentare di aggiungere un flusso a o controllare il livello di volume di una sessione di proprietà di un'altra applicazione non correlata. Inoltre, un'applicazione non deve tentare di controllare il livello di volume della sessione gestita dal sistema per i suoni di notifica. Tuttavia, un'applicazione può riprodurre un suono tramite la sessione di sistema per i suoni di notifica chiamando la funzione PlaySound . Per altre informazioni, vedere Suoni di notifica per applicazioni audio legacy.

Un'applicazione può registrarsi per ricevere notifiche quando lo stato di una sessione cambia. Per altre informazioni, vedere Eventi di sessione audio.

In rari casi, un'applicazione che crea una sessione specifica del processo potrebbe dover consolidare il controllo delle sessioni specifiche del processo per due o più istanze dell'applicazione in un singolo controllo volume in Sndvol. Per altre informazioni, vedere Parametri di raggruppamento.

Guida per programmatori