Delphi - 暂停所有播放的声音,在我的应用上播放特定的声音

时间:2013-01-02 20:43:04

标签: delphi delphi-2010

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

也就是说,如果您想在Windows播放器等声音播放器上播放声音,我的程序会暂停此声音播放特定声音,并在完成特定声音播放后声音暂停。有人能帮助我吗?

我的delphi版本是2010.谢谢。

2 个答案:

答案 0 :(得分:2)

您没有指定要定位的Windows版本。如果你想控制每个应用程序的音频,它会产生很大的不同。

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

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

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

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

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

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

Settings

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

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

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

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

答案 1 :(得分:0)

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