detectar nivel de sonido

10/12/2007 - 04:26 por Ivan | Informe spam
hola a todos,

no es una consulta exactamente de excel, pero si es para implementarla
en excel.

tengo unos codigos (factoria HM por diversas respuestas del foro) que
mediante alguna API permite escuchar musica y activar/desactivar el
sonido. A la vez he ¿conseguido? subir y bajar el volumen mediante una
de estas apis y un scrollbar

el problema me viene de que con la forma que estoy usando para cambiar
el volumen me funciona, pero no mantiene una relacion real con el
volumen del equipo. A ver si logro explicarme

llamo a la api [ al final expongo los codigos] desde un scrollbar
tantas veces como el valor de este ha sido modificado. Si el scrollbar
disminuye bajo el volumen si aumenta subo. El problema es que sipej.
lo subo al maximo no consigo relacionar el max del scrollbar con el
max real del equipo, con lo que cuando empiezo a bajarlo, no mantiene
la misma relacion, sino que a lo mejor en mitad del scroll me lo deja
sin volumen, t viceversa.

bueno no se si se entiende, pero aqui van los codigos por si veis
alguna forma mejor de hacerlo

en un modulo normal:

''***********************************************
'
Public Const Archivo As String = "C:\BIBLIOTECA_de_MANUEL\MUSICA
\La_Novena.wma"
' la llamada a las API's del MediaManager '
Private Declare Function UsarWinMedia _
Lib "winmm.dll" Alias "mciExecute" ( _
ByVal Comando As String) As Long
' la llamada a las API's para modificar el sonido via teclado
Private Declare Sub Volumen Lib "User32" Alias "keybd_event" ( _
ByVal Modo As Byte, ByVal Monitor As Byte, ByVal Estado As Long, _
ByVal Inf_Extra As Long)
'
Sub test_Bajar_Volumen_sonido()
Volumen &HAE, 0, 1, 0
End Sub
'
Sub test_Subir_Volumen_sonido()
Volumen &HAF, 0, 1, 0
End Sub
'
Public Sub Oir_Musica()
Volumen &HAD, 0, 1, 0
UsarWinMedia "Play " & Archivo
Volumen &HAD, 0, 1, 0
End Sub
'
Public Sub Acabar_Musica()
On Error Resume Next
UsarWinMedia "Stop " & Archivo
Volumen &HAD, 0, 1, 0
Exit Sub
End Sub
'
Public Sub CambiarVolumen(VolumenInicial As Double, VolumenFinal As
Double)
Dim n As Integer
If VolumenFinal > VolumenInicial Then
For n = 1 To (VolumenFinal - VolumenInicial)
test_Subir_Volumen_sonido
Next
ElseIf VolumenFinal < VolumenInicial Then
For n = 1 To (VolumenInicial - VolumenFinal)
test_Bajar_Volumen_sonido
Next
Else
End If
End Sub
'****************************************************

'en el modulo del formulario

'***************************************************
'
Private Sub cmdStop_Click()
Acabar_Musica
End Sub
'
Private Sub cmdPlay_Click()
Oir_Musica
End Sub
'
Private Sub ScrollBar1_Change()
Dim vol1 As Double
vol1 = Val(TextBox1.Value)
TextBox1.Value = ScrollBar1.Value
CambiarVolumen vol1, ScrollBar1.Value
End Sub
'
Private Sub UserForm_Initialize()
With ScrollBar1
.Min = 0: .Max = 50: .Value = 10
End With
End Sub
'********************************************

bueno, gracias de antemano

un saludo
Ivan

PD: para probarlo: un userform con 2 commandbutton llamados=> cmdPlay
y cmdStop
un textbox(textbox1) y un scrollbar (scrollbar1)

Preguntas similare

Leer las respuestas

#1 Ivan
10/12/2007 - 04:34 | Informe spam
hola de nuevo,

un datoque se me olvidabaa.

en oir musica y acabar_musica incluyo una llamada a la api 'volumen'
para activar al sonido, pues yo suelo tenerlo desactivado pero si no
es asi estas instrucciones hay que quitarlas

Public Sub Oir_Musica()
Volumen &HAD, 0, 1, 0
UsarWinMedia "Play " & Archivo
Volumen &HAD, 0, 1, 0
End Sub
'
Public Sub Acabar_Musica()
On Error Resume Next
UsarWinMedia "Stop " & Archivo
Volumen &HAD, 0, 1, 0
Exit Sub
End Sub




un saludo
Ivan
Respuesta Responder a este mensaje
#2 Héctor Miguel
10/12/2007 - 08:51 | Informe spam
hola, Ivan !

1) aparentemente, la falta de "sincronizacion" entre el scrollbar y el volumen del dispositivo...
viene desde que inicializas los controles de tu formulario, donde hace falta averiguar los dos detalles "desconocidos":
a) cual es el valor del volumen "maximo" (para establecerlo como el .Max de tu ScrollBar1) y
b) cual es el valor del volumen "actual" (real) (para establecerlo como el .Value de tu ScrollBar1)

