Página 1 de 1

Ayuda subir y bajar volumen de aplicaciones

Publicado: 20 May 2016, 04:51
por star871
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

Re: Ayuda subir y bajar volumen de aplicaciones

Publicado: 26 May 2016, 00:35
por Chefito
Mira este post del compañero wraithdu del foro ingles, que puede que te sirva: https://www.autoitscript.com/forum/topi ... er-volume/

Saludos.

Re: Ayuda subir y bajar volumen de aplicaciones

Publicado: 27 May 2016, 21:06
por star871
Chefito 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.
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!!!!!!!1

Re: Ayuda subir y bajar volumen de aplicaciones

Publicado: 30 May 2016, 01:53
por Chefito
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 :smt024 :smt003 .

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

Re: Ayuda subir y bajar volumen de aplicaciones

Publicado: 07 Jun 2016, 15:32
por Dany
Hola. Para lograr eso debes implementar WASAPI https://msdn.microsoft.com/en-us/librar ... s.85).aspx


Saludos :smt027