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

利用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.
谷歌Android主管:两周内为开发者推出可穿戴设备SDK 【OSTC讲师专访】魏子钧: “中国式开源”没有“然后” 揭秘CarPlay欲将颠覆汽车产业的真相 联想王岳源:利用Web App推动互联网转型 IT经理人:提高团队工作效率的11个方法 30美元一小时,数据科学家的收入是否太低? 选择Go语言的12个理由 动鱼数码携三款大作参战Unity游戏及应用大赛 从Google、Apple、Dropbox、Twitter和Square学到的管理哲学 软件开发就像炒股,关键看你怎么选股票! iOS 7.1正式版:新增CarPlay连接功能、完美支持iPhone 4 【OSTC讲师专访】马全一:Docker,Hadoop的竞争者来了! 福布斯:全球那些富可敌国的科技大佬们 抢工作、争资源,如此聪明的AI你拿什么阻止? iUI:移动Web应用开发必备的开源框架 支持iOS 7.1!苹果发布Xcode 5.1更新 视频云将成为2014年乐视新的发力点 3月12日:万维网迎来理念诞生25周年 《近匠》云适配CEO陈本峰:跨屏移动,曲线一样救国 Intel陈荣坤:赢取移动市场的几个先决条件 而立之年,开发者在害怕什么? 首席工程师揭秘:LinkedIn大数据后台是如何运作的 年交易额1800亿美元,揭秘PayPal成功背后的三大热门技术 微软妥协Android?向该平台推开源Office 365 SDK 中国云计算大会PPT集萃(一):众多名家分享技术挑战与行业趋势 速度是现在的10000倍,出自物理学家之手的新型电脑 逗你玩?淘宝开放平台从4月1起开始全面收费 出现编程疲劳?千万别纠结 “编程竞赛界王子”教你更好的招聘程序员 SA:三星全球智能电视市场份额达26% Cocos2d-x 3.0分语言包发布 最新进展即将披露 有做网格控件经验的请进 请教一个数据库的小问题 各位高手帮帮我! 高手来帮忙!!! 菜鸟提问:怎样从HBITMAP获得BMP的尺寸?(SDK) 请帮忙。 请问一个关于photoshop的问题,多谢指教100分 vb excel 关于MFC多文档在何处放置自已的初始化文档的代码? 今年又是一个人过中秋,终于想找个GF了! 电影画面倒置是怎么回事? 如何将pbyte指向的byte数据传递给byte数组或char等 送分 为中秋节还工作在自己岗位上的朋友散分! 送分 cgi---這裡有多少個寫法?? 送分 gcc编译好的程序怎么运行阿? 关于多文档的问题:如何固定视窗大小? 替换字符串 初学VC的困惑——什么是标准C?? 一个小数,如何确定小数点的位数? 菜单乱码,求救! 怎样调用delphi编的DLL中的函数 关于XP操作系统中的imail 服务器的配置问题 請問有多少個寫法?????在线等待!急啊! to 思归 ,VIEWSATE的那个问题,无人回答,我贴出代码了,你看看, substring(indexA, indexB) 的官方解释不明白 请教大师两个问题 卷积是什么意思?请介绍一下这方面的资料? 用户界面与开发环境怎样脱离????? ASE 12.5.0 FOR NT安装问题。。。 没分了,但还得提这个问题? ComboBox问题? combobox问题? 散分 发现QQ一个惊人的大秘密!!!! 请教yahoo上 点一下“セキュア(SSL)”怎么会使网站可以进行ssl加密??怎么做到的? 中秋节的晚上还在SQL版上晃的朋友进来 一个菜鸟问题 超级简单的问题 Win2000的开机画面,能改吗 中秋快乐!!!怎么样录制清楚无杂音的音效?帮个忙,多谢了!!!等待…… 一个很简单的问题 hash算法可逆吗? 过节了,特来散分,祝大家中秋愉快。 中秋节了,给父母打电话,可是现在每次都说不到一块儿去…… JBUILDER中如何声明全局及私有变量? Let's Celebrate !!! 虚拟内存是设置越大越好吗? 请求算法?关于串口读写速度问题。 跪求出卖笑的孩子读后感500字.TAT 求55篇《水浒传》或《三国演义》的读后感或赏析!TAT! 五年级上册语文第四单元习作题目是什么 林书豪的励志小故事要求:1.短文100~300字 2.励志 3.能让人思考 4.不要简介 5.有描写谢谢大家! 我的大学好词好句 我的大学好词好句好段 妈妈买回一篮桃子,小云吃了一半少2个,剩下的爸爸妈妈各吃一半,结果三人吃桃子的个数一样,小云吃了多少个?不用方程 妈妈买回一篮桃子,小云吃了一半少2个,剩下的爸爸、妈妈各吃了一半,结果三人吃桃子的个数同样多,小云吃了多少个?算式 x的平方加x减2011等于0 的两根是x1和x2则 x1的平方加2x1减2011乘x2的平方加2x2减2011的值为 红楼梦第六十二回,关于酒令的问题六十二回上行的酒令是“射覆”,请高人指点何为射何为覆,本人愚钝,请详解, 现在买iPhone4s怎么样?感觉iPhone5不好看,现在买4s还OK没 北约演习太逼真曾险些引发核战世界俄罗斯人民大会授予普京捍卫大国地美国务卿称沙特系中东领导 两国关系须挪威一公交车遭持刀男子挟持 造成3人美国一州立大学遭持枪者闯入 警方已将斯诺登谴责美英情报机构为“最恶劣的侵叙政府称:日内瓦会议旨在让总统下台则穆尔西受审 拒穿囚服大闹法庭(图)斯诺登求美“宽大处理”被拒 在俄与德叙政府称:日内瓦会议旨在让总统下台则挪威一公交车遭持刀男子挟持 造成3人济南大停水,小区超市趁机大作水生意菏泽市纪委通报5起违反中央八项规定精甘肃庆阳:电子商务圆乡村人的“创业梦金中夏:人民币入篮SDR是中国改革与警察枪杀黑人 美夏洛特市民众继续举行“最美野长城”遭修复性破坏 我们会失民进党4个月耗光民众期待 谢金河提醒日美韩要构建对朝制裁包围网 欲说服中昆明龙舟赛期间高峣至西华街高速路易堵大姚山体滑坡续:部分线路已通车 瓦湾郎平携弟子亮相厦门 赞助商将兑现50超神猎人白银之轮求名修魔传嫡华重生之大收藏系统重生之超级男神幻想世界冒险记神魔霸道天下吹洪荒世界道重生之球王巨星柳浪闻莺旅游南山路旅游南宋御街旅游河坊街景区旅游西湖之夜旅游钱王祠旅游雷峰塔旅游西湖音乐喷泉旅游西湖旅游中山陵旅游明孝陵旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