Hi,
I have a software package written in VB6 for Windows XP and Vista
based computers. It streams audio in from the internet and sends it to
the sound card. I also want to be able to control the volume level of
the sound card using the mixer settings. I get the volume level by
' Get the waveout volume control
ok = GetVolumeControl(hmixer, _
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, _
MIXERCONTROL_CONTROLTYPE_VOLUME, _
volCtrl)
I then set the volume level with
SetVolumeControl hmixer, volCtrl, volCtrl.lMaximum
The volume mixer GetVolume routine and its entire header is included
at the bottom of this post.
The error occurs in the very last few lines of
' Obtain a line corresponding to the component type
rc = mixerGetLineInfo(hmixer, mxl, MIXER_GETLINEINFOF_COMPONENTTYPE)
MsgBox "mixerGetLineInfo Return Code = " & rc & vbCrLf & vbCrLf & _
"MMSYSERR_NOERROR=" & rc, vbOKOnly, "MIXER Return Code"
I added the msgbox to see why it was failing.
In all of the XP computers I have run this on, I get back the proper
error code of 0. Reagardless of whether I'm using the computers normal
sound card, or whether I have connected a Logitec USB
microphone/headset. And utilizing setvolume works as I hope, changing
the volume level of the audio to the speakers/headphone.
When I go to a Vista computer, I get exactly the same response (0)
when using the computers built in sound card. However, when I plug in
the same Logitec USB microphone/headset into the Vista USB port, I get
an error code 1024. And cannot get/set the volume of the device.
I am able to use directx just fine getting audio to and from the USB
headset, but I cannot control volume anymore in any USB headset in a
Vista computer. XP and 98SE are just fine.
A note, on both types of systems, and with or without the USB headset
plugged in, the streaming part to/from the sound card/headsets work
perfectly. It is just that in the USB headset variety, I am having to
disable my PC volume control, and direct the user to use the operating
systems audio level adjustments.... Would rather keep it seemless if I
can.
Does anyone have any clues, or can direct me to a forum that might be
able to help?
I'm going to post this to
Thanks,
John
Public Const MMSYSERR_NOERROR = 0
Public Const MAXPNAMELEN = 32
Public Const MIXER_LONG_NAME_CHARS = 64
Public Const MIXER_SHORT_NAME_CHARS = 16
Public Const MIXER_GETLINEINFOF_COMPONENTTYPE = &H3&
Public Const MIXER_GETCONTROLDETAILSF_VALUE = &H0&
Public Const MIXER_GETLINECONTROLSF_ONEBYTYPE = &H2&
Public Const MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
Public Const MIXERLINE_COMPONENTTYPE_SRC_FIRST = &H1000&
Public Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = _
(MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
Public Const MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = _
(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
Public Const MIXERLINE_COMPONENTTYPE_SRC_LINE = _
(MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
Public Const MIXERCONTROL_CT_CLASS_FADER = &H50000000
Public Const MIXERCONTROL_CT_UNITS_UNSIGNED = &H30000
Public Const MIXERCONTROL_CONTROLTYPE_FADER = _
(MIXERCONTROL_CT_CLASS_FADER Or _
MIXERCONTROL_CT_UNITS_UNSIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_VOLUME = _
(MIXERCONTROL_CONTROLTYPE_FADER + 1)
Declare Function mixerClose Lib "winmm.dll" _
(ByVal hmx As Long) As Long
Declare Function mixerGetControlDetails Lib "winmm.dll" Alias
"mixerGetControlDetailsA" _
(ByVal hmxobj As Long, _
pmxcd As MIXERCONTROLDETAILS, _
ByVal fdwDetails As Long) As Long
Declare Function mixerGetDevCaps Lib "winmm.dll" Alias
"mixerGetDevCapsA" _
(ByVal uMxId As Long, _
ByVal pmxcaps As MIXERCAPS, _
ByVal cbmxcaps As Long) As Long
Declare Function mixerGetID Lib "winmm.dll" _
(ByVal hmxobj As Long, _
pumxID As Long, _
ByVal fdwId As Long) As Long
Declare Function mixerGetLineControls Lib "winmm.dll" Alias
"mixerGetLineControlsA" _
(ByVal hmxobj As Long, _
pmxlc As MIXERLINECONTROLS, _
ByVal fdwControls As Long) As Long
Declare Function mixerGetLineInfo Lib "winmm.dll" Alias
"mixerGetLineInfoA" _
(ByVal hmxobj As Long, _
pmxl As MIXERLINE, _
ByVal fdwInfo As Long) As Long
Declare Function mixerGetNumDevs Lib "winmm.dll" () As Long
Declare Function mixerMessage Lib "winmm.dll" _
(ByVal hmx As Long, _
ByVal uMsg As Long, _
ByVal dwParam1 As Long, _
ByVal dwParam2 As Long) As Long
Declare Function mixerOpen Lib "winmm.dll" _