Mixer




'save file and rename them to [name].BAS

Attribute VB_Name = "MIXER"
'***********************************************************

'* This constant holds the value of the Highest Custom

'* volume setting. lowest value will always be zero.

'***********************************************************


Public Const HIGHEST_VOLUME_SETTING = 12
'Put these into a module

'device ID for aux device mapper

Public Const AUX_MAPPER = -1&
Public Const MAXPNAMELEN = 32

Type AUXCAPS
wMid As Integer
wPid As Integer
vDriverVersion As Long
szPname As String * MAXPNAMELEN
wTechnology As Integer
dwSupport As Long
End Type

'flags for wTechnology field in AUXCAPS structure


Public Const AUXCAPS_CDAUDIO = 1 ' audio from internal CD-ROM drive
Public Const AUXCAPS_AUXIN = 2 ' audio from auxiliary input jacks
'flags for dwSupport field in AUXCAPS structure

Public Const AUXCAPS_VOLUME = &H1 ' supports volume control
Public Const AUXCAPS_LRVOLUME = &H2 ' separate left-right volume control
Declare Function auxGetNumDevs Lib "winmm.dll" () As Long
Declare Function auxGetDevCaps Lib "winmm.dll" Alias "auxGetDevCapsA" _
(ByVal uDeviceID As Long, lpCaps As AUXCAPS, ByVal uSize As Long) As Long
Declare Function auxSetVolume Lib "winmm.dll" _
(ByVal uDeviceID As Long, ByVal dwVolume As Long) As Long
Declare Function auxGetVolume Lib "winmm.dll" _
(ByVal uDeviceID As Long, ByRef lpdwVolume As Long) As Long
Declare Function auxOutMessage Lib "winmm.dll" (ByVal uDeviceID As Long, _
ByVal msg As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long
'*******************************************************

'* Possible Return values from auxGetVolume, auxSetVolume

'*******************************************************

Public Const MMSYSERR_NOERROR = 0
Public Const MMSYSERR_BASE = 0
Public Const MMSYSERR_BADDEVICEID = (MMSYSERR_BASE + 2)
'*******************************************************

'* Use the CopyMemory function from the Windows API *

'*******************************************************

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
'*******************************************************

'* Use this structure to break the Long into two Integers

'*******************************************************

Public Type VolumeSetting
LeftVol As Integer
RightVol As Integer
End Type
Sub lCrossFader()
'Vol1 = 100 - Slider1.Value ' Left

'Vol2 = 100 - Slider5.Value ' Right

'E = CrossFader.Value

'F = 100 - E

'If Check4.Value = 1 Then ' Half Fader Check

' LVol = (F * Val(Vol1) / 100) * 2

' RVol = (E * Val(Vol2) / 100) * 2

' If LVol > (50 * Val(Vol1) / 100) * 2 Then

' LVol = (50 * Val(Vol1) / 100) * 2

' End If

' If RVol > (50 * Val(Vol2) / 100) * 2 Then

' RVol = (50 * Val(Vol2) / 100) * 2

' End If

'Else

' LVol = (F * Val(Vol1) / 100)

' RVol = (E * Val(Vol2) / 100)

'End If

'Label1.Caption = "Fader: " + LTrim$(Str$(LVol)) + " x " + LTrim$(Str$(RVol))

'

End Sub

Public Function lSetVolume(ByRef lLeftVol As Long, _
ByRef lRightVol As Long, lDeviceID As Long) As Long
'*******************************************************************

'* This function sets the current Windows volume settings to the specified

'* device using two Custom numbers from 0 to HIGHEST_VOLUME_SETTING for the

'* right and left volume settings.

'*

'* The return value of this function is the Return value of the auxGetVolume

'* Windows API call.

'*******************************************************************

Dim bReturnValue As Boolean ' Return Value from Function
Dim Volume As VolumeSetting ' Type structure used to convert a long to/from
' two Integers.

Dim lAPIReturnVal As Long ' Return value from API Call
Dim lBothVolumes As Long ' The API passed value of the Combined Volumes

'*****************************************

'* Calculate the Integers

'*****************************************

Volume.LeftVol = nSigned(lLeftVol * 65535 / HIGHEST_VOLUME_SETTING)
Volume.RightVol = nSigned(lRightVol * 65535 / HIGHEST_VOLUME_SETTING)

'******************************************************

'* Combine the Integers into a Long to be Passed to the API *

'******************************************************

lDataLen = Len(Volume)
CopyMemory lBothVolumes, Volume.LeftVol, lDataLen
'*****************************************

'* Set the Value to the API *

'*****************************************

lAPIReturnVal = auxSetVolume(lDeviceID, lBothVolumes)
lSetVolume = lAPIReturnVal
End Function

Public Function lGetVolume(ByRef lLeftVol As Long, ByRef lRightVol As Long, _
lDeviceID As Long) As Long
'************************************************************

'* This function reads the current Windows volume settings from the

'* specified device, and returns two numbers from 0 to

'* HIGHEST_VOLUME_SETTING for the right and left volume settings.

'*

'* The return value of this function is the Return value of the auxGetVolume

'* Windows API call.

'************************************************************

Dim bReturnValue As Boolean ' Return Value from Function
Dim Volume As VolumeSetting ' Type structure used to convert a long to/from
' two Integers.

Dim lAPIReturnVal As Long ' Return value from API Call
Dim lBothVolumes As Long ' The API Return of the Combined Volumes
'*******************************************

'* Get the Value from the API

'*******************************************

lAPIReturnVal = auxGetVolume(lDeviceID, lBothVolumes)

'*******************************************

'* Split the Long value returned from the API into to Integers

'*******************************************

lDataLen = Len(Volume)
CopyMemory Volume.LeftVol, lBothVolumes, lDataLen

'*******************************************

'* Calculate the Return Values. *

'*******************************************

lLeftVol = HIGHEST_VOLUME_SETTING * lUnsigned(Volume.LeftVol) / 65535
lRightVol = HIGHEST_VOLUME_SETTING * lUnsigned(Volume.RightVol) / 65535
lGetVolume = lAPIReturnVal
End Function

Public Function nSigned(ByVal lUnsignedInt As Long) As Integer
Dim nReturnVal As Integer ' Return value from Function

If lUnsignedInt > 65535 Or lUnsignedInt < 0 Then
MsgBox "Error in conversion from Unsigned to nSigned Integer"
nSignedInt = 0
Exit Function
End If
If lUnsignedInt > 32767 Then
nReturnVal = lUnsignedInt - 65536
Else
nReturnVal = lUnsignedInt
End If

nSigned = nReturnVal
End Function

Public Function lUnsigned(ByVal nSignedInt As Integer) As Long
Dim lReturnVal As Long ' Return value from Function

If nSignedInt < 0 Then
lReturnVal = nSignedInt + 65536
Else
lReturnVal = nSignedInt
End If

If lReturnVal > 65535 Or lReturnVal < 0 Then
MsgBox "Error in conversion from nSigned to Unsigned Integer"
lReturnVal = 0
End If

lUnsigned = lReturnVal
End Function











( mixer.html )- by Paolo Puglisi - Modifica del 17/12/2023