Controlli volume sessione
Come spiegato in precedenza, i client WASAPI possono controllare singolarmente il livello di volume di ogni sessione audio. WASAPI applica l'impostazione del volume per una sessione in modo uniforme a tutti i flussi della sessione. Ogni livello di volume è un valore compreso nell'intervallo compreso tra 0,0 e 1,0, dove 0,0 indica il silenzio e 1,0 indica il volume completo (nessuna attenuazione).
Un client crea in modo implicito una sessione assegnando il primo flusso a tale sessione. Il livello di volume predefinito della nuova sessione è 1.0. Come illustrato in precedenza, l'utente può modificare il livello di volume della sessione tramite l'interfaccia utente di un programma di controllo (ad esempio, Sndvol) che è un client WASAPI. Le impostazioni del controllo sono persistenti.
Oltre alle impostazioni del volume controllato dal client, il sistema applica le proprie impostazioni del volume alle sessioni. Queste impostazioni sono basate su criteri audio e cambiano dinamicamente in risposta alle modifiche nei flussi che costituiscono la combinazione audio globale. Per altre informazioni sui criteri audio, vedi Componenti audio in modalità utente.
Il software di sistema che implementa il controllo del volume per ogni flusso moltiplica gli esempi PCM nel flusso in base al livello di volume effettivo. Il livello di volume effettivo è il risultato della moltiplicazione delle impostazioni del volume del client e del sistema. Di conseguenza, la modifica risultante dell'ampiezza del segnale è una combinazione lineare dei livelli di volume client e di sistema. Ad esempio, se il livello del volume client è 0,8 e il livello del volume di sistema è 0,5, il livello di volume effettivo è (0,8).(0,5) = 0,4.
Si noti che la voce percepita non è lineare rispetto all'ampiezza del segnale. Al contrario, la voce varia approssimativamente come il logaritmo del livello di volume v:
rumorosità in decibel = 20.log₁₀(v)
Pertanto, l'impostazione di v = 0,5 attenua la voce del segnale originale (il segnale prima dell'applicazione del livello del volume) di 6 decibel, impostando v = 0,25 attenua il segnale di 12 decibel e così via. Un livello di volume v = 1,0, corrispondente a 0 decibel, non modifica il livello del segnale originale.
Le applicazioni audio con interfacce utente per il controllo del livello di volume in genere visualizzano i dispositivi di scorrimento che generano modifiche alla voce percepita che sono proporzionali linearmente alle modifiche nella posizione del dispositivo di scorrimento. Per produrre una relazione lineare tra la voce percepita e la posizione del dispositivo di scorrimento, l'applicazione deve definire una relazione non lineare tra il livello del volume v e la posizione del dispositivo di scorrimento. Per altre informazioni, vedere Controlli del volume con tocco audio.
Come spiegato in precedenza, il programma di controllo del volume di sistema, Sndvol, visualizza i dispositivi di scorrimento del volume per le sessioni audio riprodotte in ogni dispositivo di rendering audio. Questi dispositivi di scorrimento vengono visualizzati nella casella di gruppo Applicazioni nella finestra SndVol. In genere, ogni sessione contiene tutti i flussi di riproduzione da una determinata finestra dell'applicazione. Attraverso i dispositivi di scorrimento nella finestra Sndvol, gli utenti controllano i livelli di volume delle singole applicazioni audio.
Come regola generale, un'applicazione deve assegnare tutti i flussi di riproduzione alla stessa sessione audio. WASAPI non impedisce a un'applicazione di distribuire i flussi di riproduzione tra più sessioni. Tuttavia, la proliferazione risultante dei dispositivi di scorrimento del volume in Sndvol potrebbe confondere gli utenti.
Come opzione, una finestra dell'applicazione può visualizzare un dispositivo di scorrimento del volume. Il dispositivo di scorrimento dell'applicazione deve riflettere sempre lo stato del dispositivo di scorrimento Sndvol corrispondente. Pertanto, se l'utente modifica il livello del volume spostando il dispositivo di scorrimento nella finestra dell'applicazione, il dispositivo di scorrimento corrispondente nella finestra Sndvol deve spostarsi all'unisono con il dispositivo di scorrimento dell'applicazione. Analogamente, se l'utente sposta il dispositivo di scorrimento Sndvol, il dispositivo di scorrimento dell'applicazione deve spostarsi all'unisono con il dispositivo di scorrimento Sndvol.
Per supportare questo comportamento, WASAPI implementa l'interfaccia ISimpleAudioVolume . Quando l'utente sposta il dispositivo di scorrimento dell'applicazione, l'applicazione chiama il metodo ISimpleAudioVolume::SetMasterVolume per regolare il livello del volume di sessione di conseguenza. Sndvol monitora le modifiche apportate al volume tramite questo metodo e riflette le modifiche nei dispositivi di scorrimento del volume visualizzati. Inoltre, un'applicazione può ricevere notifiche di modifiche al volume di sessione apportate dall'utente tramite Sndvol. A questo scopo, l'applicazione implementa un'interfaccia IAudioSessionEvents e registra l'interfaccia con WASAPI. Successivamente, ogni volta che l'utente modifica il livello del volume di sessione tramite Sndvol, l'applicazione riceve una chiamata di notifica tramite il metodo IAudioSessionEvents::OnSimpleVolumeChanged. Per un esempio di codice che implementa un'interfaccia IAudioSessionEvents , vedi Eventi di sessione audio. Per un esempio di codice che registra un'interfaccia IAudioSessionEvents , vedi Eventi audio per applicazioni audio legacy.
L'interfaccia ISimpleAudioVolume applica lo stesso livello di volume in modo uniforme a tutti i canali in una sessione audio. Anche se questa interfaccia deve soddisfare i requisiti di controllo del volume della maggior parte delle applicazioni, alcune applicazioni potrebbero richiedere funzionalità di controllo del volume più specializzate. L'interfaccia IAudioStreamVolume controlla il volume di un singolo flusso in una sessione rispetto agli altri flussi della sessione. IAudioStreamVolume consente anche a un client di controllare singolarmente i livelli di volume di tutti i canali nel flusso. Ad esempio, un'applicazione potrebbe usare questa funzionalità per ottenere effetti audio come simulare lo spostamento spaziale di un'origine audio eseguendo una panoramica da sinistra a destra. Un'altra interfaccia specializzata, IChannelAudioVolume, controlla i livelli di volume dei singoli canali in una sessione. Ad esempio, un'applicazione potrebbe usare IChannelAudioVolume per implementare i controlli di bilanciamento per un sistema audio stereofonico.
I dispositivi di scorrimento del volume nella casella Applicazioni in Sndvol riflettono solo le modifiche apportate al volume tramite l'interfaccia ISimpleAudioVolume . Non riflettono le modifiche apportate al volume tramite le interfacce IAudioStreamVolume e IChannelAudioVolume . Anche se alcune applicazioni potrebbero consentire agli utenti di controllare direttamente o indirettamente le impostazioni del volume tramite IAudioStreamVolume e IChannelAudioVolume, gli sviluppatori devono evitare di presentare i dispositivi di scorrimento delle applicazioni per queste impostazioni del volume che gli utenti probabilmente confondono con i dispositivi di scorrimento del volume in Sndvol. In caso contrario, un utente potrebbe spostare un dispositivo di scorrimento dell'applicazione che prevede di vedere la modifica riflessa in un dispositivo di scorrimento Sndvol e diventare confusa quando non si verifica alcuna modifica di questo tipo. Gli sviluppatori possono evitare questo problema tramite un'attenta progettazione dell'interfaccia utente.
Il livello di volume effettivo di qualsiasi canale nel submix della sessione, come sentito agli altoparlanti, è il prodotto dei quattro fattori a livello di volume seguenti:
- Livelli di volume per canale dei flussi nella sessione, che i client possono controllare tramite i metodi nell'interfaccia IAudioStreamVolume .
- Livello di volume per canale della sessione, che i client possono controllare tramite i metodi nell'interfaccia IChannelAudioVolume .
- Livello di volume master della sessione, che i client possono controllare tramite i metodi nell'interfaccia ISimpleAudioVolume .
- Il livello di volume basato su criteri della sessione, che il sistema modifica dinamicamente quando cambia la combinazione globale.
Ognuno dei quattro fattori a livello di volume nell'elenco precedente è un valore compreso nell'intervallo compreso tra 0,0 e 1,0, dove 0,0 indica il silenzio e 1,0 indica il volume completo (nessuna attenuazione). Il livello di volume effettivo è anche un valore compreso nell'intervallo da 0,0 a 1,0.
Il motore audio applica il livello di volume effettivo per ogni canale ai canali in un flusso prima di combinare il flusso con gli altri flussi nella sessione audio. Se i valori di esempio in un canale superano 0 decibel dopo che il motore audio li ha moltiplicati per il livello di volume effettivo, il motore ritaglia gli esempi prima di aggiungerli al submix della sessione.
Argomenti correlati