Hola a todos, quisiera saber si hay alguna manera de subir y bajar el volumen de aplicaciones de la pc, no necesito que me muestre nada, tan solo que baje progresivamente hasta 0 el volumen de una apli y suba progresivamente el volumen de otra hasta el maximo.
Ej: tengo abierto en la pc chrome y un programa "x" que reproduzca audio, necesitaria ver como bajar el volumen del chrome progresivamente y levantar el del programa "x" y hacer otro programa que realice lo mismo a la inversa, muchas gracias
Ayuda subir y bajar volumen de aplicaciones
- Chefito
- Profesional del Autoit
- Mensajes: 2035
- Registrado: 21 Feb 2008, 18:42
- Ubicación: Albacete/Cuenca (España)
Re: Ayuda subir y bajar volumen de aplicaciones
Mira este post del compañero wraithdu del foro ingles, que puede que te sirva: https://www.autoitscript.com/forum/topi ... er-volume/
Saludos.
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Re: Ayuda subir y bajar volumen de aplicaciones
Gracias Chefito por interesarte, igualmente lo habia visto a ese post, pero no se aplica a mi problema, porque con ese codigo se manejaria el volumen en general del sistema, pero no permite identificar a cada una de las fuentes de audio que estén presentes en ese momento y regularlas por separado, igual muchas gracias!!!!!!!1Chefito escribió:Mira este post del compañero wraithdu del foro ingles, que puede que te sirva: https://www.autoitscript.com/forum/topi ... er-volume/
Saludos.
- Chefito
- Profesional del Autoit
- Mensajes: 2035
- Registrado: 21 Feb 2008, 18:42
- Ubicación: Albacete/Cuenca (España)
Re: Ayuda subir y bajar volumen de aplicaciones
Mmmmmm...para eso seguramente deberías mirar la api que maneja el mezclador de sonido. Sería buscar funciones que traten el tema mixer (mixer=mezclador).
Si no te aclaras con esas apis me he entretenido en hacer una funciones que atacan la ventana de windows "Mezclador de volumen". He puesto un ejemplo que debería funcionar si hay dos programas que ejecutan dos sonidos al mismo tiempo. Este ejemplo baja y sube lentamente el volumen de los dos programas.
No es la forma más elegante, pero es la más fácil de comprender. Puede que algún día me entretenga con las apis de sonido .
El ejemplo están puestos los volúmenes que se almacen en la posición 1 y 2 del array. Parece que normalmente en la posición 0 del array se almacena el volumen del los "Sonidos del sistema", pero he podido comprobar que no siempre. Mirar la información de la consola que lanza el ejemplo y poner las posiciones de array bien.
Como en la segunda posición del la segunda dimensión del array se almacena el nombre de los volúmenes, se puede comprobar con las funciones de tratamiento de cadenas, el nombre de los volúmenes con los que se desea trabajar. Una vez localizados, solo debéis seleccionar éstos.
Como siempre, si tenéis alguna duda, comentarla.
Saludos.
Si no te aclaras con esas apis me he entretenido en hacer una funciones que atacan la ventana de windows "Mezclador de volumen". He puesto un ejemplo que debería funcionar si hay dos programas que ejecutan dos sonidos al mismo tiempo. Este ejemplo baja y sube lentamente el volumen de los dos programas.
No es la forma más elegante, pero es la más fácil de comprender. Puede que algún día me entretenga con las apis de sonido .
Código: Seleccionar todo
#include <WinAPIProc.au3>
#include <GuiSlider.au3>
infoVolumenes()
Local $aSlider=volumenesProgramas()
If @error Then
MsgBox(16, "Error", "Error al intentar conseguir los volumenes de los programas.")
Exit
EndIf
If UBound($aSlider)>2 Then
cambiarVolumen($aSlider[1][0], 100)
If @error Then
MsgBox(16, "Error", "Error al cambiar el volumen del primer programa.")
Exit
EndIf
cambiarVolumen($aSlider[2][0], 0)
If @error Then
MsgBox(16, "Error", "Error al cambiar el volumen del segundo programa.")
Exit
EndIf
For $n=1 To 100
cambiarVolumen($aSlider[1][0], 100-$n)
cambiarVolumen($aSlider[2][0], $n)
Sleep(50)
Next
cerrarMezclador()
Else
MsgBox(16, "Error", "No se han encontrados 2 o más volúmenes de programas.")
EndIf
; Devuelve un array con dos dimensiones. En la primera dimensión se almacena todos los volúmenes que hay en la ventana "Mezclador de volumen".
; La segunda dimensión tiene un tamaño fijo 2. En la primera posición se almacena el handle del control de volumen Slider de la ventana "Mezclador de volumen" (importante),
; en la segunda posición se almacena el nombre del programa al que pertenece el volumen.
Func volumenesProgramas()
Local $aSlider[0][2]
Local $numSlider = 1
Local $lanzarVolumen
Local $pidMezclador = ProcessExists("sndvol.exe")
If $pidMezclador=0 then
Local $pidMezclador = Run("sndvol.exe","", @SW_HIDE)
If @error Then Return SetError(1, 0, 0) ; Error. No puede ejecutar sndvol.exe. Devuelve @error=1 y la función 0.
WinWait("Mezclador de volumen")
EndIf
While 1
$hSlider=ControlGetHandle("Mezclador de volumen","","msctls_trackbar32" & $numSlider)
If @error Then ExitLoop
ReDim $aSlider[$numSlider][2]
$aSlider[$numSlider-1][0] = $hSlider
$aSlider[$numSlider-1][1] = ControlGetText("Mezclador de volumen", "", "Static" & (($numSlider * 2) + ($numSlider - 1)))
$numSlider += 1
WEnd
If UBound($aSlider)=0 Then Return SetError(2, 0, 0) ; Error. No encuentra ningún volumen. Devuelve @error=2 y la función 0.
Return $aSlider
EndFunc
; Cambia el valor del volumen del Slider que le pases a la función. El valor del volumen va de 0 a 100.
Func cambiarVolumen($hSlider, $valorVolumen)
Local $pidMezclador = ProcessExists("sndvol.exe")
If $pidMezclador=0 Then Return SetError(1, 0, 0) ; Si no existe el proceso sndvol.exe devuelve @error=1 y valor 0.
If IsHWnd($hSlider) = 0 Then Return SetError(2, 0, 0) ; Si $hSlider no es un handle devuelve @error=2 y valor 0.
Local $existeSlider
Local $posVolumen
_GUICtrlSlider_SetPos($hSlider, $posVolumen)
If $valorVolumen = 100 Then
_GUICtrlSlider_SetPos($hSlider, $posVolumen)
$lanzarVolumen = "{up}"
Else
$posVolumen = 99 - $valorVolumen
_GUICtrlSlider_SetPos($hSlider, $posVolumen)
$lanzarVolumen = "{down}"
EndIf
$existeSlider = ControlSend("Mezclador de volumen","",$hSlider, $lanzarVolumen)
If $existeSlider Then
Return 1
Else
Return SetError(3, 0, 0)
EndIf
EndFunc
; Te devuelve el valor del volumen especificado.
Func valorVolumen($hSlider)
If IsHWnd($hSlider) = 0 Then Return SetError(1, 0, 0)
Return 100 - _GUICtrlSlider_GetPos($hSlider)
EndFunc
; Te da información en la consola de los volúmenes que contines la ventana "Mezclador de volumen".
Func infoVolumenes()
Local $aSlider = volumenesProgramas()
If @error Then Return SetError(1, 0, 0) ; volumenesProgramas() devuelve un error.
For $n=0 To UBound($aSlider) - 1
ConsoleWrite("Indice array: " & $n & " >>> HANDLE DEL CONTROL DE SONIDO SLIDER: " & $aSlider[$n][0] & " >>> PERTENECE A: " & $aSlider[$n][1] & @cr)
Next
EndFunc
; Mata el proceso SndVol.exe si lo ha abierto la función volumenesProgramas(). Sabe esta situación porque comprueba si está visible la ventana "Mezclador de volumen".
Func cerrarMezclador()
If BitAND(WinGetState("Mezclador de volumen", ""), 2) = 0 Then
ProcessClose("SndVol.exe")
EndIf
EndFunc
Como en la segunda posición del la segunda dimensión del array se almacena el nombre de los volúmenes, se puede comprobar con las funciones de tratamiento de cadenas, el nombre de los volúmenes con los que se desea trabajar. Una vez localizados, solo debéis seleccionar éstos.
Como siempre, si tenéis alguna duda, comentarla.
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Re: Ayuda subir y bajar volumen de aplicaciones
Hola. Para lograr eso debes implementar WASAPI https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Saludos
Saludos
- ............................................
......................................