Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Usando una API con Visual Basic 6

Estas en el tema de Usando una API con Visual Basic 6 en el foro de Visual Basic clásico en Foros del Web. Hola. Tengo una duda con una API, se trata de waveOutSetVolume , para modificar el volumen del Wave del Windows. Cuando uso waveOutSetVolume de esta ...
  #1 (permalink)  
Antiguo 21/12/2004, 21:54
Avatar de Pip
Pip
 
Fecha de Ingreso: noviembre-2003
Ubicación: Málaga
Mensajes: 280
Antigüedad: 20 años, 5 meses
Puntos: 0
Usando una API con Visual Basic 6

Hola.

Tengo una duda con una API, se trata de waveOutSetVolume, para modificar el volumen del Wave del Windows. Cuando uso waveOutSetVolume de esta manera:

waveOutSetVolume 0, 0

No tengo problema, sin embargo si el parámetro del volumen (el segundo) es mayor de 0 (sin volumen), por ejemplo así:

waveOutSetVolume 0, 1
waveOutSetVolume 0, 25689
waveOutSetVolume 0, 65000

Entonces el balance se inclina al altavoz izquierdo por completo. ¿Alguien sabría decirme por qué y como prevenirlo?

Gracias de antemano.
__________________
por Pip
  #2 (permalink)  
Antiguo 22/12/2004, 01:48
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Si los parlantes son stereo los dos primeros bytes son los del parlante izquierdo y los dos últimos los del derecho, en este caso estas poniendo 65000 al izquierdo y 0 al derecho.

#define MAKELONG(a, b) ((LONG)(((WORD)((DWORD_PTR)(a) & 0xffff)) | ((DWORD)((WORD)((DWORD_PTR)(b) & 0xffff))) << 16))

Tendrías que conseguir este macro en VB.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 22/12/2004, 07:53
Avatar de Pip
Pip
 
Fecha de Ingreso: noviembre-2003
Ubicación: Málaga
Mensajes: 280
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola Eternal Idol, no sé usar bien esa macro, ya que no sé hacer macros en Visual Basic 6 pero tampoco en C. Y no conseguí, preguntando a otra gente, que me pasaran esta macro a vb6.

¿Existe alguna manera de poder conseguirlo sin esta macro? ¿Cómo es que pongo 65000 al izquierdo y 0 al derecho, en qué parte elijo el valor que le pongo al altavoz derecho en el balance?

Gracias por la ayuda.
__________________
por Pip

Última edición por Pip; 22/12/2004 a las 08:03
  #4 (permalink)  
Antiguo 22/12/2004, 08:55
Avatar de lic_dahool  
Fecha de Ingreso: noviembre-2003
Mensajes: 418
Antigüedad: 20 años, 6 meses
Puntos: 0
Te transcribo un codigo que puede serte útil:

Código:
'Example submitted by Danjel Nyberg
'It needs a textbox (Text1) and two command buttons (Command1, Command2)
Private Declare Function waveOutSetVolume Lib "Winmm" (ByVal wDeviceID As Integer, ByVal dwVolume As Long) As Integer
Private Declare Function waveOutGetVolume Lib "Winmm" (ByVal wDeviceID As Integer, dwVolume As Long) As Integer
Private Sub Command1_Click()
    Dim a, i As Long
    Dim tmp As String
    a = waveOutGetVolume(0, i)
    tmp = "&h" & Right(Hex$(i), 4)
    Text1 = CLng(tmp)
End Sub
Private Sub Command2_Click()
    Dim a, i As Long
    Dim tmp, vol As String
    vol = Text1
    tmp = Right((Hex$(vol + 65536)), 4)
    vol = CLng("&H" & tmp & tmp)
    a = waveOutSetVolume(0, vol)
End Sub
Saludos.
__________________
La cantidad total de inteligencia del planeta permanece constante.
La población, sin embargo, sigue aumentando.

COLE


:cool: Los ordenadores no resuelven problemas ... ejecutan soluciones.
Laurent Gasser


Tienes alguna duda :pensando: ? >>> www.google.com :aplauso: <<<
  #5 (permalink)  
Antiguo 22/12/2004, 16:44
Avatar de Pip
Pip
 
Fecha de Ingreso: noviembre-2003
Ubicación: Málaga
Mensajes: 280
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola lic_dahool.

Te agradezco que me pusieras el ejemplo. Lamentablemente no sé qué es lo que pretenden hacer con él. Es decir, usando un textbox y dos botones (cuyo único cometido es llamar a las funciones del ejemplo) no sé qué hacen. Yo he puesto el código del ejemplo de esta manera:


Código:
Dim a, i As Long
Dim vol,tmp As String

a = waveOutGetVolume(0, i)
tmp = "&h" & Right(Hex$(i), 4)
vol = CLng(tmp)
tmp = Right((Hex$(vol + 65536)), 4)
vol = CLng("&H" & tmp & tmp)
a = waveOutSetVolume(0, vol)
Lo que hace es bajarme el sonido al mínimo y el balance se queda centrado, pero esto ya sucede siempre que pongo el sonido al mínimo, es decir, con valor 0. He omitido el text porque no parece servir para nada más que para mostrar el valor del sonido... no entiendo la manera en la que esto funciona, la verdad.

Si puede alguien explicarme de qué depende el balance del wave, lo agradecería.
__________________
por Pip
  #6 (permalink)  
Antiguo 22/12/2004, 16:55
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Depende de la relación entre el valor de volumen de cada uno de los parlantes.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 22/12/2004, 17:12
Avatar de lic_dahool  
Fecha de Ingreso: noviembre-2003
Mensajes: 418
Antigüedad: 20 años, 6 meses
Puntos: 0
Lo que pretenden hacer con el TextBox es que cuando vos pones un valor ahi, presionando el Command2 el volumen se setea con el valor del Text.

Es simple, el codigo del Command1 te da el valor del volumen actual.

Con respecto al codigo del Command2, donde dice vol = Text1, ahí a la variable vol le das el valor que quieras y se establece el volumen (el master, es decir derecho e izquierdo juntos).

Saludos.
__________________
La cantidad total de inteligencia del planeta permanece constante.
La población, sin embargo, sigue aumentando.

COLE


:cool: Los ordenadores no resuelven problemas ... ejecutan soluciones.
Laurent Gasser


Tienes alguna duda :pensando: ? >>> www.google.com :aplauso: <<<
  #8 (permalink)  
Antiguo 23/12/2004, 03:25
Avatar de Pip
Pip
 
Fecha de Ingreso: noviembre-2003
Ubicación: Málaga
Mensajes: 280
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola de nuevo.

Ya me funciona (esto es lo principal para el caso), sin embargo, no tengo demasiado claro el por qué (tendré que mirar un poco más línea a línea). Así que muchas gracias a los dos, tu última respuesta, lic_dahool, me aclaró un poco más. Si le quiero poner un volumen de 45000 al sonido, se lo he de pasar como segundo parámetro a waveOutSetVolume como esto: -1345802296

Supongo que será cosa de las conversiones que hace a hexadecimal, esta es la parte que, aun funcionándome, no logro entender.

Lo dicho, muchas gracias a los dos, espero que mi torpeza sirva en el futuro para gente que tenga el mismo o parecido problema.
__________________
por Pip
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:44.