# Re: 如何用VB控制音量

Posted by 琏琏 on November 10, 1999 at 17:38:24:

In Reply to: 如何用VB控制音量 posted by tne on November 10, 1999 at 00:50:45:

: 如题。我不想直接呼叫sndvol32.exe，因为我需要在程式中直接改变音量，而参考其他文件的曾提及auxSetVolume API呼叫，但不知为何在我的电脑不能用，是否还有别的方法可以解决？

下面是最近在 VBQA 及 BBS 上回的, 自己参考吧...
-----------------------------------------------
别闹了! auxSetVoulme 顾名思义:
只能设定 aux的音量 (外部音源) ,
属于 aux 一般只有 Line-In, CDAudio , 怎么可以设定其他装置?

要全部音源都能设定要用
mixerSetControlDetails 这个 API
各音源代号见
MIXERLINE_COMPONENTTYPE_
起头的常数!

还是多看看 MSDN 比较准...
MSDN 中还有两个现成的范例...

==> Stupids.bbs@aidebbs.edu.tw (我竟然是小呆瓜) 在 programming 版提到:
: ==> 在 bin.bbs@bbs.fy.edu.tw (End) 的文章中提到:
: : ※ 引述《Devil.bbs@vlsi1.iie.ncku.edu.tw (琏琏)》之铭言：
: : ㄜ 谢谢~想请问ㄉ是我udeviceid=0时是可设定cdaudio
: : 但其他装置却都不能设定 是为啥呢?
: 是吗？我的MIDI也可以设，Wave音量可以设，连主音源大小都可以设定
: ，PCSpeaker也可以设
: 这些东西叫作外部音源吗？

说明不该以特例为主吧?

以输出音源或拨放音量多媒体的 API系列来说:
aux: auxSetVolume: 外部音源, Line-In, CDAudio
MIDI: midiOutSetVolume: 拨放 MIDI 音量, MIDI
Wave: waveOutSetVolume: 拨放 Wave 音量, Wave
--------
关于 uDeviceID 的取得与使用

Dim tAuxCap As AUXCAPS

nCount = auxGetNumDevs
' uDeviceID = 0 到 nCount-1 之间的数值才是有效引数
For i= 0 to nCount-1
summy = auxGetDevCaps(i, tAuxCap, Len(tAuxCap))
' 根据 tAuxCap.szPName 来确认音源装置是哪一套, 并令 uDeviceID = i
Next i

之后才使用 auxSetVolume, 而这个只能设定外部音源拨放而已!

摘录于 MSDN ...
--
The auxSetVolume function sets the volume of the specified auxiliary
output device.
--

要能设定所有音源包含拨放, 录音的 API , 应使用 mixerSetControlDetails,
使用混音器控制才是包装完成的 API...

本来不想浪费篇幅的说!
下面是从 API检视员剪贴出来的, DST 是输出音源常数, SRC 是输入音源

调整总输出音量用 MIXERLINE_COMPONENTTYPE_DST_SPEAKERS

看了还有问题我就不知道了!
-----------------------------------------
MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
MIXERLINE_COMPONENTTYPE_DST_DIGITAL = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)
MIXERLINE_COMPONENTTYPE_DST_HEADPHONES = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)
MIXERLINE_COMPONENTTYPE_DST_LAST = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
MIXERLINE_COMPONENTTYPE_DST_LINE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)
MIXERLINE_COMPONENTTYPE_DST_MONITOR = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4) ' 整个输出音源
MIXERLINE_COMPONENTTYPE_DST_TELEPHONE = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)
MIXERLINE_COMPONENTTYPE_DST_UNDEFINED = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0)
MIXERLINE_COMPONENTTYPE_DST_VOICEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
MIXERLINE_COMPONENTTYPE_DST_WAVEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
MIXERLINE_COMPONENTTYPE_SRC_FIRST = &H1000&
MIXERLINE_COMPONENTTYPE_SRC_ANALOG = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9)
MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)
MIXERLINE_COMPONENTTYPE_SRC_DIGITAL = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)
MIXERLINE_COMPONENTTYPE_SRC_LAST = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
MIXERLINE_COMPONENTTYPE_SRC_LINE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3) ' 麦克风
MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)
MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)
MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)
MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)
MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)

- 培基语言

Follow Ups: