说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

利用VB测声卡

HTML文档下载 WORD文档下载 PDF文档下载
利用VB测声卡
在一个多媒体应用程序中,如果涉及对声音的播 放与操作,那么我们就有必要先对用户系统中的声卡 及真功能进行一下测试。幸好有VB,所以我们要实现 这些功能并不用费多大力气(也就是吃顿饭的力气), 在下面的程序中我们将利用VB调用两个windows Api函数--Waveoutgetnumdevs()和Waveoutgetdev- capS()来访问设备驱动程序,获取有关信息,实现上述 目的。OK,Let's Go! 一、我们先要捡测一下声卡是否存在
1.新建一工程并添加模块Module1.bas,在其声 明部分加入如下代码:
Declare Function Waveoutgetnumdevs Lib"Winmm.Dll"() as Long
Public Const Mb_ok= & H40
2.在窗体上添加一个命令按钮cmdtest,设置Caption的属性为“测试声卡”
3.在窗体的通用声明部分加入一函数testcard,代码如下:
Public Function Testcard() As Boolean
Dim Y As long
Dim Find As String Find = “Fied Sound Blaster Card"
Y = Waveoutgetnumdevs()
If Y > 0 Then
Testcard = True
Msgbox "啥啥,我找到你了--声卡!", Mb_ok,Find
Else
Testcard = Falsc
Msgbox "未发现设备",Mb_ok,Find
End if
End Function
4.在命令按钮的单击事件中加入代码:
Private sub Cmdtest_Click()
Dim Existent As Boolean
Existent =Testcard
End sub
现在你可以运行这个程序试试看了,它会检测你 的系统中是否有声卡的存在。 二、测试声卡的功能
既然已经发现了声卡的存在,接下来就要测试一 下它的功能。为什么?举个例子来说,老式声卡支持的 采样率和位分辨率是远不及现在声卡的,如果你试图 用只有8位分辨率和22.05KHz采样率的声卡来播放 44.1KHz、16位立体声的声音文件,嘿嘿……有你好 看(其实也没啥大不了的)。好,你大胆的往下看。
1.在窗体上加入picturebox控件picture1。
2.在Module1.bass的声名节中加入代码:
Declare Function Waveoutgetdevcaps Lib "Winmm.dll" Alias"Waveoutgetdevcapsa"(ByvaI Udcviceid As Long,Lpcaps As WaveOutcaps, ByvaI Usize As Long) As Long
'参数1指定被测设备。由于一台PC上装有几个音频设 备是完全可能的,所以Windows自动给每个设备编号,第一 个可用设备号为0。
'参数2是一个Waveoutcaps结构的指针。
'多数3是第二个参数的大小。
Public Const Maxpnamelen = 32
Public Const Wave_Format_1m08 = & H1
Public Const Wavp_Format_1ml6 = & H4
Public Const Wave_Format_1s08 = & H2
Public Const Wave_Format_1sl6 = & H8
Public Const Wavc_Format_2m0B = & H1O
Public Const Wave_Format_2m16 = & H40
Public Const Wave_Format_2s08 = & H20
Public Const Wave_Format_2s16 = & H80
Public Const Wave_Format_4m08 = & H100
Public Const Wave_Format_4ml6 = & H400
Public Const Wave_Format_4s08 = & H200
Public Const Wave_Format_4s16 = & H800
Public Const Wavecaps_Lrvolume = & H8
Public Const Wavecaps_Pitch = & H1
Public Const Wavecaps_Playbackrate = & H2
Public Const Wavecaps_Sync = & H10
Public Const Wavecaps_Volume = & H4

Type WaveoutCaps
Wmid As Integer '设备驱动程序厂商标识
Wpid As Integer '声卡厂商标识
Vdriverversion As Long '驱动程序版本号,高字节为主版 本号,低字节为次版本号
Szpname As String * Maxpnamelen '产品名称
Dwformats As Long '支持的wave格式,每一位代表一 种格式
Wchannels As Integer '返回整型值1(单声道)或2(立体 声)
Dwsupport As Long '设备支持的扩展输出功能
End Type
3. 在窗体的声明节内增加两个函数:
'函数 listwaveformat 检测波形音频支持的格式
Public Function Listwaveformat(Aboutwave As long) As String
Dim Waveformat As String
Select Case Aboutwave
Case Wave_Format_1m08
Waveformat = "11.025khz, Mono, 8bit, 11kb/Ps"
Case Wave_Format_1m16
Waveformat = "11.025khz, Mono, 16bit, 22kb/Ps"
Case Wave_Format_1s08
Waveformat = "11.025khz, Stereo, 8bit, 22kb/Ps"
Case Wave_Format_1s16
Waveformat = "11.025khz, Stereo, 16bit, 43kb/Ps"
Case wave_Format_2m08
Waveformat = "22.05khz, Mono, 8bit, 22kb/Ps"
Case Wavc_Format_2m16
Waveformat = "22.05khz. Mono,16bit, 43kb/Ps"
Case Wave_Format_2s16
Waveformat = "22.05khz, Stereo, 8bit, 43kb/Ps"
Case Wave_Format_2s16
Waveformat = "22.05khz, Stereo, 16bit, 86kb/Ps"
Case Wave_Format_4m08
Waveformat = "44.1khz, Mono, 8bit, 43kb/Ps"
Case Wave_Format_4m16
Wavcformat = "44.lkhz, Mono, 16bit, 86KB/Ps"
Case Wave_Format_4s08
Waveformat = "44.lkhz, Stereo, 8bit, 86kb/Ps"
Case Wavc_Format_4s16
Waveformat = "44.lkhz. Stereo, 16bit, 172kb/Ps"
End Select
Listwaveformat = Waveformat
End Function
'函数 Listwavesupport 检测设备支持的扩展输出功能
Public Function Listwavesupport(Aboutwave As long) As String
Dim Wavefun As String
Sclect Case Aboutwave
Case Wavecaps_Pitch
Wavefun = "Support Pitch"
Casc Wavecaps_Playbackrate
Wavefun = "Support Playback"
Case Wavecaps_Volume
Wavefun = "Support Volume Control"
Csae Wavecaps_Lrvolume
Wavefun = "Support Left - Right Channals"
Csae Wavecaps_sync
Wavcfun = "Support Synchronization"
End Select
Listwavesupport = Wavefun
End Function
4. 修改 cmdtest_Click 事件的代码为:
Private Sub Cmdtest_Click()
Dim Existent As Boolean
Dim Consequence As long
Dim Returncaps As Waveoutcaps
Dim Rainver As Long
Dim Lesservcr As long
Dim Pname As String * 32
Dim Aboutwave As long
Dim Channel As String * 2
Dim I As lnteger
Existent = Testcard
If Existent Then
Consequence = Waveoutgetdevcaps(0, Returncaps, Len (Returncaps)) If Consequence = 0 Then
Mainver = Returncaps.Vdriverversion \ 256
Lesserver = Returncaps.Vdriverversion Mod 256
'因为API在返回Returncaps.szpname 时在返回值与空格之 间会插入一个空的终止符,用Rtrim$会返回一个0终止字符 串,所以我们采用Instr+Left$的方法.
Pname = Left$ (Returncaps.Szpname,Instr(Returncaps .Szpname, Chrr$(0))-1)
Channe1 = Str$ (Returncaps.Wchannels)
Picture1.Print "产品名称:"; Pname
Picture1.Print "产品 Id:"; Returncaps.Wpid
Picture1.Print "驱动程序 Id:"; Returncaps.Wrmid
Picture1.Print "驱动程序版本:"; Mainver; "."; Lesserver Picture1.Print "输出声道:"; Channel
Picture1.Print "支持格式列表:"
For I = 0 TO 11
If Returncaps.Dwformats And (2^I) Then
Picture1.Print Listwaveformat (2^I)
End if
Next I
Picture1.Print "扩展输出功能列表:"
For l = 0 To 4
If Returncaps.Dwsupport And (2^I) Then
Picture1.Print Listwavesupport(2^I)
End if
Next I
End if
Else
End
End if
End Sub
5. 为 Form_load 事件加入 代码:
Private Sub Form_Load() Picture1.Cls End Sub 本程序在Win95(osr2)、 VB5企业版下调试通过,在 win3.2 下仅仅两个API函数 略有改变,照猫画虎即可。
好了,工作已经全部做完了。现在你要做的只是按下 F5.
GitHub推出重大改进:强调速度、内容和交互性 如何打造测试工程师精英团队? 如何做个有“钱”途的测试工程师? 苹果开始关注企业移动化 iOS 7的10大办公功能 “开源群英会2013” 参会名单(持续更新中) 微软Builder2013前瞻 主打跨平台工具及服务 CMDN 29期:软件测试与管理之路 微软IE10与HIT FM 携手打造全新HTML5官网 专访GenMyModel CTO:一款全新在线建模工具背后的故事 【直击美国云计算】Jason Hoffman:数据和计算的融合将破坏全球利润 【直击美国云计算】如何做Hadoop、流处理框架等技术的采用选择 【直击美国云计算】细数云技术领域成王败寇:从SaaS到SDN 【直击美国云计算】谷歌Jeff Dean:成功的关键是专注 致远V5发布:强调大协同,企业移动化真来了 Mailbox:六星期实现从零到百万用户及日处理亿条消息 代码审查,也要天时地利人和 Clash of Clans产品总监:游戏中的商品定价一开始就要高 移动互联网最核心的竞争是:设计的竞争 【直击美国云计算】面对AWS,VMware不会畏缩 美国白宫任命Twitter法务总监Nicole Wong为副CTO Keek宣布推出首款视频Update API 专访阿里前端工程师:淘宝移动Web开发那些事儿 【直击美国云计算】为什么eBay用燃料电池来驱动他的犹他州数据中心 【直击美国云计算】6周发布新产品,LinkedIn的trunk-based开发 移动周报:疯狂吐槽还是更得欢心?细数iOS 7的是与非 国内最受欢迎的开源项目集锦 开始3D编程前需注意的十件事 [CTO俱乐部第100期]软件平台的新思维及2345技术团队管理经验分享 失败怪圈:今天的移动App在重蹈1999年的覆辙 极客编程必备的五大PHP开发应用 Oracle或将宣布与Salesforce.com,NetSuite以及微软结盟 取ADO的recordset对象的recordcount属性总是 -1,如何解决? 这样的网络游戏一个值多少钱?请报价。 软件发布:《加密樵夫》 软件发布:《加密樵夫》 谁有Dreamweaver4.0的注册码,我晕,555555555…~~~~~~~~~ 我曾在本论坛看到一篇“用纯ASP代码实现图片上传并存入数据库中”的文章,可是怎样实现一个页面上传多幅图片呢,高手能否帮忙看一下? 如何检测一个超链接是不是死链接 软件发布:加密专家系统 只要点一下,妹妹我就以身相许 谁有Dreamweaver4.0的注册码,我晕,555555555…~~~~~~~~~11 请问只要是线程就有消息队列,还是此线程产生window后才有消息队列?在控制台程序中,在消息循环中,当受到一wm_timer消息时,此消息将发送给那一window procedure? 软件发布:三维几何画板 CSDN有徐州的朋友吗 请教高手一个关于图像格式的问题 高手清帮忙:如何获得一个控件的电子签名认证?急,急,急! 觅有时间有经验用MAPINFO开发GIS的高手? IE 能不能同时浏览2种以上不同设置的网页? 初级asp问题 询问-----上海在哪里有软件考试报名? 怎样用SDK的方法改变文本框的前景色和背景色?(内空) 能推荐几个有关COM、ActiveX技术的网站吗?每个10分不够再加。 请问ljhua,ASP网页怎样调用*.bat文件,是服务器上的还是客户机上的bat? ****************** 先散掉点分,省得走的时候累赘 ****************** UNICODE和WinMain 一个空战游戏,附源程序! 创建WebSnap应用程序(一) 请教一个http错误号 vs.net安装(2) 请教高手,怎样使用信使服务向局域网内的其他用户发通知? 使用过DeviceIoControl的高手请进: 不知用过jbuilder5的朋友有何感想 如何用程序中断拔号连接? DLL调用 搞什么鬼?不给超过三次? ADOTable如何查询数据? 软件发布:小精灵 vcguy,come on! 我在用resin做标签库时遇到问题,请大家帮忙。 没有源代码的情况下,由*.DLL该如何生成相应的*.LIB文件? 那位先生对 Oracle Spatial比较感兴趣~~~~~~~~~~~~ 如何在电子邮件中加入JAVA语句,重谢!!! 我不知道~ 竟猜: 成精的狐狸不是狐狸mm就是狐狸jj。那HolyFire 是狐狸jj还是狐狸mm呢?? 软件发布:图标精灵 请问在网上怎样发传真! 为何我的表只能做一页 怎样从显示名称获得它的PItemIDList ********如何在窗体中动态的创建组建?********来者有分 笔记本电脑和台式机怎样连起来传输文件! 很菜的问题,请各位指教谢谢! 花开石头你个笨鸟 我在这里那!! 将1-12分别填入图中的12个小方格内,使得每条边上的四个数的和相等,这个和最大是多少? 把19分成若干个自然数的和,如何分才能使他们的乘积最大 有一个质数,是一个两位数,两个数字之和是8,两个数字之差是2,这个质数是多少? 将-8,-6,-4,-2,0,2,4,6,8这9个数分别填入图中9个方格中,使得每行3个数,每列3个数 把19分成n个自然数的和,怎样分才能使它的乘积最大. 一个质数是两位数,其数字之差为7,这个质数是多少 任意画出由九个数组成的方框,设中间一个数为x,这九个数的和y,试用含x的代数式表示y 1.把19分成几个自然数的和,要使这些数的乘积最大,应该怎么分?最大的乘积是多少?2.甲、乙、丙三乡各出等量的钱,购买若干辆汽车,买好后,由于丙乡需要量少,结果丙乡比甲、乙两乡各少要15辆 有一个质数,是两个数字组成的两位数,两个数字之和是8,相差2,这个质数是? 如图是某月的月历,用正方形圈出九个数,设最中间一个是x,则用x表示这9个数的和是? 把19分成若干个自然数的和,如何分才能使自然数的乘积最大?最大值是多少?要算式解. 有一个质数,是两个数字组成的两位数,两个数字之和是8,两个数字之差事2,那么这个质数是几? 从月历中框出3*3九个日期,他们的和有怎样的规律?将方框向左向上移动一格,这九个数的和会发生什么变化. 把19分成几个自然数的和,这些加数的连乘积最大是? 有一个质数,是两个数字组成的两位树,两个数字之和是8,两个数之差是2,那么这个质数是几? 1/5=1/()+1/()【括号里填不同的数】 如图,机械手要将一个工件从图中A处移动到B处,但是这个工件不能碰到图中的障碍(不包括坐标轴),试用坐标写出一条机械手在移动中可能走的路程 已知四个互不相等的整数的乘积等于9,这四个数的和是? 4 4 4 4=16 顺序不变,中间要填什么符号才能等于16 设在排成每行7天的月历表中某数是a,那么它下方第1个数是几?用代数式表示.这是几次多项式? 已只4个互不相等的整数的乘积等于9这4个的和是几快 9 7 21 5 8 14 ( ) ,问:括号里填什么? 设在排成每行7天的月历表中某个数是a,那么它下方第一个数是几?用代数式表示,这是几次多项式? 一个整数和一个小数的乘积等于它们的和,求这两个数. 把1,2,3,4,5,6,7,8,9分别填空在正方形的方格 某月的月历上连续三天的日期之和不可能是( ) a.18 b.78 c.65 d.9 如何证明两个数的乘积等于最大公因数与最小公倍数的乘积 把2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1分别填在9个格子里,使横竖斜行都得8.1 你能否用方框在如图的月历中圈出9个数,使这9个数之和为171?如能,请说明理由;如不能,在下一个月的月在下一个月的月历中能否圈出?为什么? 有三个正整数一个比一个大1,三个数的乘积是210,求三个数 把0、1、2、3、4、5、6、7、8、9分别填在方框里怎样填? 口+口=口+口=口+口=口+口=口+口 在2008年12月的月历上能框出和是80的9个数吗?能框出和是180的9个数吗? 如果3个连续的正整数的乘积是210,那么这3个数分别是多少? 1、将九个连续自然数填入3*3的方格内,使得每行、每列以及每条对角线上的三个数的和都等于66.2、将图中的数重新排列,使得每行、每列以及每条对角线上的三个数的和都相等.(22 )(30 ) 2008年12月份的月历卡,一共可以框出几个不同的和?长方形的长是3,宽也是3!(每次都要框9个数) 三个连续正整数,他们的乘积是336,求这三个数. 在九个方格中填入-8、-6、-4、-2、0、2、4、6、8使每行,每列,每条对角线上的三个数等于零 在2008年12月的月历上能框出和是80的9个数吗?要方法! 三个连续的正整数,如果后两个数的乘积的差为114,求这三个数的和 将数字1,4,5,6,7,8,9分别填入如图的方格中,要求每个格子中的数字都比它左边格子中的数字和上边格子中的数字大,问:共有几种填法 将0.3;0.6;0.9;1.2;1.5;1.8;2.1;2.4;2.7九个数填在方格中,使各行个列及对角线上的三个数的和均相等 三个正整数的乘积为84,其中两个数的和等于另一个数,这三个数分别是什么? 1、2、3、4、5、6中选出四个数字,填入方格里,使得右边的数比左边的大,下面的比上面的大,几种填法?图是“田”字图 将0.3 0.6 0.9 1.2 1.8 2.1 2.4 2.7九个数填在下面的方格里,是各行各列及对角上的三个数的和均相等. 怎样修改:自然数可以分为奇数、偶数、质数、合数.(注:不能改变“自然数”、“偶数”、“合数”这几个字) 从1、2、3、4、5中选出四个数字,填入下图的方格里,使得右边的数比左边的大,下面的数比上面的数大,一共有多少种不同的填法一个3列2行的表格,最右边的一列上行是6下行是7 把-7,-5,-3,-1,1,3,5,7,9这九个数填在九个方格内使每横的三个数每竖的三个数以及对角线上的三个数的和相等 什么叫自然数 小数 百分数 奇数 偶数 质数 合数 因数 倍数 公倍数 互质数 九个方格,第一行左边一个数是3,第二行左边一个数是6右边一个数是2,在其他空格中填上什么数字才能让...九个方格,第一行左边一个数是3,第二行左边一个数是6右边一个数是2,在其他空格中填 把2,3,4,5,6,7,8,9,10这九个数填到九个方格中,使每行每列,以及对角线上的各数之和都相等 整数、自然数、小数、分数、奇数、偶数、质数、合数、因数、倍数、真分数、假分数的定义分别是什么?请回答者把以上所有的数的定义都回答上,回答的全的网友追加分! 从1,2,3,4,5中选出四个数,填入图中的方格内,使得右面的数比左边的数大,下面的数比上面的数大,那么有多少种填法,写出算式.图片为长方形分成四个填数… 0.1.2.3.4.5.6.7.8.9这一组数字当中,分别填到方框里(每个数只能用一次),使三个算式成立(至少写两个答 非零自然数按()的个数来分,可以分成质数()和() 把-1、+2、-3、+4、-5、+6、-7、+8、-9填入图所示的的方框内(3×3),使得每行每列每一条对角线上的三个数都满足:1.三个数乘积都是负数 2.三个数绝对值得和都相等. 将0、1、2、3、4、5、6这七个数字分别填入下面算式的方框内,每个方框内只许填一个数字,使算式成立( )x( )=( )( )=( )( )除( ) 两个连续的非零自然数,他们都是质数,这两个数分别是( ) ( ) 如图,在另两个方框内各填入一个数,使前两个数之和比后两个数之和小5,且三个数之和为0-3 ( )( ) 用0.1.2.3.4.5.6.7.8.9这10个数添在方框里,试下面的3个算式成立□+□〓□□―□〓□□□÷□〓□ ()和任何非零自然数都能组成互质数;两个质数的乘积一定是()
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn