2013-01-02 73 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)。我會測試它,看看它是如何工作的,在最糟糕的情況下,我必須做一個解決方法,以便您可以做我想做的事情。不,但如果有人有一個更好的主意,我總是願意傾聽,或者更願意閱讀...