2010-07-07 6 views
0

Question très simple. Dans le MSDN documentation pour l'API DirectSound, ils indiquent que lorsque mon application est mise au point, elle sera le seul programme audible. C'est exactement ce que je veux faire, cependant en réglant ce drapeau et en jouant du son à travers mon application, je peux toujours entendre la musique de fond sur mon ordinateur.DSSCL_EXCLUSIVE ne donnant pas de sortie audible exclusive. DirectSound

Donc la question est, pourquoi? Est-ce parce que l'application joue la musique de fond en utilisant une API de bas niveau différente, et donc des tampons de mélange différents? Ou y at-il un autre petit truc que je dois modifier pour devenir la seule application audible.

J'ai posé une question similaire/connexe here, sans réponse. Mais encore une fois, si vous ne connaissez pas la réponse à la question spécifique de DirectSound, mais que vous savez comment devenir la seule application audible avec une API différente, faites-le moi savoir!

Merci, je suis sur Windows XP 32Bit Professional, si ça fait la différence.

+1

Quelle version de l'interface IDirectSound utilisez-vous? Je suppose que votre plate-forme cible n'est pas WinCE, car dans la documentation de WinCE, elle indique que la sortie exclusive n'est pas prise en charge. La documentation de l'interface IDirectSound8 a la remarque suivante concernant le drapeau exclusif: Pour DirectX 8.0 et versions ultérieures, a le même effet que DSSCL_PRIORITY. – humbagumba

+0

Merci pour le commentaire, c'est probablement pourquoi il ne me laisse pas avoir une sortie exclusive, la cible est XP, mais en utilisant DX 10.0 donc même que PRIORITY. Pouah. – DeusAduro

Répondre

2

Il y a longtemps, les développeurs de Windows ont réalisé que permettre à une application d'avoir le contrôle total du système audio (ce qui permettait d'ignorer d'autres applications) était une mauvaise idée. Et puis ils ont par la suite déconseillé plusieurs de ces drapeaux "exclusifs" et de mode premier plan/arrière-plan. Je crois que ce changement de comportement remonte à DirectX 7.1 (WinME) et formellement partout sur DX 8. C'était il y a 10 ans. Imaginez que votre application de vidéoconférence soit mise en sourdine lorsque vous passez de l'application de premier plan à une application qui exécute l'audio dans un mode exclusif. Ne pas être en mesure d'entendre de manière fiable quelqu'un lorsque vous passez d'une application à une autre n'est pas une expérience formidable. En fait, avant DX 8, de nombreuses applications de communication vocale populaires pour les jeux multi-joueurs reniflaient continuellement la poignée de fenêtre de premier plan et l'utilisaient pour l'appel de SetCooperativeLevel de sorte qu'elles ne soient pas assourdies .

Je pense qu'il serait intéressant de savoir, "qu'est-ce que vous voulez vraiment faire?" Cela vous fait supposer que vous avez besoin d'un contrôle total de la sortie audio.

Sur Vista et versions supérieures, il y a l'API WASAPI pour l'audio de bas niveau. Je crois qu'il existe un concept de mode "exclusif" mais je ne sais pas si cela l'emporte sur d'autres applications utilisant la carte son. YMMV.

+0

Merci pour la réponse, j'ai eu le sentiment que c'était quelque chose dans ce sens. La raison pour laquelle je veux et ai besoin de couper toutes les applications est que j'utilise ma carte audio comme générateur de signal, et que vous ne voulez pas que des bruits aléatoires soient envoyés à votre moteur. – DeusAduro

Questions connexes