2012-02-09 8 views
1

История: Я пишу музыкальный плеер, контролируемый голосом. Раньше в проекте использовался winamp для музыки, и я бы хотел покончить с этим. Я хотел бы интегрировать голосовое управление с музыкальным проигрывателем. Проблема в том, что при изменении свойства тома моего объекта медиаплеера (mplayer.settings.volume = 5;) он изменяет громкость MASTER. Значение любой речевой обратной связи будет полностью не слышно во время воспроизведения музыки. Не круто, когда вы едете. Если я запустил медиаплеер Windows, я могу изменить громкость музыки, не затрагивая основной том .. так что должен быть способ.Управление громкостью в C# с использованием WMPLib в Windows

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

Значит, кто-нибудь знает, как я хотел бы отделить мастер и громкость музыки с управлением медиа-плеером Windows?

Конкретные сведения: Целевая машина XP (sp3), с .NET 4.0. Кроме того, это консольное приложение.

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

ответ

2

Единственный способ я нашел делать это с помощью Interop и 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

Мне еще нужно попробовать (занят и так), но я верю вам, когда вы говорите, что это единственный способ. Учитывая отсутствие поисковых запросов в Google и тот факт, что вы единственный, кто должен ответить. (и спасибо за это) – Arith

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.

Смежные вопросы