Что нового

Управление микшером Windows

VadimKHL

Новичок
Сообщения
155
Репутация
0
Добрый день!
Есть код для управления микшером Windows, в части MasterVolume.
Код:
; создание объекта IAudioEndpointVolume
$oVolume = GetVolumeObject()
If @error Then Exit ConsoleWrite("!Error " & @error & @CRLF)

; текущий уровень (от 0.0 до 1.0)
Global $iLevel
$oVolume.GetMasterVolumeLevelScalar($iLevel)
ConsoleWrite("Уровень звука : " & Round($iLevel * 100) & "%" & @CRLF)
MsgBox(0,"Volume", Round($iLevel * 100))

; установка уровня (от 0.0 до 1.0)
$iLevel = 0.34 ; 34%
$oVolume.SetMasterVolumeLevelScalar($iLevel, 0)

; включение (0) или отключение (1) звука
Global $fMute = False
$oVolume.SetMute($fMute, 0)

; проверка отключения звука
$oVolume.GetMute($fMute)
ConsoleWrite("Звук отключён : " & ($fMute = True) & @CRLF)

; --------------------

Func GetVolumeObject()
  Local Const $CLSCTX_INPROC_SERVER = 0x1
  Local Const $sCLSID_MMDeviceEnumerator = "{BCDE0395-E52F-467C-8E3D-C4579291692E}"
  Local Const $sIID_IMMDeviceEnumerator = "{A95664D2-9614-4F35-A746-DE8DB63617E6}"
  Local Const $tagIMMDeviceEnumerator = "EnumAudioEndpoints hresult(dword;dword;ptr*);" & _
                                        "GetDefaultAudioEndpoint hresult(dword;dword;ptr*);" & _
                                        "GetDevice hresult(wstr;ptr*);" & _
                                        "RegisterEndpointNotificationCallback hresult(ptr);" & _
                                        "UnregisterEndpointNotificationCallback hresult(ptr);"
  Local Const $sIID_IMMDevice = "{D666063F-1587-4E43-81F1-B948E807363F}"
  Local Const $tagIMMDevice = "Activate hresult(clsid;dword;variant*;ptr*);" & _
                              "OpenPropertyStore hresult(dword;ptr*);" & _
                              "GetId hresult(ptr*);" & _
                              "GetState hresult(dword*);"
  Local Const $sIID_IAudioEndpointVolume = "{5CDF2C82-841E-4546-9722-0CF74078229A}"
  Local Const $tagIAudioEndpointVolume = "RegisterControlChangeNotify hresult(ptr);" & _
                                         "UnregisterControlChangeNotify hresult(ptr);" & _
                                         "GetChannelCount hresult(uint*);" & _
                                         "SetMasterVolumeLevel hresult(float;ptr);" & _
                                         "SetMasterVolumeLevelScalar hresult(float;ptr);" & _
                                         "GetMasterVolumeLevel hresult(float*);" & _
                                         "GetMasterVolumeLevelScalar hresult(float*);" & _
                                         "SetChannelVolumeLevel hresult(uint;float;ptr);" & _
                                         "SetChannelVolumeLevelScalar hresult(uint;float;ptr);" & _
                                         "GetChannelVolumeLevel hresult(uint;float*);" & _
                                         "GetChannelVolumeLevelScalar hresult(uint;float*);" & _
                                         "SetMute hresult(int;ptr);" & _
                                         "GetMute hresult(int*);" & _
                                         "GetVolumeStepInfo hresult(uint*;uint*);" & _
                                         "VolumeStepUp hresult(ptr);" & _
                                         "VolumeStepDown hresult(ptr);" & _
                                         "QueryHardwareSupport hresult(dword*);" & _
                                         "GetVolumeRange hresult(float*;float*;float*)"
  Local $oMMDeviceEnumerator = ObjCreateInterface($sCLSID_MMDeviceEnumerator, $sIID_IMMDeviceEnumerator, $tagIMMDeviceEnumerator)
  If Not IsObj($oMMDeviceEnumerator) Then Return SetError(1, 0, 0)
  Local $eRender, $eConsole, $pDefaultDevice, $pEndpointVolume
  $oMMDeviceEnumerator.GetDefaultAudioEndpoint($eRender, $eConsole, $pDefaultDevice)
  Local $oDefaultDevice = ObjCreateInterface($pDefaultDevice, $sIID_IMMDevice, $tagIMMDevice)
  If Not IsObj($oDefaultDevice) Then Return SetError(2, 0, 0)
  $oDefaultDevice.Activate($sIID_IAudioEndpointVolume, $CLSCTX_INPROC_SERVER, 0, $pEndpointVolume)
  Local $oEndpointVolume = ObjCreateInterface($pEndpointVolume, $sIID_IAudioEndpointVolume, $tagIAudioEndpointVolume)
  If Not IsObj($oEndpointVolume) Then Return SetError(3, 0, 0)
  Return $oEndpointVolume
EndFunc


Подскажите пожалуйста, а как управлять другими уровнями громкости?
Конкретно, нужно все источники звука скинуть в Mute, кроме Master и LineIN.
И наоборот, отключить у всех Mute, а LineIN в Mute.

Хелп!
 
Автор
V

VadimKHL

Новичок
Сообщения
155
Репутация
0
Тишина.
Это получается не реально сделать на AutoIT?
 
Верх