ChangeVolSystem




'Enter each Declare statement as one, single line:

Declare Function waveOutSetVolume Lib "MMSYSTEM.DLL" _
(ByVal wDeviceID as Integer, _
ByVal dwVolume as Long) as Integer
Declare Function waveOutGetVolume Lib "MMSYSTEM.DLL" _
(ByVal wDeviceID as Integer, _
dwVolume as Long) as Integer
'As an alternative, you can declare the

'waveOutSetVolume function by passing the

'dwVolume parameter as two separate integers,

'one for the left-channel setting and one for

'the right-channel setting. Pass the high-order

'word first and then the low-order word.

'Enter the following Declare statement as one,

'single line: Declare

Function waveOutSetVolume Lib "MMSYSTEM.DLL" _
(ByVal wDeviceID as Integer, _
ByVal dwVolumeRight as Integer _
ByVal dwVolumeLeft as Integer) as Integer
'Parameters Explained

'wDeviceID This parameter identifies the waveform-output device.

'If you were to play one wave file, you would set this parameter

'to 0. If you were to play multiple wave files, you would set

'this parameter to 1 for the second, 2 for the third, and so on.

'dwVolume For the waveOutSetVloume function, this parameter

'specifies the new volume setting. For the waveOutGetVolume

'function, it specifies a far pointer to a location that will be

filled with the current volume setting.
'The low-order word contains the left-channel volume setting,

'and the high-order word contains the right-channel volume setting.

'A value of &HFFFF represents full volume, and a value of

'&H0000 represents no volume.

'If a device does not support both left and right volume

'control, the low-order word of dwVolume specifies the

'volume level, and the high-order word is ignored.

'Return Value

'?? returns zero if the function is successful.

'Otherwise, it returns an error number. Possible return

'values are:

'MMSYSERR_INVALIHANDLE = 5 Specific device handle is invalid

'MMSYSERR_NOTSUPPORTED = 8 Function isn't supported

'MMSYSERR_NODRIVER = 6 The driver was not installed

'NOTE: Not all devices support volume changes or volume

'control on both the left and right channels.

'Most devices do not support the full 16 bits of

'volume-level control and will not use the high-order bits.

'Step-by-Step Example

'This example demonstrates how to use the waveOutSetVolume(),

'waveOutGetVolume(), and sndPlaySound Multimedia API functions to

'increase or decrease the sound in either the left or right channels:

'Start a new project in Visual Basic; Form1 is created by default.

'Add the following controls to Form1 and set their properties as

'indicated:

'Control Property Setting ----------------------------------------

'Command Button Name PlaySound

'Caption Play Sound

'Command Button Name LeftUp

'Caption Left Up

'Command Button Name LeftDown

'Caption Left Down

'Command Button Name RightUp

'Caption Right Up

'Command Button Name RightDown

'Caption Right Down

'Label Name LeftVol

'Label Name RightVol

'Add the following code to the General Declarations

'section of Form1:

'Enter each of the following Declare statements as one, single line:

Declare Function sndPlaySound Lib "MMSYSTEM.DLL" _
(ByVal lpszSoundName As String, _
ByVal wFlags As Integer) As Integer
Declare Function waveoutSetVolume Lib "mmsystem.dll" _
(ByVal wDeviceID As Integer, _
ByVal dwVolumeRight As Integer, _
ByVal dwVolumeLeft As Integer) As Integer
Declare Function waveOutGetVolume Lib "MMSYSTEM.DLL" _
(ByVal wDeviceID As Integer, lpdwvolume As Long) As Integer
Const SND_ASYNC = &H1 Const SND_NODEFAULT = &H2
Dim CurrentVolLeft As Long Dim CurrentVolRight As Long

'Add the sample code shown below to the appropriate Form

'or Control event procedure. Save your work, and run the

'program. You will see the current channel setting in the

'labels. Choose the Play Sound button to hear the tada wave

'file play. Click one of the other command buttons to change

'either the left- or right-channel setting, and then click

'the Play Sound command button again. The volume level has

'changed. Sample Code


Sub Form_Load ()
Dim x As Integer
Dim BothVolumes As Long
'Note that the waveid is 0 indicating the first

'wave output device. If you were to play multiple

'wavefiles on multiple wave output devices

'you would use 1 for the second wave output

'device, 2 for the third and so on.

'This code will retrieve the current volume setting

x = waveOutGetVolume(0, BothVolumes)
'This code isolates the low-order word.

'Note that the value &HFFFF& is a Long Integer, which

'is the same as 0000FFFF, but because Visual Basic

'would automatically truncate this to FFFF, you

'must force the logical operation to use

'a four-byte Long Integer (0000FFFF) rather than a

'two-byte Integer (FFFF). This is accomplished

'by using the type casting character (&).

CurrentVolLeft = BothVolumes And &HFFFF&
'This code isolates the high-order word.

'Enter the following two lines as one, single line:

CurrentVolRight = ((BothVolumes And &HFFFF0000) / &H10000)
And &HFFFF&
LeftVol.Caption = Hex$(CurrentVolLeft)
'Update the label with the

RightVol.Caption = Hex$(CurrentVolRight) ' current volume settings.
End Sub

Sub PlaySound_Click ()
Dim x As Integer
Dim wFlags As Integer
Dim SoundName As String
SoundName = "C:\WINDOWS\MSREMIND.WAV" ' Pick any wave file.
wFlags = SND_ASYNC Or SND_NODEFAULT
x = sndPlaySound(SoundName$, wFlags%) ' Play the wave file.
End Sub

Sub LeftUp_Click ()
' Increase the left sound channel setting:

Dim x As Integer
CurrentVolLeft = CurrentVolLeft + &H1000&
' Prevent the channel setting from exceeding the maximum limit:

If CurrentVolLeft > &HFFFF& Then CurrentVolLeft = &HFFFF&
LeftVol.Caption = Format$(Hex$(CurrentVolLeft))
' Enter the following two lines as one, single line:

x = waveoutSetVolume(0, CInt("&H" + Hex$(CurrentVolRight)),
CInt("&H" + Hex$(CurrentVolLeft)))
End Sub

Sub LeftDown_Click ()
' Decrease the left sound channel setting:

Dim x As Integer
CurrentVolLeft = CurrentVolLeft - &H1000&
' Prevent the channel setting from dropping below the minimum

limit:
If CurrentVolLeft < &H0& Then CurrentVolLeft = &H0&
LeftVol.Caption = Hex$(CurrentVolLeft)
' Enter the following two lines as one, single line:

x = waveoutSetVolume(0, CInt("&H" + Hex$(CurrentVolRight)),
CInt("&H" + Hex$(CurrentVolLeft)))
End Sub

Sub RightUp_Click ()
' Increase the right sound channel setting:

Dim x As Integer
CurrentVolRight = CurrentVolRight + &H1000&
' Prevent the channel setting from exceeding the maximum limit.

If CurrentVolRight > &HFFFF& Then CurrentVolRight = &HFFFF&
RightVol.Caption = Hex$(CurrentVolRight)
' Enter the following two lines as one, single line:

x = waveoutSetVolume(0, CInt("&H" + Hex$(CurrentVolRight)),
CInt("&H" + Hex$(CurrentVolLeft)))
End Sub

Sub RightDown_Click ()
' Decrease the right sound channel setting:

Dim x As Integer
CurrentVolRight = CurrentVolRight - &H1000&
' Prevent the channel setting from dropping below the minimum

limit:
If CurrentVolRight < 0 Then CurrentVolRight = 0
RightVol.Caption = Hex$(CurrentVolRight)
' Enter the following two lines as one, single line:

x = waveoutSetVolume(0, CInt("&H" + Hex$(CurrentVolRight)),
CInt("&H" + Hex$(CurrentVolLeft)))
End Sub











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