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)
 

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

Preguntas similares