Control simple por audio - autohotkey

theelf

Madmaxista
Desde
1 Abr 2020
Mensajes
6.408
Reputación
10.784
Buenas, comparto un pequeño codigo por si alguno le sirviera

Hace no mucho, me compre un mini PC gigabyte brix, MUY barato en ebay a un polaco, pero a pesar de andar con la duda, llego y funciona bien. Es una marabilla, pero tiene un problema, el puñetero ventilador es RUIDOSO como el solo el hijo e fruta

Lo dearme pero es todo muy miniatura, y veo dificil arreglar eso sin terminar moliendo la carcaza asi q eche un vistazo por software

En mi caso, para la placa base, encontre dos programas que son capaces de controlar por software el ventilador, speedfan, y argus monitor. El primero gratuito, pero patetico en opciones para ser controlado fuera del programa, el segundo de pago pero ligeramente mas amable en las opciones

Adjunto una copia piratona que encontre del argus, y un codigo que escribi en autohotkey


En mi caso, lo que queria es que el ventilador NO me molestara en NADA, y eso solo era posible, en silencio total, al 20% maximo, pero me molestaba algo... que la mayoria del tiempo estoy con sonido, musica en winamp, youtube, video etc

Cuando tengo audio, puedo tener el ventilador mas fuerte que no lo escucho, en mi caso, hasta el 40% que ni me entero, asi que este programa de autohotkey, detecta si hay audio reproduciendo, y ejecuta un PROFILE del argus

Obviamente eso se puede cambiar a cualquier programa que usen, puede controlar cualquier cosa, en este caso, controlo dos profiles, con CTRL-SHIFT-D y CTRL-SHIFT-M

D desktop M musica, cada uno asigna lo q le gusta



ARGUS 5.2




Código:
#Warn, All, Off
SetTitleMatchMode, 2
DetectHiddenWindows, On


Run, ArgusMonitor.exe
sleep 5000

audio=0

Loop {

       if(!IsAudioPlaying() and audio=0)
       {
           Send ^+d
        audio=1
       }
     
       if(IsAudioPlaying() and audio=1)
       {
        Send ^+m
        audio=0
       }
   
   sleep 3500
}
return


ProcessExist(i) {
    Process, Exist, % i
    return ErrorLevel
}



IsAudioPlaying() {
    AudioLevel := 0.0
    VA_IAudioMeterInformation_GetPeakValue(VA_GetAudioMeter(), AudioLevel)
    return (Round(AudioLevel, 4) > 0)
}

VA_GetAudioMeter(device_desc="playback")
{
    if ! device := VA_GetDevice(device_desc)
        return 0
    VA_IMMDevice_Activate(device, "{C02216F6-8C67-4B5B-9D00-D008E73E0064}", 7, 0, audioMeter)
    ObjRelease(device)
    return audioMeter
}

VA_GetDevice(device_desc="playback")
{
    static CLSID_MMDeviceEnumerator := "{BCDE0395-E52F-467C-8E3D-C4579291692E}"
        , IID_IMMDeviceEnumerator := "{A95664D2-9614-4F35-A746-DE8DB63617E6}"
    if !(deviceEnumerator := ComObjCreate(CLSID_MMDeviceEnumerator, IID_IMMDeviceEnumerator))
        return 0
   
    device := 0
   
    if VA_IMMDeviceEnumerator_GetDevice(deviceEnumerator, device_desc, device) = 0
        goto VA_GetDevice_Return
   
    if device_desc is integer
    {
        m2 := device_desc
        if m2 >= 4096
        {
            ObjAddRef(device := m2)
            goto VA_GetDevice_Return
        }
    }
    else
        RegExMatch(device_desc, "(.*?)\s*(?::(\d+))?$", m)
   
    if m1 in playback,p
        m1 := "", flow := 0
    else if m1 in capture,c
        m1 := "", flow := 1
    else if (m1 . m2) = ""
        m1 := "", flow := 0
    else
        flow := 2
   
    if (m1 . m2) = ""
    {
        VA_IMMDeviceEnumerator_GetDefaultAudioEndpoint(deviceEnumerator, flow, 0, device)
        goto VA_GetDevice_Return
    }

    VA_IMMDeviceEnumerator_EnumAudioEndpoints(deviceEnumerator, flow, 1, devices)
   
    if m1 =
    {
        VA_IMMDeviceCollection_Item(devices, m2-1, device)
        goto VA_GetDevice_Return
    }
   
    VA_IMMDeviceCollection_GetCount(devices, count)
    index := 0
    Loop % count
        if VA_IMMDeviceCollection_Item(devices, A_Index-1, device) = 0
            if InStr(VA_GetDeviceName(device), m1) && (m2 = "" || ++index = m2)
                goto VA_GetDevice_Return
            else
                ObjRelease(device), device:=0

VA_GetDevice_Return:
    ObjRelease(deviceEnumerator)
    if (devices)
        ObjRelease(devices)
   
    return device ; may be 0
}

VA_GetDeviceName(device)
{
    static PKEY_Device_FriendlyName
    if !VarSetCapacity(PKEY_Device_FriendlyName)
        VarSetCapacity(PKEY_Device_FriendlyName, 20)
        ,VA_GUID(PKEY_Device_FriendlyName :="{A45C254E-DF1C-4EFD-8020-67D146A850E0}")
        ,NumPut(14, PKEY_Device_FriendlyName, 16)
    VarSetCapacity(prop, 16)
    VA_IMMDevice_OpenPropertyStore(device, 0, store)
 
    DllCall(NumGet(NumGet(store+0)+5*A_PtrSize), "ptr", store, "ptr", &PKEY_Device_FriendlyName, "ptr", &prop)
    ObjRelease(store)
    VA_WStrOut(deviceName := NumGet(prop,8))
    return deviceName
}

VA_WStrOut(ByRef str) {
    str := StrGet(ptr := str, "UTF-16")
    DllCall("ole32\CoTaskMemFree", "ptr", ptr)
}
VA_GUID(ByRef guid_out, guid_in="%guid_out%") {
    if (guid_in == "%guid_out%")
        guid_in :=   guid_out
    if  guid_in is integer
        return guid_in
    VarSetCapacity(guid_out, 16, 0)
    DllCall("ole32\CLSIDFromString", "wstr", guid_in, "ptr", &guid_out)
    return &guid_out
}
VA_IMMDevice_OpenPropertyStore(this, Access, ByRef Properties) {
    return DllCall(NumGet(NumGet(this+0)+4*A_PtrSize), "ptr", this, "uint", Access, "ptr*", Properties)
}
VA_IMMDevice_Activate(this, iid, ClsCtx, ActivationParams, ByRef Interface) {
    return DllCall(NumGet(NumGet(this+0)+3*A_PtrSize), "ptr", this, "ptr", VA_GUID(iid), "uint", ClsCtx, "uint", ActivationParams, "ptr*", Interface)
}
VA_IMMDeviceEnumerator_GetDevice(this, id, ByRef Device) {
    return DllCall(NumGet(NumGet(this+0)+5*A_PtrSize), "ptr", this, "wstr", id, "ptr*", Device)
}
VA_IMMDeviceEnumerator_GetDefaultAudioEndpoint(this, DataFlow, Role, ByRef Endpoint) {
    return DllCall(NumGet(NumGet(this+0)+4*A_PtrSize), "ptr", this, "int", DataFlow, "int", Role, "ptr*", Endpoint)
}
VA_IMMDeviceEnumerator_EnumAudioEndpoints(this, DataFlow, StateMask, ByRef Devices) {
    return DllCall(NumGet(NumGet(this+0)+3*A_PtrSize), "ptr", this, "int", DataFlow, "uint", StateMask, "ptr*", Devices)
}
VA_IMMDeviceCollection_GetCount(this, ByRef Count) {
    return DllCall(NumGet(NumGet(this+0)+3*A_PtrSize), "ptr", this, "uint*", Count)
}
VA_IMMDeviceCollection_Item(this, Index, ByRef Device) {
    return DllCall(NumGet(NumGet(this+0)+4*A_PtrSize), "ptr", this, "uint", Index, "ptr*", Device)
}
VA_IAudioMeterInformation_GetPeakValue(this, ByRef Peak) {
    return DllCall(NumGet(NumGet(this+0)+3*A_PtrSize), "ptr", this, "float*", Peak)
}
 
Volver