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