2013-01-02 56 views
3

如何暂停所有播放声音(Windows媒体播放器或其他播放器)以在我的应用程序中播放特定声音,然后返回以播放先前暂停的声音。也就是说,如果你想让一个声音播放器播放声音,比如windows媒体播放器,我的程序会暂停这个声音播放特定的声音,并且在完成特定的声音播放后,声音暂停。有人能帮我吗?Delphi - 暂停所有播放声音以在我的应用程序上播放特定声音

我的delphi版本是2010.谢谢。

+2

假设你设法把这个关掉,并且我的应用程序在你的应用程序播放它的声音时也这样做 - 那么会发生什么?换句话说:这可能是不可能的。 –

+0

为什么不可能,@ 500?某些智能手机可以做到这一点。我不知道Windows是否支持类似的东西,但没有固有的原因,这种功能不可能存在。我可以想到它可以用多种程序工作的三种方式:第二种程序可以暂停第一个程序,然后在完成时恢复该程序,让第一个程序恢复所有其他程序*完成;或者第二个程序可能在播放前被迫等待“暂停互斥”;或者第二个程序可能根本无法播放。 –

+0

对不起,我的朋友们认为这对于编程经验丰富的人来说不是那么难。我只需要暂停在Windows媒体播放器上播放的歌曲,在我的应用程序中播放声音,然后在Windows媒体播放器上继续歌曲,直到她暂停播放。如果有人能帮助我,我提前感谢你! –

回答

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)。我相信他们可以告诉你如何以正确的方式完成你的目标。

0

搜索在谷歌,我发现一个Windows XP的应用程序,不正是我需要的,它被称为用于Windows XP的IndieVolume每个应用程序的音量控制(link here)。我会测试它,看看它是如何工作的,在最糟糕的情况下,我必须做一个解决方法,以便您可以做我想做的事情。不,但如果有人有一个更好的主意,我总是愿意倾听,或者更愿意阅读...