如何暂停所有播放声音(Windows 媒体播放器或其他播放器)以在我的应用程序中播放特定声音,然后返回播放上一个暂停的声音。
也就是说,如果您想在 windows 媒体播放器等声音播放器上播放声音,我的程序会暂停此声音以播放特定声音,并在播放完特定声音后暂停声音。有人能帮我吗?
我的delphi版本是2010。谢谢。
如何暂停所有播放声音(Windows 媒体播放器或其他播放器)以在我的应用程序中播放特定声音,然后返回播放上一个暂停的声音。
也就是说,如果您想在 windows 媒体播放器等声音播放器上播放声音,我的程序会暂停此声音以播放特定声音,并在播放完特定声音后暂停声音。有人能帮我吗?
我的delphi版本是2010。谢谢。
您没有指定您所针对的 Windows 版本。如果您想控制每个应用程序的音频,这会产生很大的不同。
在 Windows 7 中,您可以控制每个应用程序的音量(嗯.. 流)。
无法像这样控制使用 ASIO 的应用程序,但如果您只关心 Windows Media Player,那应该不是问题。
您可以通过 Core Audio API 控制流的音量(或静音)。IAudioEndpointVolume
或ISimpleAudioVolume
接口。
但是,我不建议弄乱混音器的音量。
Windows 具有内置的机制,可以满足您的需求。它被称为ducking
or stream 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)。我相信他们可以告诉你如何以正确的方式实现你的目标。
在谷歌上搜索,我发现了一个 Windows XP 应用程序,它完全符合我的需要,它被称为Windows XP 的每个应用程序音量控制的IndieVolume (链接在这里)。我会测试它,看看它是如何工作的,在最坏的情况下,我必须做一个解决方法,这样你就可以做我想做的事。不,但如果有人有更好的主意,我总是愿意倾听,或者继续阅读......