【问题标题】:DSSCL_EXCLUSIVE not giving exclusive audible output. DirectSoundDSSCL_EXCLUSIVE 不提供专有的声音输出。直接声音
【发布时间】:2010-07-07 17:29:31
【问题描述】:

很简单的问题。在 DirectSound API 的 MSDN documentation 中,他们声明当我的应用程序处于焦点时,它将是唯一可听的程序。这正是我想要发生的事情,但是当设置这个标志并通过我的应用程序播放声音时,我仍然可以听到我电脑上的背景音乐。

所以问题是,为什么?是因为应用程序使用不同的低级 API 播放背景音乐,因此使用不同的混合缓冲区?还是我需要调整一些其他小技巧才能成为唯一可听的应用程序。

我问了一个类似/相关的问题here,但没有任何回应。但是,如果您不知道特定 DirectSound 问题的答案,但您知道如何成为唯一具有不同 API 的可听应用程序,请再次告诉我!

谢谢,我使用的是 Windows XP 32 位专业版,如果有什么不同的话。

【问题讨论】:

  • 您使用的是哪个版本的 IDirectSound 接口?我假设您的目标平台不是 WinCE,因为在 WinCE 的文档中,它说不支持独占输出。 IDirectSound8 接口的文档有以下关于独占标志的说明:对于 DirectX 8.0 及更高版本,与 DSSCL_PRIORITY 具有相同的效果。
  • 感谢您的评论,这可能就是为什么它不让我拥有独家输出,目标是 XP,但使用 DX 10.0 与 PRIORITY 相同。呃。

标签: c++ windows directsound


【解决方案1】:

很久以前,Windows 开发人员意识到允许一个应用程序完全控制音频系统(从而使其他应用程序静音)是一个坏主意。然后他们随后弃用了许多“独占”和前景/背景模式标志。我相信这种行为变化可以追溯到 DirectX 7.1 (WinME),然后正式出现在 DX 8 上。这是 10 年前的事了。

想象一下,当您将前台应用程序切换到以某种独占模式运行音频的应用程序时,您的视频会议应用程序会静音。在应用之间切换时无法可靠地听到任何人的声音并不是一种很好的体验。

事实上,在 DX 8 之前,许多流行的多人游戏语音通信应用程序会不断地嗅探前台窗口句柄并将其用于调用 SetCooperativeLevel,这样它们就不会被静音。

我想知道“你真正想做的是什么?”会很有趣。这使您假设您需要完全控制音频输出。

在 Vista 及更高版本中,有用于低级音频的 WASAPI api。我相信有一个“独占”模式的概念,但我不知道是否胜过使用声卡的其他应用程序。 YMMV。

【讨论】:

  • 感谢您的回复,我有一种感觉,就是这样。我想要并且需要将所有应用程序静音的原因是我将声卡用作信号发生器,并且您不希望将随机噪音发送到您的电机。
猜你喜欢
  • 2018-02-25
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2012-06-23
  • 2014-07-09
  • 1970-01-01
相关资源
最近更新 更多