Para obtener el volumen de los altavoces utilizamos función GetVolume() que retorna una cadena Hexadecimal, donde los 4 primeros caracteres (sin el "0x") es el correspondiente al altavoz derecho, y los siguientes 4 corresponden al altavoz izquierdo.
En el siguiente ejemplo transformamos la cadena retornada para obtener el porcentaje de volumen de cada altavoz.
lcHex = GetVolume()
*-- % volumen altavoz izquierdo
lnIzq = CEILING(BITAND(EVALUATE(lcHex),0xFFFF)*100/0xFFFF)
*-- % volumen altavoz derecho
lnDer = CEILING((BITAND(EVALUATE(lcHex),0xFFFF0000)/0x10000)*100/0xFFFF)
? lcHex && cadena hexadecimal
? lnIzq && porcentaje volumen altavoz izquierdo
? lnDer && porcentaje volumen altavoz derecho
*---------------------------------------------------
* FUNCTION GetVolume()
*---------------------------------------------------
* Toma el valor de volumen de los altavoces de la PC
* RETORNO: Caracter (cadena de caracteres hexadecimal)
* USO: GetVolume()
*---------------------------------------------------
FUNCTION GetVolume()
LOCAL ln
DECLARE INTEGER waveOutGetVolume IN Winmm ;
INTEGER wDeviceID, ;
INTEGER @ dwVolume
ln = 0x0000
=waveOutGetVolume(0,@ln)
RETURN TRANSFORM(ln,";@0")
ENDFUNC
*---------------------------------------------------
Para ajustar el volumen de los altavoces utilizamos la función SetVolume() pasandole como parámetro el porcentaje de cada altavoz (izquierdo y derecho).
En el siguiente ejemplo ajustamos el volumen al 75% cada altavoz.
? SetVolume(75,75)
*---------------------------------------------------
* FUNCTION SetVolume(tnIzq, tnDer)
*---------------------------------------------------
* Configura el volumen de los altavoces de la PC
* PARAMETROS:
* tnIzq = Porcentaje de volumen altavoz izquierdo
* tnDer = Porcentaje de volumen altavoz derecho
* RETORNO: Logico .T. si pudo configurar
* USO: SetVolume(50,50)
*---------------------------------------------------
FUNCTION SetVolume(tnIzq, tnDer)
LOCAL lnVol
DECLARE INTEGER waveOutSetVolume IN Winmm ;
INTEGER wDeviceID, ;
INTEGER dwVolume
tnIzq = MAX(0,MIN(tnIzq,100))
tnDer = MAX(0,MIN(tnDer,100))
lnVol = EVALUATE("0x" + ;
RIGHT(TRANSFORM(tnDer*0xFFFF/100,";@0"),4) + ;
RIGHT(TRANSFORM(tnIzq*0xFFFF/100,";@0"),4))
RETURN 0 = waveOutSetVolume(0,lnVol)
ENDFUNC
*---------------------------------------------------
Nota: El control de volumen con las funciones de la API waveOutSetVolume y waveOutGetVolume de este ejemplo solo trabajan para el tipo Onda (Wave) y no sobre el control de volumen general del sistema.
Luis María Guayán