VB ajusta el código de volumen de una determinada música
Te doy un ejemplo de cómo ajustar el volumen
'establecer amplificador de volumen silenciar o no
'autor: Hailong
' correo: hailongxl@21cn.com
'qq: 281131020
'msn: antiTears@hotmail.com
'sitio web:
'date:2006-03-28
Opción explícita
Función de declaración privada MixerGetNumDevs Lib "winmm.dll" () Siempre
Función de declaración privada GlobalLock Lib "kernel32" (ByVal hMem As Long) Mientras
Función de declaración privada MixerClose Lib "winmm.dll" (ByVal hmx As Long) Mientras
Función de declaración privada GlobalFree Lib " kernel32 " (ByVal hMem As Long) Mientras
Función de declaración privada GlobalUnlock Lib "kernel32" (ByVal hMem As Long) Mientras
Función de declaración privada GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Declaración privada Sub CopyPtrFromStruct Lib "kernel32" Alias "RtlMoveMemory" (ByVal ptr As Long, struct As Any, ByVal cb As Long)
Sub declaración privada CopyStructFromPtr Lib "kernel32" Alias "RtlMoveMemory" (estructura como cualquier, ByVal ptr As Long, ByVal cb As Long)
Función de declaración privada MixerSetControlDetails Lib "winmm.dll" (ByVal hmxobj Mientras
Declaración privada
Función MixerGetDevCaps Lib "winmm.dll" Alias "mixerGetDevCapsA" (ByVal uMxId As Long, pmxcaps As MIXERCAPS, ByVal cbmxcaps As Long) As Long
Función de declaración privada MixerOpen Lib "winmm.dll" (phmx Mientras, ByVal uMxId Mientras, ByVal dwCallback Mientras, ByVal dwInstance Mientras, ByVal fdwOpen Mientras) Mientras
Función de declaración privada MixerGetLineControls Lib "winmm.dll" Alias "mixerGetLineControlsA" (ByVal hmxobj Mientras, pmxlc Como MIXERLINECONTROLS, ByVal fdwControls Mientras) Mientras
Función de declaración privada mezcladorGetControlDetails Lib "winmm.dll" Alias "mixerGetControlDetailsA" (ByVal hmxobj Mientras, pmxcd Como MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long
Const privada MAXPNAMElen = 32 ' longitud máxima del nombre del producto (incluido NULL)
Const privada MMSYSERR_NOERROR = 0 ' sin error
Const privada GMEM_ZEROINIT = amp; H40
Const privada CALLBACK_WINDOW = H10000 ' dwCallback es un HWND
Const privada MIXER_OBJECTF_MIXER = H0amp
Const privada MIXER_LONG_NAME_CHARS = 64
Const privada MIXER_SHORT_NAME_CHARS = 16
Const privada MIXER_GETLINEINFOF_SOURCE = amp; =amp;H0amp
Const privada MIXER_GETCONTROLDETAILSF_VALUE = amp; Constante MIXERCONTROL_CT_UNITS_BOOLEAN = a
mp; H10000
Const privada MIXER_GETLINECONTROLSF_ONEBYTYPE = amp; CT_SC_SWITCH_BOOLEAN = H0amp;
Const privada MIXERLINE_COMPONENTTYPE_DST_FIRST = H0amp;
Const privada MIXERCONTROL_CT_CLASS_SWITCH = & H20000000
Const privada MIXER_OBJECTF_HMIXER = (MIXER_OBJECTF_HANDLE Or MIXER_OBJECTF _MEZCLADOR)
Const privada MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER o MIXERCONTROL_CT_UNITS_UNSIGNED)
Const privada MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER 1)
Const privada TYPE_BOOLEAN = (MIXERCONTROL_CT_CLASS_SWITCH O MIXERCONTROL_CT_SC_SWITCH_BOOLEAN O MIXERCONTROL_CT_UNITS_BOOLEAN)
Const privada MIXERCONTROL_CONTROLTYPE_MUTE = (MIXERCONTROL_ CONTROLTYPE_BOOLEAN 2)
Const privada MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST 4)
Tipo privado MIXERCONTROLDETAILS_SIGNED
lValor Siempre y cuando
Tipo de fin
Tipo privado MIXERCONTROLDETAILS_BOOLEAN
fValor As Long
Tipo de fin
''''''''' '''''''''''''''''''' ''''''''''
'Tipo autodefinido
Tipo privado MIXERCONTROLD
ETAILS_SIGNED_ARRAY_2
v1 Como MIXERCONTROLDETAILS_SIGNED
v2 Como MIXERCONTROLDETAILS_SIGNED
Tipo de extremo
''''''''''' ''''''''''''''''''''''''''''
Tipo privado MIXERCONTROLDETAILS
cbStruct As Long ' tamaño en bytes de MIXERCONTROLDETAILS
dwControlID As Long ' ID de control para obtener/establecer detalles en
cChannels As Long ' número de canales en la matriz paDetails
item As Long ' hwndOwner o cMultipleItems
cbDetails As Long ' tamaño de _una_ estructura detalles_XX
paDetails As Long ' puntero a una matriz de estructuras detalles_XX
Tipo de fin
Tipo privado MIXERCAPS
wMid As Integer ' ID del fabricante
wPid As Integer ' ID del producto
vDriverVersion As Long ' versión del controlador
szPname As String * MAXPNAMElen ' nombre del producto
fdwSupport As Long ' bits de soporte varios
cDestinations As Long ' recuento de destinos
<. p>Tipo finalTipo privado Target ' para uso en MIXERLINE y otros (estructura integrada)
dwType As Long ' MIXERLINE_TARGETTYPE_xxxx
dwDeviceID As Long ' dispositivo de destino ID del tipo de dispositivo
wMid As Integer ' del dispositivo de destino
wPid As Integer ' "
vDriverVersion As Long ' "
szPname Como cadena * MAXPNAMElen
Tipo final
Tipo privado MIXERCONTROL
cbStruct As Long ' tamaño en bytes de MIXERCONTROL
dwControlID As Long ' co único
ID de control para el dispositivo mezclador
dwControlType As Long ' MIXERCONTROL_CONTROLTYPE_xxx
fdwControl As Long ' MIXERCONTROL_CONTROLF_xxx
cMultipleItems As Long ' si MIXERCONTROL_CONTROLF_MULTIPLE está configurado
szShortName As String * MIXER_SHORT_NAME_CHARS
szName As String * MIXER_LONG_NAME_CHARS
Bounds(1 To 6) As Long ' Miembro más largo de la unión Bounds
Métricas(1 a 6) As Long ' Miembro más largo de la unión de Métricas
Tipo final
Tipo privado MIXERLINECONTROLS
cbStruct As Long ' tamaño en bytes de MIXERLINECONTROLS
dwLineID As Long ' ID de línea (de MIXERLINE.dwLineID)
' MIXER_GETLINECONTROLSF_ONEBYID o
dwControl As Long ' MIXER_GETLINECONTROLSF_ONEBYTYPE
cControls As Long ' recuento de controla pmxctrl apunta a
cbmxctrl As Long ' tamaño en bytes de _one_ MIXERCONTROL
pamxctrl As Long ' puntero a la primera matriz MIXERCONTROL
Tipo de fin
Tipo privado MIXERLINE
cbStruct As Long ' tamaño de la estructura MIXERLINE
dwDestination As Long ' índice de destino basado en cero
dwSource As Long ' fuente basada en cero índice (si es fuente)
dwLineID As Long ' ID de línea única para el dispositivo mezclador
fdwLine As Long ' estado/información sobre la línea
dwUser As Long ' controlador información específica
dwComponentType As Long ' la línea de tipo de componente se conecta a
cChannels As Long ' número de c
La línea de canales admite
cConnections As Long ' número de conexiones (posibles)
cControls As Long ' número de controles en esta línea
szShortName As String * MIXER_SHORT_NAME_CHARS
szName As String * MIXER_LONG_NAME_CHARS
tTarget As Target
Tipo de finalización
'Volumen máximo y mínimo
Privado m_lMax As Long, m_lMin As Long
'Abrir identificador de dispositivo
Privado m_hMixer As Long
'Número de dispositivo GetDevNum
Privado m_lDeviceNum As Long
'ID del dispositivo
Privado m_lDeviceID As Long
'Función del dispositivo GetDevCaps
Privado m_Caps como MIXERCAPS
'Abra el dispositivo para ajustar el volumen
Función pública OpenDeviceForVolume() As Boolean
OpenDeviceForVolume = False
'El número total de mezcladores en el sistema
Si (mixerGetNumDevs() lt; gt; 0) Entonces
'Abrir dispositivo
Si mezcladorOpen(m_hMixer, 0, 0, 0, MIXER_OBJECTF_MIXER o CALLBACK_WINDOW) lt; gt; MMSYSERR_NOERROR Entonces
Salir de la función
Finalizar si
'Obtener capacidades del dispositivo
Si mezcladorGetDevCaps(m_hMixer, m_Caps, Len (m_Caps )) lt;gt; MMSYSERR_NOERROR Entonces
Salir de la función
Finalizar si
Finalizar si
'Si la apertura falla
Si m_hMixer = 0, entonces salga de la función
Atenuar mxl como MIXERLINE
Atenuar mxc como MIXERCONTROL
Atenuar mxlc como MIXERLINECONTROLS
Atenuar hMem siempre que
hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxc))
mxl.cbStruct = Len(mxl)
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
Si mezcladorGetLineInfo(m_hMixer, m
xl( .cbStruct = Len(mxlc)
mxlc.dwLineID = mxl.dwLineID
mxlc.dwControl = MIXERCONTROL_CONTROLTYPE_VOLUME
mxlc.cControls = 1
mxlc.cbmxctrl = Len(mxc)
mxlc.pamxctrl = GlobalLock(hMem)
Si mezcladorGetLineControls(m_hMixer, mxlc, MIXER_OBJECTF_HMIXER O MIXER_GETLINECONTROLSF_ONEBYTYPE) lt; Luego
GlobalUnlock hMem
GlobalFree hMem
Función de salida
Finalizar si
CopyStructFromPtr mxc, mxlc.pamxctrl , Len (mxc)
m_lDeviceID = mxc.dwControlID
m_lMin = mxc.Bounds(1)
m_lMax = mxc.Bounds(2)
GlobalUnlock hMem
GlobalFree hMem
OpenDeviceForVolume = True
Finalizar función
'Abrir el dispositivo para silenciar
Función pública OpenDeviceForMute() como booleana
OpenDeviceForMute = False
'No entiendo
If (mixerGetNumDevs() lt; gt; 0 ) Luego
p>'Abrir dispositivo
Si mezcladorOpen(m_hMixer, 0, 0, 0, MIXER_OBJECTF_MIXER Or CALLBACK_WINDOW) lt;gt MMSYSERR_NOERROR Entonces
Salir Función
End If
'Obtener capacidades del dispositivo
If MixerGetDevCaps(m_hMixer, m_Caps, Len(m_Caps)) lt MMSYSERR_NOERROR Then
Salir de la función
Finalizar si
Fin si
'Si la apertura falla
Si m_hMixer = 0 Entonces salir de la función
Dim mxl Como MEZCLA
RLINE
Atenuar mxc como MIXERCONTROL
Atenuar mxlc como MIXERLINECONTROLS
Atenuar hMem mientras
hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxc ; MMSYSERR_NOERROR Entonces
Salir de la función
Finalizar si
m_lDeviceNum = mxl.cChannels
mxlc.cbStruct = Len(mxlc)
p>
mxlc.dwLineID = mxl.dwLineID
mxlc.dwControl = MIXERCONTROL_CONTROLTYPE_MUTE
mxlc.cControls = 1
mxlc .cbmxctrl = Len(mxc )
mxlc.pamxctrl = GlobalLock(hMem)
Si mezcladorGetLineControls(m_hMixer, mxlc, MIXER_OBJECTF_HMIXER o MIXER_GETLINECONTROLSF_ONEBYTYPE) lt;gt; MMSYSERR_NOERROR Entonces
GlobalUnlock hMem
GlobalFree hMem
Función de salida
Finalizar si
CopyStructFromPtr mxc, mxlc.pamxctrl, Len(mxc)
m_lDeviceID = mxc.dwControlID
GlobalUnlock hMem
GlobalFree hMem
OpenDeviceForMute = True
Fin de función
'Cerrar el dispositivo abierto
Función pública CloseDevice() como booleano
CloseDevice = False
Si m_hMixer lt;gt;
mixerClose m_hMixer
m_hMixer = 0
Finalizar si
CloseDevice = True
Finalizar función
' Configuración del volumen
Función pública SetVolume(ByVal lVol As Long, ByVal rVol As Long) Como Boole
an
SetVolume = False
'Si el dispositivo no está abierto
Si m_hMixer = 0, entonces salga de la función
Atenuar mxcdVolume como MIXERCONTROLDETAILS_SIGNED_ARRAY_2
p>
Atenuar mxcd como MIXERCONTROLDETAILS
Atenuar hMem mientras
hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxcdVolume))
mxcdVolume.v1.lValue = lVol
mxcdVolume.v2.lValue = rVol
mxcd.cbStruct = Len(mxcd)
mxcd.dwControlID = m_lDeviceID
mxcd.cChannels = m_lDeviceNum
mxcd.item = 0
mxcd.cbDetails = Len(mxcdVolume.v1)
mxcd. paDetails = GlobalLock(hMem)
CopyPtrFromStruct mxcd.paDetails, mxcdVolume, Len(mxcdVolume)
Si mezcladorSetControlDetails(m_hMixer, mxcd, MIXER_OBJECTF_HMIXER o MIXER_SETCONTROLDETAILSF_VALUE) lt; MMSYSERR_NOERROR Entonces
p >GlobalUnlock (hMem)
GlobalFree (hMem)
Función de salida
Finalizar si
GlobalUnlock (hMem)
GlobalFree (hMem)
SetVolume = True
Función final
'Obtener el volumen actual
Función pública GetVolume(ByRef lVol As Long, ByRef rVol As Long) Como booleano
GetVolume = False
lVol = -1
rVol = -1
'Si el dispositivo no está encendido
Si m_hMixer = 0, entonces salga de la función
Atenuar mxcdVolume como MIXERCONTROLDETAILS_SIGNED_ARRAY_2
Atenuar mxcd como MIXERCONTROLDETAILS
Atenuar hMem siempre que
hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxcdVolume))
mxcd.cbStruct = Len(mxcd)
mxcd. dwControlID = m_lDevic
eID
mxcd.cChannels = m_lDeviceNum
mxcd.item = 0
mxcd.cbDetails = Len(mxcdVolume.v1)
mxcd .paDetails = GlobalLock(hMem)
Si mezcladorGetControlDetails(m_hMixer, mxcd, MIXER_OBJECTF_HMIXER o MIXER_GETCONTROLDETAILSF_VALUE) lt;gt MMSYSERR_NOERROR Entonces
GlobalUnlock (hMem)
GlobalFree (hMem)
Función de salida
End If
CopyStructFromPtr mxcdVolume, mxcd.paDetails, Len(mxcdVolume)
lVol = mxcdVolume. v1.lValue
Si m_lDeviceNum = 2 Entonces
rVol = mxcdVolume.v2.lValue
Finalizar si
GlobalUnlock (hMem)
GlobalFree (hMem)
GetVolume = True
Función final
'Obtener el estado de silencio actual
Público Función GetMute(ByRef bMute As Boolean) Como booleano
GetMute = False
Si m_hMixer = 0, entonces salga de la función
Atenuar mxcdMute como MIXERCONTROLDETAILS_BOOLEAN
Atenuar mxcd como MIXERCONTROLDETAILS
mxcd.cbStruct = Len(mxcd)
mxcd.dwControlID = m_lDeviceID
mxcd.cChannels = 1
mxcd.item = 0
mxcd.cbDetails = Len(mxcdMute)
mxcd.paDetails = VarPtr(mxcdMute)
Si mezcladorGetControlDetails(m_hMixer, mxcd , MIXER_OBJECTF_HMIXER o MIXER_GETCONTROLDETAILSF_VALUE) lt;gt; MMSYSERR_NOERROR Entonces
Salir de la función
Finalizar si
Si mxcdMute.fValue lt;gt;
bMute = True
Else
bMute = False
Finalizar si
GetMute = True
Función final
en
'Set Mute
'El parámetro es si silenciar o no
Función pública SetMute(ByVal bMute As Boolean) As Boolean
.SetMute = False
Si m_hMixer = 0, entonces salga de la función
Atenuar hMem mientras
Atenuar mxcdMute como MIXERCONTROLDETAILS_BOOLEAN
Atenuar mxcd Como MIXERCONTROLDETAILS
mxcdMute.fValue = IIf(bMute, 1, 0)
hMem = GlobalAlloc(GMEM_ZEROINIT, Len(mxcdMute.fValue))
mxcd .cbStruct = Len (mxcd)
mxcd.dwControlID = m_lDeviceID
mxcd.cChannels = 1
mxcd.item = 0
mxcd.cbDetails = Len(mxcdMute)
mxcd.paDetails = GlobalLock(hMem)
CopyPtrFromStruct mxcd.paDetails, mxcdMute, Len(mxcdMute)
Si mezcladorSetControlDetails (m_hMixer, mxcd, MIXER_OBJECTF_HMIXER o MIXER_SETCONTROLDETAILSF_VALUE) lt;gt; MMSYSERR_NOERROR Luego
GlobalUnlock hMem
GlobalFree hMem
Salir de la función
Fin Si
GlobalUnlock hMem
GlobalFree hMem
SetMute = True
End Function
'Obtener el volumen máximo
Función pública GetMaxVolume() siempre que
GetMaxVolume = IIf(m_hMixer = 0, -1, m_lMax)
Función final
'Obtener el volumen mínimo
Función pública GetMinVolume() siempre
GetMinVolume = IIf(m_hMixer = 0, -1, m_lMin)
Función final
Subclase privada_Initialize()
m_hMixer = 0
m_lMax = -1
m_lMin = -1
Fin Sub