电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 冲浪宝典-> 局域网
用mci指令进行多媒体编程_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
我们有时会希望为自己的程序增加音效,例如警告声等,这就需要播放WAV文件。较简单的做法,我们可以使用多媒体控件(VB和Delphi都提供了MCI控件)来完成,但这样做无疑会增加系统负担和使程序体积增大(使用OCX的话尤其明显)。如果我们的程序并非一个多媒体程序而仅仅是用来播放音效的话,就更不划算了。有没有更理想的方法呢?答案是肯定的,Windows已经为我们提供了一个关于多媒体处理的动态连接库WINMM.DLL(旧版本为MMSYSTEM.DLL),通过调用它所提供的API函数,我们就可以使用MCI指令进行多媒体方面的操作了。
  让我们先来了解一下什么是MCI指令,MCI的全称是MediaControlInterface(媒体控制接口)。实际上MCI是一个高级的函数调用接口,我们可以把它看作是一个解释器,通过它,我们就可以直接和外部音频或视频设备打交道了。
  接下来,就需要了解一下需要用到的API和MCI指令。有三个与MCI有关的API,它们是:mciSendString(),mciExecute()和mciGetErrorString()。mciSendString函数的功能是传送指令字符串给MCI,mciExecute的功能和mciSendString一样,不同的是当发生错误时mciExecute会弹出对话框显示错误信息。mciGetErrorString的功能是将MCI错误代码转换为字符串。现在假设我们的编程环境是VB或Delphi,下面就在这两种环境的情况中介绍其使用方法。
  在VB中,调用API函数必须先进行声明,它们的格式分别为:
  DeclareFunctionmciExecuteLib“winmm.dll"Alias“mciExecute"(ByVallpstrCommandAsString)AsLong
  DeclareFunctionmciSendStringLib“winmm.dll“Alias“mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
  DeclareFunctionmciGetErrorStringLib“winmm.dll"Alias“mciGetErrorStringA"(ByValdwErrorAsLong,ByVallpstrBufferAsString,ByValuLengthAsLong)AsLong
  在Delphi中相对较简单,由于Delphi已经将多媒体相关的API声明预编译在MMSYSTEM.DCU文件中,所以我们只需要在单元的Uses语句后加上mmsystem即可在本单元中使用上述三个API函数了。
  接着再介绍一些常用的MCI指令。
  MCI指令一般格式为:MCI指令设备名[参数]
  打开多媒体设备:open,如:openCDAudio、openc:\windows\chimes.wavtypewaveaudio。
  播放多媒体设备:play,如:playCDAudiofrom5000to20000(播放CD的第5秒到第20秒)、playc:\windows\chimes.wav。
  关闭多媒体设备:close,如:closeall(关闭所有多媒体设备)。
  得到设备状态信息:status,如:statuscdaudionumberoftrack(得到CD的曲目总数)
  有了这些预备知识,就可以将MCI和API结合起来进行多媒体编程了。
  例如,要在程序中使用音效(播放WAV文件),要求如果WAV文件不存在的话要求忽略错误(即不弹出出错信息),则程序如下(以VB为例,Delphi中类似):
  DimResultasInteger
  DimReturnStrAsString*1024注意,必须指定String的长度
  Result=mciSendString(“playc:\windows\chimes.wav",ReturnStr,1024,0)其中ReturnStr为某些MCI指令执行后传送给程序的文字信息
  以上这段程序可以播放指定的WAV文件,如果成功执行,则Result的值为0,如果文件不存在或出现其他错误,错误代码会传送给Result,但程序不会中断。若要根据错误代码自行处理错误信息,可以使用mciGetErrorString函数处理:
  DimErrStrAsString*1024
  ifResult=0then
  msgbox“播放成功"
  Else
  i%=GetErrorString(ReturnStr,ErrStr,1024)
  msgboxErrStr
  EndIf
  下面,我们举一个完整的程序作为例子(还是以VB为例),我们可以用API写一个CD播放器来代替使用多媒体控件。这样做的好处很明显,当你把程序编译成为EXE文件后复制给朋友的时候,你再也不必附加其他OCX文件(如果是Delphi的话,EXE文件体积也可以减小)。
  在VB中新建一个工程,在Form1中添加6个按钮和一个Timer控件,属性如下(效果如图):
  名称:Command1,Caption:弹出
  名称:Command2,Caption:播放
  名称:Command3,Caption:暂停
  名称:Command4,Caption:下一首
  名称:Command5,Caption:上一首
  名称:Command6,Caption:退出
  名称:Timer1,Interval:1000
  接着,我们就可以编写代码了,如下:
  函数声明
  PrivateDeclareFunctionmciExecuteLib“winmm.dll"(ByVallpstrCommandAsString)AsLong
  PrivateDeclareFunctionmciSendStringLib“winmm.dll"Alias“mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
  DimCurAsInteger保存当前正在播放的曲目号
  DimTotalAsInteger保存CD曲目总数
  弹出CD-ROM
  PrivateSubCommand1_Click()
  i%=mciExecute(“setcdaudiodooropen")
  EndSub
  播放
  PrivateSubCommand2_Click()
  i%=mciExecute("playcdaudio")
  EndSub
  暂停
  PrivateSubCommand3_Click()
  i%=mciExecute(“pausecdaudio")
  EndSub
  播放下一首
  PrivateSubCommand4_Click()
  DimReturnStrAsString*128
  i%=mciExecute(“setcdaudiotimeformattmsf")设置from后的时间格式
  IfCur<TotalTheni%=mciExecute(“playcdaudiofrom"+Str(Cur+1))
  EndSub
  播放上一首
  PrivateSubCommand5_Click()
  DimReturnStrAsString*128
  i%=mciExecute(“setcdaudiotimeformattmsf")
  IfCur>1Theni%=mciExecute(“playcdaudiofrom"+Str(Cur-1))
  EndSub
  中止CD的播放并退出
  PrivateSubCommand6_Click()
  i%=mciExecute(“stopcdaudio")
  i%=mciExecute(“closecdaudio")
  End
  EndSub
  程序启动时打开CDAudio设备并得到曲目总数
  PrivateSubForm_Load()
  DimReturnStrAsString*128
  i%=mciSendString(“opencdaudio",ReturnStr,128,0)
  i%=mciSendString(“statuscdaudionumberoftracks",ReturnStr,128,0)
  Total=Val(ReturnStr)
  EndSub
  退出时中止CD的播放
  PrivateSubForm_Unload(CancelAsInteger)
  i%=mciExecute(“stopcdaudio")
  i%=mciExecute(“closecdaudio")
  EndSub
  每隔一秒监测当前播放的曲目号
  PrivateSubTimer1_Timer()
  OnErrorResumeNext
  DimReturnStrAsString*128
  i%=mciSendString(“statuscdaudiocurrenttrack",ReturnStr,128,0)
  Cur=Val(ReturnStr)
  EndSub
  好了,现在这个CD播放器已经可以工作了,如果你再为它扩充一些有趣的功能的话,就是一个完整的小软件了。->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·新手学习之局域网中代理设置_局域网教程
·局域网优化的六大秘技_局域网教程
·在小型局域网中用w2k共享上网_局域网教程
·局域网内轻松玩转远程协助_局域网教程
·轻松实现adsl宽带多机共享_局域网教程
·巧用ccproxy 解决服务器无法上网问题_局域网教程
·正确设置adsl modem nat 让网络应用无局限_局域网教程
·查看一个顶级域名下所有的二级域名_局域网教程
·给网络体检:局域网链路的连通性测试_局域网教程
·两则控制技巧 让局域网上网更高效_局域网教程

最新文章
·解决局域网遭遇盗用mac地址上网的问题_局域网教程
·完美测试tcp/ip协议简介_局域网教程
·网络与路由器故障诊断基础知识_局域网教程
·photoshop简单几步打造梦幻仙境_photoshop教程
·局域网内共用电视卡方法_局域网教程
·局域网用户的限制和反限制_局域网教程
·photoshop超强磨皮:将斑点选出来!_photoshop教程
·windows vista局域网网络连接设置_局域网教程
·photoshop绘制怀旧风格红玫瑰_photoshop教程
·photoshop抠玻璃杯十步教程_photoshop教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号