主题:  滨滨及有兴趣的人:好奇怪的音量控制问题--请您查错!

dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#12003/10/25 23:22:15
用你的BINAPI。U32函数控制音量,没人比你更熟悉这个了吧??呵呵,进入正题!


做了一个程序按钮,其下挂的计算图标内容如下:
-------------------------------------------------------------------------------------------------
--功能:音量加大
--程序先增加WAV音量,WAV音量达到100后(不能再加),就增加主音量
--当主音量达到100后(不能再加),不再做增音量的操作。
--并使“TV_音量加”按钮失效(BTN_VOL_ADD=FALSE)。

--变量说明:DELTA_VOL变量是增加音量的“步长”,按一下音量就增加DELTA_VOL


其余变量在程序中给了说明,应不难理解。
-----------------------------------------------------
TV_VOL_W:=BNA_GetVolume(1)--读取WAV音量
TV_VOL_M:=BNA_GetVolume(0)--读取主音量

if TV_VOL_W<100 then

if TV_VOL_W+DELTA_VOL<=100 then
TV_VOL_W:=TV_VOL_W+DELTA_VOL
BNA_SetVolume(1, TV_VOL_W)--WAV音量增加

else
TV_VOL_W:=100
BNA_SetVolume(1, TV_VOL_W)--WAV音量为100
end if

end if
----------------------------------------------------------------------------------------
if TV_VOL_W=100 then

if TV_VOL_M+DELTA_VOL<=100 then
TV_VOL_M:= TV_VOL_M+DELTA_VOL
BNA_SetVolume(0, TV_VOL_M)--主音量增加

else
TV_VOL_M:=100
BNA_SetVolume(0, TV_VOL_M)--主音量为100
BTN_TV_VOL_ADD:=FALSE--使“TV_音量加”按钮失效(BTN_VOL_ADD=FALSE)
end if

end if
-------------------------------------------------------------------

编辑历史:[此帖被dreamexpress编辑过(编辑时间2003-10-25 23:32:19)]
[此帖被dreamexpress编辑过(编辑时间2003-10-25 23:38:47)]
[此帖被dreamexpress编辑过(编辑时间2003-10-25 23:40:20)]
[此帖被dreamexpress编辑过(编辑时间2003-10-25 23:40:59)]
[此帖被dreamexpress编辑过(编辑时间2003-10-25 23:41:58)]
[此帖被dreamexpress编辑过(编辑时间2003-10-25 23:45:28)]
[此帖被dreamexpress编辑过(编辑时间2003-10-26 00:04:45)]
[此帖被dreamexpress编辑过(编辑时间2003-10-26 00:15:39)]


dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#22003/10/25 23:29:16
HTML文件居然不能把缩进粘过来,看那么多IF可能有点麻烦你了,不好意思呀。

上述程序应可以实现“先增加WAV音量,然后再增加主音量”的功能。

测试时,点这个按钮却“WAV音量与主音量同步增加(程序运行时,我打开WINDOWS的音量控制程序观察得到,即二个滑块一起上升到顶)

好怪啊!

最后按经验,改了一下才正确了。这个错好难查呀~。还好总算查出来了,正在想个合理的解释,还没想好,呵呵。
滨滨,请先看一下程序,看看能不能直接看出错误,我后面再说改哪个地方了好吗??

真心希望与你交流。

编辑历史:[此帖被dreamexpress编辑过(编辑时间2003-10-25 23:37:27)]
[此帖被dreamexpress编辑过(编辑时间2003-10-26 00:01:55)]
[此帖被dreamexpress编辑过(编辑时间2003-10-26 00:12:21)]


滨滨

职务:版主
等级:4
金币:13.0
发贴:1931
#32003/10/27 8:18:31
似乎没有什么问题,不过你的程序逻辑和分支写的感觉不太舒服
我自己都很久不搞AW了,那个ucd我一时也找不到,有时间的时候试试吧。



dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#42003/10/27 8:56:21
BINAPI.U32下载
相关文件:点这儿打开




"if TV_VOL_W=100 then"这句的条件TV_VOL_W=100 居然有问题,因为程序运行时好象根本认为这个条件是TRUE。

将其改为TV_VOL_W>=100即可。


