Condividi tramite


configurazione voce di DSSPEAKER_DIRECTOUT

Nota Queste informazioni si applicano a Windows XP e ai sistemi operativi precedenti. A partire da Windows Vista, IDirectSound::GetSpeakerConfig e IDirectSound::SetSpeakerConfig sono stati deprecati.

Un programma dell'applicazione può modificare la configurazione dell'altoparlante DirectSound in modalità direct-out chiamando il metodo IDirectSound::SetSpeakerConfig con il parametro di configurazione voce impostato su DSSPEAKER_DIRECTOUT (vedere la documentazione di Microsoft Windows SDK). In questo modo viene specificata una configurazione senza altoparlante in cui i canali nel flusso di riproduzione dall'applicazione vengono restituiti direttamente all'adattatore audio senza essere interpretati come posizioni voce. Tuttavia, il flusso di input può comunque essere modificato dalla conversione della frequenza di campionamento, dall'attenuazione, dal filtro e da altri tipi di elaborazione che non richiedono presupposti sull'assegnazione di altoparlanti ai canali.

Una volta applicata, l'impostazione di configurazione dell'altoparlante DSSPEAKER_DIRECTOUT è globale e influisce sul dispositivo audio nel suo complesso. Tutte le applicazioni audio eseguite successivamente sono soggette alla nuova impostazione fino a quando DirectSound non modifica nuovamente l'impostazione.

In modalità di uscita diretta, il dispositivo audio esegue il rendering del primo canale al primo connettore di output nel dispositivo, al secondo canale al secondo output del dispositivo e così via. Ciò consente a un'applicazione di creazione audio di restituire dati multicanale direttamente a un dispositivo, ad esempio un mixer esterno o un dispositivo di archiviazione audio (disco rigido, ADAT e così via). Ad esempio, è possibile assegnare i canali in un flusso di 48 canali, come illustrato nella tabella seguente.

Contenuto numero canale 0

Vocale

1

Batteria

2

Chitarra

3

Basso

...

47

Pianoforte

Per questo tipo di dati audio non elaborati, le posizioni dell'altoparlante sono senza significato e l'assegnazione di posizioni voce ai flussi di input o output potrebbe causare effetti collaterali indesiderati. Ad esempio, un componente come KMixer potrebbe intervenire in modo inappropriato applicando effetti specifici dell'altoparlante, ad esempio la virtualizzazione 3D o la codifica Dolby Surround Pro Logic al flusso. Si noti che il numero di canali di dati non elaborati non è limitato dal numero di bit nella maschera di canale.

Anche un dispositivo non progettato appositamente per la modifica dell'audio deve in genere accettare una richiesta di proprietà set di KSPROPERTY_AUDIO_CHANNEL_CONFIG per modificare la configurazione dell'altoparlante in KSAUDIO_SPEAKER_DIRECTOUT. In generale, un dispositivo deve evitare l'esito negativo della richiesta, a meno che non possa in qualche modo verificare che gli output siano connessi agli altoparlanti e non possano essere usati esternamente per qualsiasi altro scopo (ad esempio, come input a un mixer esterno).

Un'applicazione che usa la modalità direct-out viene in genere scritta per un dispositivo hardware specifico. Ciò consente all'applicazione di sapere in anticipo quali formati di dati direct-out supporta il dispositivo, incluso il numero di canali e il modo in cui i dati in tali canali devono essere interpretati. Questa conoscenza è necessaria perché quando un'applicazione chiama IDirectSound::GetSpeakerConfig in un dispositivo configurato in modalità direct-out, il dispositivo conferma semplicemente che è in questa modalità; non fornisce informazioni aggiuntive sul numero di canali nei formati di flusso supportati in modalità direct-out. Queste informazioni potrebbero tuttavia essere ottenute inviando una richiesta get-property KSPROPERTY_AUDIO_MIX_LEVEL_CAPS al nodo supermixer del pin del mixer del dispositivo. Vedere DirectSound Node-Ordering Requirements.)

Quando si specifica il formato di onda per un flusso direct-out, un'applicazione deve impostare il membro dwChannelMask della struttura WAVEFORMATEXTENSIBLE sul valore KSAUDIO_SPEAKER_DIRECTOUT, ovvero zero. Una maschera canale pari a zero indica che non sono definite posizioni voce. Come sempre, il numero di canali nel flusso viene specificato nel membro Format.nChannels .

I fornitori di hardware hanno la possibilità di supportare l'accelerazione hardware DirectSound quando i dispositivi sono configurati in modalità direct-out. Un'applicazione DirectSound può riprodurre un flusso direct-out tramite uno dei pin di combinazione del dispositivo, se disponibile. Dopo che tutte le istanze del pin hardware disponibili sono state esaurite, tutti i nuovi flussi passano invece attraverso KMixer.

Quando si combinano flussi per un dispositivo configurato in modalità direct-out, KMixer applica un mapping uno-a-uno tra i canali dei flussi di input dalle applicazioni e i canali del flusso di combinazione che restituisce al dispositivo. Ciò significa che se l'applicazione genera diversi flussi direct-out con lo stesso numero di canali, ad esempio, ogni canale N della combinazione di output è semplicemente la somma dei canali N di tutti i flussi che immettono KMixer.

Quando si combinano diversi flussi direct-out che differiscono per il numero di canali che contengono, l'algoritmo di combinazione di KMixer è leggermente più complesso. In questo caso, ogni canale N della combinazione è la somma dei canali N di tutti i flussi di input che hanno un canale N. Ad esempio, se KMixer combina flussi di input quad e stereo per formare una combinazione di output quad, canali zero e uno della combinazione di output sono le somme di canali zero e uno, rispettivamente, dei flussi stereo e quad di input. Il flusso di input stereo non contribuisce, tuttavia, ai canali due e tre della combinazione, che vengono acquisiti esclusivamente dagli ultimi due canali del flusso di input quad.

Un'applicazione che tenta di eseguire una delle operazioni seguenti rischia un comportamento imprevedibile:

  • Riprodurre un flusso non in formato direct-out tramite un dispositivo configurato in modalità direct-out.

  • Riprodurre un flusso direct-out tramite un dispositivo non configurato in modalità direct-out.

Di fronte a uno di questi casi, KMixer evita semplicemente di non riuscire il tentativo di aprire il flusso. Tenta invece di gestire l'apparente incompatibilità usando l'algoritmo di mapping uno-a-uno descritto in precedenza. L'utente può o non essere soddisfatto del risultato. Non è previsto che altri componenti audio gestisca questi casi nello stesso modo di KMixer. Ad esempio, il driver per un dispositivo configurato in modalità direct-out non riesce un tentativo di aprire un buffer hardware per un flusso di output non in formato direct-out e viceversa.

Un'applicazione di creazione audio potrebbe dover consentire all'utente di ascoltare i dati che ha mescolato nei primi canali del flusso di output, ma ignorare i dati non elaborati ancora contenuti nei canali rimanenti del flusso. Il comportamento di KMixer rende questo semplice. Ad esempio, se un flusso di riproduzione da 24 canali contiene una combinazione stereo nei canali 0 e 1 e dati non elaborati nei canali da 2 a 23, l'applicazione esegue le operazioni seguenti:

  • Configura il dispositivo audio di destinazione (non è necessariamente il dispositivo usato dall'applicazione per modificare il flusso) in modalità stereo chiamando SetSpeakerConfig con DSSPEAKER_STEREO.

  • Modifica dwChannelMask nella struttura WAVEFORMATEXTENSIBLE del flusso di riproduzione in KSAUDIO_SPEAKER_STEREO ma lascia Format.nChannels impostato su 24, ovvero il numero totale di canali nel flusso.

KMixer combina solo i canali stereo del flusso di riproduzione, descritti nella maschera di canale, e rimuove i 22 canali rimanenti, che contengono dati non elaborati. Tenere presente che è improbabile che tutte le modifiche apportate all'impostazione della configurazione dell'altoparlante DirectSound vengano applicate fino a quando l'oggetto DirectSound corrente non viene eliminato e che venga creato un altro oggetto (vedere Applicazione di impostazioni Speaker-Configuration).