【问题标题】:Delphi - Pause all playing sounds to play a specific sound on my appDelphi - 暂停所有播放声音以在我的应用程序上播放特定声音
【发布时间】:2013-01-02 20:43:03
【问题描述】:

如何暂停所有正在播放的声音(Windows 媒体播放器或其他播放器)以在我的应用程序中播放特定声音,然后返回播放上一个暂停的声音。

也就是说,如果您想在 windows 媒体播放器等声音播放器上播放声音,我的程序会暂停此声音以播放特定声音,并在播放完特定声音后暂停该声音。有人可以帮我吗?

我的 delphi 版本是 2010。谢谢。

【问题讨论】:

  • 假设您成功地完成了这项工作,而当您的应用程序正在播放声音时,我在我的应用程序中也这样做了 - 那么会发生什么?换句话说:这可能是不可能的。
  • 您只需要暂停Windows Media Player吗?
  • 在来电时Skype不也这样做吗?我还听说 Skype 是用 Delphi 构建的......
  • 如果你设法做到这一点,那该有多烦人。不要在我工作的任何机器上安装您的软件。谢谢:)
  • 您的问题是要暂停“像 Windows Media Player 这样的声音播放器”,这意味着您希望能够暂停 任何 任意声音播放器。在您的 cmets 中,您似乎建议您 需要处理 Windows Media Player。这种区别很重要。请edit澄清您的问题。

标签: delphi delphi-2010


【解决方案1】:

您没有指定您所针对的 Windows 版本。如果您想控制每个应用程序的音频,这会产生很大的不同。

在 Windows 7 中,您可以控制每个应用程序的音量(嗯..流)。

无法像这样控制使用 ASIO 的应用程序,但如果您只关心 Windows Media Player,那应该没有问题。

您可以通过 Core Audio API 控制流的音量(或静音)。 IAudioEndpointVolumeISimpleAudioVolume 接口。

但是,我不建议弄乱混音器的音量。

Windows 具有内置的机制,可以满足您的需求。它被称为duckingstream attenuation,用于在“通信”流开始时降低/静音所有非通信音频流的音量。

在 Windows 多媒体控制面板 (Mmsys.cpl) 中,您可以通过通信选项卡配置默认行为:

您必须找到默认的通信设备,并通过它播放音频。

这里的这个单元可以帮助你找到它: http://code.google.com/p/mfpack-media-foundation/source/browse/trunk/MFPACK/CoreAudio/MMDeviceAPI/MMDeviceApi.pas

从这里开始,如果您在播放音频时是否自动发生闪避,我不是 100%。 我自己没有尝试过,但希望这能引导您朝着正确的方向前进。 如果您预订任何结果,请告诉我。

ps: 如果我是你,我会更深入地研究mfpack,因为它似乎是处理这类东西的有用库。 我看到该项目有 3 个提交者(maxcmx、factoryx.code 和 peter larson)。我相信他们可以告诉你如何以正确的方式实现你的目标。

【讨论】:

    【解决方案2】:

    在 google 上搜索我发现了一个 windows xp 应用程序,它完全符合我的需要,它被称为 Windows XP 的 IndieVolume 每个应用程序的音量控制 (link here)。我会测试它,看看它是如何工作的,在最坏的情况下,我必须做一个解决方法,这样你就可以做我想做的事。不,但如果有人有更好的主意,我总是愿意倾听,或者继续阅读......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多