修改后的程序如下:
-----------------------------------------------------
TV_VOL_W:=BNA_GetVolume(1)--读取WAV音量
TV_VOL_M:=BNA_GetVolume(0)--读取主音量

if TV_VOL_W<100 then

if TV_VOL_W+DELTA_VOL<=100 then
TV_VOL_W:=TV_VOL_W+DELTA_VOL
BNA_SetVolume(1, TV_VOL_W)--WAV音量增加
else
TV_VOL_W:=100
BNA_SetVolume(1, TV_VOL_W)--WAV音量为100
end if

----原"end if"(去掉)
else ----原”if TV_VOL_W=100 then“(去掉)

if TV_VOL_M+DELTA_VOL<=100 then
TV_VOL_M:= TV_VOL_M+DELTA_VOL
BNA_SetVolume(0, TV_VOL_M)--主音量增加
else
TV_VOL_M:=100
BNA_SetVolume(0, TV_VOL_M)--主音量为100
BTN_TV_VOL_ADD:=FALSE--使“TV_音量加”按钮失效(BTN_VOL_ADD=FALSE)
end if

end if

编辑历史:[此帖被dreamexpress编辑过(编辑时间2003-10-27 09:24:41)]
[此帖被dreamexpress编辑过(编辑时间2003-10-27 09:25:12)]


dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#52003/10/27 8:58:32
"if TV_VOL_W=100 then"这句的条件TV_VOL_W=100难道被AW认为是赋值语句?所以一直认为是TRUE??不可能啊!真是无法解释了。。。

编辑历史:[此帖被dreamexpress编辑过(编辑时间2003-10-27 09:38:22)]


dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#62003/10/27 9:06:16
BINAPI.U32下载
相关文件:点这儿打开
那个U32我放上来了。能看看我的问题吗?原来的程序到底错在哪?就是感觉不太舒服的那段程序到底错在哪???

滨滨在上个帖子中说
引用:
不过你的程序逻辑和分支写的感觉不太舒服



修改后的应改是最舒服的了吧?

编辑历史:[此帖被dreamexpress编辑过(编辑时间2003-10-27 09:27:30)]
[此帖被dreamexpress编辑过(编辑时间2003-10-27 09:28:11)]


与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
#72003/10/27 9:39:19
我以前总是用QTXtra播放声音,兼控制音量和声音数量,不用API编程。



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#82003/10/27 15:14:33
这么长的问题。。还真的懒的看。。



滨滨

职务:版主
等级:4
金币:13.0
发贴:1931
#92003/10/27 21:01:32
我的代码,我觉得这样感觉更好些,运行时没有问题.
===================================
DELTA_VOL=10
...
===================================
TV_VOL_W:=BNA_GetVolume(1)--读取WAV音量
TV_VOL_M:=BNA_GetVolume(0)--读取主音量

if TV_VOL_W< 100 then
TV_VOL_W=TV_VOL_W+DELTA_VOL
if TV_VOL_W>100 then
TV_VOL_W=100
end if
BNA_SetVolume(1, TV_VOL_W)--WAV音量增加
else
if TV_VOL_M<100 then
TV_VOL_M=TV_VOL_M+DELTA_VOL
if TV_VOL_M>100 then
TV_VOL_M=100
end if
end if
BNA_SetVolume(0, TV_VOL_M)--主音量增加
end if



滨滨

职务:版主
等级:4
金币:13.0
发贴:1931
#102003/10/27 21:03:13
跟你后面改了的很象.



dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#112003/10/28 11:36:52
确实你的更简洁,长久没编程序居然思维如此不清晰,可悲。



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#122003/10/28 13:09:59
aw的东西不能算编程



dreamexpress_5d

职务:普通成员
等级:1
金币:10.0
发贴:2229
#132003/10/28 14:08:01
Rock在上个帖子中说
引用:
aw的东西不能算编程

我说了我在用AW编程了吗?我只是说我好长时间没编程序,这种IF语句居然写不好了。

干吗这么叫真呀。ROCK老大?



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#142003/10/28 15:46:25


果然胸有大痔。。。



与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
#152003/10/29 11:24:50
AW的东西怎么不能叫编程?
程序代码可以写地到处都是。加了JS后,编程手段更多了,起码按位与、或没什么问题了。