转换的vb代码,但运行不正确。

bombshell 2006-05-15 01:57:02
大家看看是那方面的问题,谢谢!

Function long waveOutGetVolume(long uDeviceID , ref long lpdwVolume ) Library "winmm.dll"
Function long waveOutSetVolume(long uDeviceID , long dwVolume ) Library "winmm.dll"
Subroutine CopyMemory(any hpvDest , any hpvSource, long cbCopy) Library "kernel32.dll" Alias for "RtlMoveMemory"

实例变量:

constant long WAVE_MAPPER = -1


/*****************************************************************
*函数名称: setwavevolume
*参 数: long lvolume by value , long rvolume by value
*作 用: 设置系统音量
****************************************************************/


long svolume
integer volumeset[2]

if lvolume > 32767 then
lvolume = lvolume - 65536
end if
if rvolume > 32767 then
rvolume = rvolume - 65536
end if
volumeset[1] = lvolume
volumeset[2] = rvolume
copymemory(svolume , volumeset[1] , 4)
waveoutsetvolume(WAVE_MAPPER , svolume)



/*****************************************************************
*函数名称: getwavevolume
*参 数: long lvolume by refence , long rvolume by refence
*作 用: 获得系统音量
****************************************************************/

long svolume
long volumeset[2]
waveoutgetvolume(WAVE_MAPPER , svolume)
copymemory(volumeset[1], svolume , 4)
lvolume = volumeset[1]
rvolume = volumeset[2]
if lvolume < 0 then
lvolume = lvolume + 65536
end if
if rvolume < 0 then
rvolume = rvolume + 65536
end if
...全文
244 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bombshell 2006-05-16
  • 打赏
  • 举报
回复
请问左右声道的取值范围是不是0-32767
lzheng2001 2006-05-16
  • 打赏
  • 举报
回复
一些很旧的声卡只有单声道,可能取不到两个值.
lzheng2001 2006-05-16
  • 打赏
  • 举报
回复
数字变成了0 - 65535 之间,只是显得更形象一点,因为0就表示没有音量!
lzheng2001 2006-05-16
  • 打赏
  • 举报
回复
实际上的值应该是
-32768 至 32767

由于用了以下语句,所以变成了 0 - 65535 了!
(如果你喜欢音量的范围在-32768 至 32767之间,你也可以不用以下这几句的)
if lvolume < 0 then
lvolume = lvolume + 65536
end if
if rvolume < 0 then
rvolume = rvolume + 65536
end if
hygougou 2006-05-15
  • 打赏
  • 举报
回复
据说不是所有声卡都支持

good luck
lzheng2001 2006-05-15
  • 打赏
  • 举报
回复
你可以不用CopyMemory就能够解决问题!

问题解决就结贴 :)
lzheng2001 2006-05-15
  • 打赏
  • 举报
回复
/*****************************************************************
*函数名称: setwavevolume
*参 数: long lvolume by value , long rvolume by value
*作 用: 设置系统音量
****************************************************************/


long svolume
integer volumeset[2]

if lvolume > 32767 then
lvolume = lvolume - 65536
end if
if rvolume > 32767 then
rvolume = rvolume - 65536
end if

svolume = lvolume * 2^16 + rvolume

waveoutsetvolume(WAVE_MAPPER , svolume)
lzheng2001 2006-05-15
  • 打赏
  • 举报
回复
/*****************************************************************
*函数名称: getwavevolume
*参 数: long lvolume by refence , long rvolume by refence
*作 用: 获得系统音量
****************************************************************/
long svolume

waveoutgetvolume(WAVE_MAPPER , svolume)
lvolume = intHigh(svolume)
rvolume = intLow(svolume)

if lvolume < 0 then
lvolume = lvolume + 65536
end if

if rvolume < 0 then
rvolume = rvolume + 65536
end if

681

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