configuration de l’orateur DSSPEAKER_DIRECTOUT
Note Ces informations s’appliquent à Windows XP et aux systèmes d’exploitation antérieurs. À compter de Windows Vista, IDirectSound::GetSpeakerConfig et IDirectSound::SetSpeakerConfig ont été dépréciés.
Un programme d’application peut modifier la configuration de l’orateur DirectSound en mode direct-out en appelant la méthode IDirectSound::SetSpeakerConfig avec le paramètre de configuration de l’orateur défini sur DSSPEAKER_DIRECTOUT (voir Microsoft Windows SDK documentation). Cela spécifie une configuration sans haut-parleur dans laquelle les canaux du flux de lecture de l’application sont générés directement vers la carte audio sans être interprétés comme des positions de l’orateur. Toutefois, le flux d’entrée peut toujours être modifié par la conversion à taux d’échantillonnage, l’atténuation, le filtrage et d’autres types de traitement qui ne nécessitent aucune hypothèse concernant l’affectation des haut-parleurs aux canaux.
Une fois qu’il prend effet, le paramètre de configuration du haut-parleur DSSPEAKER_DIRECTOUT est global et affecte l’appareil audio dans son ensemble. Toutes les applications audio qui s’exécutent ultérieurement sont soumises au nouveau paramètre jusqu’à ce que DirectSound modifie à nouveau le paramètre.
En mode direct-out, le périphérique audio restitue le premier canal sur le premier connecteur de sortie sur l’appareil, le deuxième canal vers la deuxième sortie sur l’appareil, et ainsi de suite. Cela permet à une application de création audio de générer des données multicanal directement sur un appareil tel qu’un mixeur externe ou un périphérique de stockage audio (disque dur, ADAT, etc.). Par exemple, les canaux d’un flux de 48 canaux peuvent être affectés comme indiqué dans le tableau suivant.
Contenu du numéro de canal 0
Vocal
1
Batterie
2
Guitare
3
Basse
...
47
Piano
Pour ce type de données audio brutes, les positions de l’orateur sont vides de sens et l’attribution de positions d’orateur aux flux d’entrée ou de sortie peut entraîner des effets secondaires indésirables. Par exemple, un composant tel que KMixer peut intervenir de manière inappropriée en appliquant des effets spécifiques à l’orateur, tels que la virtualisation 3D ou l’encodage Dolby Surround Pro Logic au flux. Notez que le nombre de canaux de données brutes n’est pas limité par le nombre de bits dans le masque de canal.
Même un appareil qui n’est pas conçu spécifiquement pour l’édition audio doit généralement accepter une demande de KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property pour modifier la configuration de son haut-parleur en KSAUDIO_SPEAKER_DIRECTOUT. En général, un appareil doit éviter d’échouer à la demande, sauf s’il peut vérifier que ses sorties sont connectées à des haut-parleurs et ne peuvent pas être utilisées en externe à d’autres fins (par exemple, en tant qu’entrées dans un mélangeur externe).
Une application qui utilise le mode direct-out est généralement écrite pour un appareil matériel spécifique. Cela permet à l’application de savoir à l’avance quels formats de données directes sont pris en charge par l’appareil, notamment le nombre de canaux et la façon dont les données de ces canaux doivent être interprétées. Cette connaissance est nécessaire, car lorsqu’une application appelle IDirectSound::GetSpeakerConfig sur un appareil configuré en mode direct-out, l’appareil confirme simplement qu’il est dans ce mode ; il ne fournit aucune information supplémentaire sur le nombre de canaux dans les formats de flux qu’il prend en charge en mode direct-out. (Ces informations peuvent toutefois être obtenues en envoyant une KSPROPERTY_AUDIO_MIX_LEVEL_CAPS demande get-property au nœud de supermixeur sur la broche du mélangeur de l’appareil ; consultez Configuration requise de l'Node-Ordering DirectSound.)
Lorsque vous spécifiez le format d’onde pour un flux direct-out, une application doit définir le membre dwChannelMask de la structure WAVEFORMATEXTENSIBLE sur la valeur KSAUDIO_SPEAKER_DIRECTOUT, qui est zéro. Un masque de canal de zéro indique qu’aucune position d’orateur n’est définie. Comme toujours, le nombre de canaux dans le flux est spécifié dans le membre Format.nChannels .
Les fournisseurs de matériel ont la possibilité de prendre en charge l’accélération matérielle DirectSound lorsque leurs appareils sont configurés en mode direct-out. Une application DirectSound peut lire un flux direct-out via l’une des broches de mixage de l’appareil, le cas échéant. Une fois que toutes les instances de broche matérielle disponibles ont été épuisées, les nouveaux flux passent par KMixer à la place.
Lors du mélange de flux pour un appareil configuré en mode direct-out, KMixer applique un mappage un-à-un entre les canaux des flux d’entrée des applications et les canaux du flux de mixage qu’il génère sur l’appareil. Cela signifie que si l’application génère plusieurs flux direct-out qui ont le même nombre de canaux, par exemple, chaque canal N de la combinaison de sortie est simplement la somme des canaux N de tous les flux qui entrent dans KMixer.
Lors du mélange de plusieurs flux directs qui diffèrent par le nombre de canaux qu’ils contiennent, l’algorithme de mixage de KMixer est légèrement plus complexe. Dans ce cas, chaque canal N de la combinaison est la somme des canaux N de tous les flux d’entrée qui ont un canal N. Par exemple, si KMixer mélange des flux d’entrée quad et stéréo pour former une combinaison de sorties à quatre, les canaux zéro et l’un de la combinaison de sortie sont les sommes des canaux zéro et un, respectivement, des flux stéréo et quad d’entrée. Toutefois, le flux d’entrée stéréo ne contribue en rien aux canaux deux et trois de la combinaison, qui sont extraits uniquement des deux derniers canaux du flux d’entrée quad.
Une application qui tente d’effectuer l’une des opérations suivantes risque d’avoir un comportement imprévisible :
Lire un flux qui n’est pas au format direct-out via un appareil configuré en mode direct-out.
Lire un flux direct-out via un appareil qui n’est pas configuré en mode direct-out.
Face à l’un de ces cas, KMixer évite tout simplement d’échouer dans la tentative d’ouverture du flux. Au lieu de cela, il tente de gérer l’incompatibilité apparente à l’aide de l’algorithme de mappage un-à-un décrit ci-dessus. L’utilisateur peut être satisfait ou non du résultat. On ne peut pas s’attendre à ce que d’autres composants audio gèrent ces cas de la même manière que KMixer. Par exemple, le pilote d’un appareil configuré en mode direct-out doit échouer lors d’une tentative d’ouverture d’une mémoire tampon matérielle pour un flux de sortie qui n’est pas au format direct-out, et vice versa.
Une application de création audio peut avoir besoin de laisser l’utilisateur écouter les données qu’elle a mélangées dans les plusieurs premiers canaux de son flux de sortie, mais ignorer les données brutes qui sont toujours contenues dans les canaux restants du flux. Le comportement de KMixer rend cela simple. Par exemple, si un flux de lecture à 24 canaux contient une combinaison stéréo dans les canaux 0 et 1 et des données brutes dans les canaux 2 à 23, l’application effectue les opérations suivantes :
Configure l’appareil audio cible (il ne s’agit pas nécessairement de l’appareil utilisé par l’application pour modifier le flux) en mode stéréo en appelant SetSpeakerConfig avec DSSPEAKER_STEREO.
Modifie dwChannelMask dans la structure WAVEFORMATEXTENSIBLE du flux de lecture en KSAUDIO_SPEAKER_STEREO, mais laisse Format.nChannels défini sur 24, ce qui correspond au nombre total de canaux dans le flux.
KMixer mélange uniquement les canaux stéréo du flux de lecture, qui sont décrits dans le masque de canal, et ignore les 22 canaux restants, qui contiennent des données brutes. N’oubliez pas que toute modification apportée au paramètre de configuration du haut-parleur DirectSound n’est pas susceptible de prendre effet tant que l’objet DirectSound actuel n’est pas détruit et qu’un autre objet n’est pas créé (voir Application des paramètres Speaker-Configuration).