Управление громкостью в C # с помощью WMPLib в Windows - PullRequest
1 голос
/ 09 февраля 2012

История: Я пишу музыкальный плеер, управляемый голосом. Ранее в проекте использовалась музыка Winamp - с которой я бы хотел покончить. Я хотел бы интегрировать голосовое управление с музыкальным проигрывателем. Проблема в том, что при изменении свойства тома моего объекта медиаплеера (mplayer.settings.volume = 5;), он изменяет громкость MASTER. Это означает, что любая голосовая обратная связь будет совершенно не слышна во время воспроизведения музыки. Не круто, когда ты за рулем. Если я запускаю Windows Media Player, я могу изменить громкость музыки, не влияя на общую громкость ... так что должен быть способ.

Я подумал, может быть, выяснить, нет ли там элемента управления эквалайзером, но документация по этому вопросу жалкая. - либо это, либо мой гугл-фу слаб.

Так кто-нибудь знает, как бы я разделил громкость мастер-музыки и музыки с помощью управления Windows Media Player?

Частности: Целевой машиной является XP (sp3) с версией .NET 4.0. Также это консольное приложение.

Заранее спасибо за любую помощь

Ответы [ 2 ]

5 голосов
/ 04 сентября 2013

Я проверил это в 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.

2 голосов
/ 09 февраля 2012

Единственный способ сделать это - использовать сообщение Interop и WM_APPCOMMAND windows:

    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
    }
...