2) esta es una tarea de "bucear" (al menos, un poquitin) ya que pocas veces ha sido tratada/expuesta/... en los foros :-((
con base en el siguiente articulo de la MS-KB...
SAMPLE: Volume.exe: Set Volume Control Levels Using Visual Basic
http://support.microsoft.com/defaul...-us;178456
-> revisa estas conversaciones: -> http://tinyurl.com/acflt
(pon especial atencion a los mensajes 7 y 11)

3) seguramente la "buceada" resulte... "interesante/extenuante/..." asi que...

si cualquier duda... comentas ?
saludos,
hector.

__ la consulta original __
tengo unos codigos... que mediante alguna API permite escuchar musica y activar/desactivar el sonido.
A la vez he conseguido? subir y bajar el volumen mediante una de estas apis y un scrollbar
el problema me viene de que con la forma que estoy usando para cambiar el volumen me funciona
pero no mantiene una relacion real con el volumen del equipo. A ver si logro explicarme...
... Si el scrollbar disminuye bajo el volumen si aumenta subo.
El problema es que sipej. lo subo al maximo no consigo relacionar el max del scrollbar con el max real del equipo
... cuando empiezo a bajarlo, no mantiene la misma relacion, sino que a lo mejor en mitad del scroll me lo deja sin volumen, y viceversa...
bueno no se si se entiende, pero aqui van los codigos por si veis alguna forma mejor de hacerlo. en un modulo normal:



''***********************************************
Public Const Archivo As String = "C:\BIBLIOTECA_de_MANUEL\MUSICA\La_Novena.wma"
' la llamada a las API's del MediaManager '
Private Declare Function UsarWinMedia _
Lib "winmm.dll" Alias "mciExecute" ( _
ByVal Comando As String) As Long
' la llamada a las API's para modificar el sonido via teclado
Private Declare Sub Volumen Lib "User32" Alias "keybd_event" ( _
ByVal Modo As Byte, ByVal Monitor As Byte, ByVal Estado As Long, _
ByVal Inf_Extra As Long)
'
Sub test_Bajar_Volumen_sonido()
Volumen &HAE, 0, 1, 0
End Sub
'
Sub test_Subir_Volumen_sonido()
Volumen &HAF, 0, 1, 0
End Sub
'
Public Sub Oir_Musica()
Volumen &HAD, 0, 1, 0
UsarWinMedia "Play " & Archivo
Volumen &HAD, 0, 1, 0
End Sub
'
Public Sub Acabar_Musica()
On Error Resume Next
UsarWinMedia "Stop " & Archivo
Volumen &HAD, 0, 1, 0
Exit Sub
End Sub
'
Public Sub CambiarVolumen(VolumenInicial As Double, VolumenFinal As Double)
Dim n As Integer
If VolumenFinal > VolumenInicial Then
For n = 1 To (VolumenFinal - VolumenInicial)
test_Subir_Volumen_sonido
Next
ElseIf VolumenFinal < VolumenInicial Then
For n = 1 To (VolumenInicial - VolumenFinal)
test_Bajar_Volumen_sonido
Next
Else
End If
End Sub
'****************************************************
'en el modulo del formulario
'***************************************************
'
Private Sub cmdStop_Click()
Acabar_Musica
End Sub
'
Private Sub cmdPlay_Click()
Oir_Musica
End Sub
'
Private Sub ScrollBar1_Change()
Dim vol1 As Double
vol1 = Val(TextBox1.Value)
TextBox1.Value = ScrollBar1.Value
CambiarVolumen vol1, ScrollBar1.Value
End Sub
'
Private Sub UserForm_Initialize()
With ScrollBar1
.Min = 0: .Max = 50: .Value = 10
End With
End Sub
'********************************************
PD: para probarlo: un userform con 2 commandbutton llamados=> cmdPlay y cmdStop un (textbox1) y un (scrollbar1)
Respuesta Responder a este mensaje
#3 Ivan
10/12/2007 - 10:38 | Informe spam
hola Hector, como siempre gracias de nuevo (tambien por las apis ya
expuestas)


1) aparentemente, la falta de "sincronizacion" entre el scrollbar y el volumen del dispositivo...
viene desde que inicializas los controles de tu formulario, donde hace falta averiguar los dos detalles "desconocidos":
a) cual es el valor del volumen "maximo" (para establecerlo como el .Max de tu ScrollBar1) y
b) cual es el valor del volumen "actual" (real) (para establecerlo como el .Value de tu ScrollBar1)




efectivamente, estos eran los dos problemas fundamentasles, como
sincronizar scrollbar y 'realidad'


2) esta es una tarea de "bucear" (al menos, un poquitin) ya que pocas veces ha sido tratada/expuesta/... en los foros :-((
con base en el siguiente articulo de la MS-KB...
SAMPLE: Volume.exe: Set Volume Control Levels Using Visual Basic
http://support.microsoft.com/defaul...-us;178456
-> revisa estas conversaciones: ->http://tinyurl.com/acflt
(pon especial atencion a los mensajes 7 y 11)

3) seguramente la "buceada" resulte... "interesante/extenuante/..." asi que...




me voy a poner el traje de neopreno, y si logro volver a la superficie
te comento...

gracias de nuevo y un saludo
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida