2012-02-09 105 views
1

故事: 我正在寫一個由語音控制的音樂播放器。此前該項目使用winamp播放音樂 - 這是我想要消除的。我想將音頻控制與音樂播放器集成在一起。問題是,當更改我的媒體播放器對象(mplayer.settings.volume = 5;)的音量屬性時,它會更改MASTER音量。意味着在播放音樂時,任何語音反饋都將完全聽不見。開車時不太酷。如果我啓動Windows媒體播放器,我可以在不影響主音量的情況下更改音樂的音量。所以必須有一種方法。在Windows中使用WMPLib控制音量

我想過也許會發現是否有均衡器控制器埋在那裏,但關於這方面的文檔是可悲的。 - 要麼我的谷歌軟弱。

那麼,有誰知道我會如何去分離與Windows媒體播放器控制主音量和音量?

詳細信息: 目標機器是XP(sp3),我相信.NET 4.0。另外,這是一個控制檯應用程序。

預先感謝任何幫助

回答

2

我發現這樣做的唯一方法是使用互操作和WM_APPCOMMAND窗消息:

private const int APPCOMMAND_VOLUME_MUTE = 0x80000; 
    private const int WM_APPCOMMAND = 0x319; 
    private const int APPCOMMAND_MICROPHONE_VOLUME_UP = 26 * 65536; 
    private const int APPCOMMAND_MICROPHONE_VOLUME_DOWN = 25 * 65536; 

    [DllImport("user32.dll")] 
    public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 
    private void SetMicVolume() 
    { 
     SendMessageW(new WindowInteropHelper(this).Handle, WM_APPCOMMAND, new (IntPtr)APPCOMMAND_MICROPHONE_VOLUME_UP);//or _DOWN 
    } 
+0

我還沒有嘗試它(忙碌等​​),但我相信你,當你說這是唯一的方法。鑑於在谷歌搜索點擊量不足,事實上你是唯一一個回覆。 (並感謝你這樣做) – Arith 2012-02-11 11:27:07

3

我已經在Windows Media Player VER 12測試這一點,所以我對於大多數人來說,有一種比使用「user32.dll」更簡單的方法:

private static WMPLib.WindowsMediaPlayer Player; 

public static void VolumeUp() 
{ 
    if (Player.settings.volume < 90) 
    { 
     Player.settings.volume = (Player.settings.volume + 10); 
    } 
} 

public static void VolumeDown() 
{ 
    if (Player.settings.volume > 1) 
    { 
     Player.settings.volume = (Player.settings.volume - (Player.settings.volume/2)); 
    } 
} 

毫無疑問,這已經被支持了一段時間了。它不會更改主音量,只會更改媒體播放器音量。 Windows主卷是獨立的。

希望這可以幫助那些不侷限於XP SP3的人。