永发信息网

vb.net的一个问题

答案:2  悬赏:80  手机版
解决时间 2021-02-05 22:31
vb.net里面有一个函数beep,可以用主板喇叭发出特定频率、特定时间声音,求函数或方法可以让声音在声卡上输出。
最佳答案
蜂鸣器编程的话,有个API函数,VB中的声明为
Declare Function Beep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

调用方法是Beep 声音频率,持续时间(毫秒为单位)
比如 beep 2000,1000

如果是声卡编程的话,也有相应的API函数,比如你可以用DirectSound(也就是DirectX的一部分),功能比较强大,也很专业。事实上,如果你使用的是专业级的声卡和音响设备,它可以在一定范围内回放出超出人耳听觉范围的声音。当然也可以用简单一点的API,以下是几个需要的函数:
Private Declare Function midiOutGetDevCaps Lib "winmm.dll" Alias "midiOutGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As MIDIOUTCAPS, ByVal uSize As Long) As Long
Private Declare Function midiOutGetNumDevs Lib "winmm" () As Integer
Private Declare Function MIDIOutOpen Lib "winmm.dll" Alias "midiOutOpen" (lphMidiOut As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Private Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long
Private Declare Function midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long
Private Declare Function midiOutGetErrorText Lib "winmm.dll" Alias "midiOutGetErrorTextA" (ByVal err As Long, ByVal lpText As String, ByVal uSize As Long) As Long

Private Const MAXERRORLENGTH = 128 ' max error text length (including NULL)

Private Const MIDIMAPPER = (-1)
Private Const MIDI_MAPPER = (-1)
'MIDIOUTCAPS结构描述了Musical Instrument Digital Interface(MIDI)输入设备的性能
Type MIDIOUTCAPS
wMid As Integer
wPid As Integer ' 产品 ID
vDriverVersion As Long ' 设备版本
szPname As String * 32 ' 设备 name
wTechnology As Integer ' 设备类型
wVoices As Integer
wNotes As Integer
wChannelMask As Integer
dwSupport As Long
End Type

Public Sub note_on(ch As Integer, ByVal kk As Integer, v As Integer)
' 发音主函数。参数分别为通道编号,音调,速度
Call midi_outshort(&H90 + ch, kk, v)
End Sub

Sub midi_outshort(b1 As Integer, b2 As Integer, b3 As Integer)
Dim midi_error As Integer

midi_error = midiOutShortMsg(hMidi, b3 * &H10000 + b2 * &H100 + b1)
If Not midi_error = 0 Then
Call midi_outerr(midi_error)
End If
End Sub

Sub midi_outerr(ByVal midi_error As Integer)
Dim s As String
Dim x As Integer

s = Space(MAXERRORLENGTH)
x = midiOutGetErrorText(midi_error, s, MAXERRORLENGTH)
MsgBox s

End Sub
全部回答
PlaySound("wav文件", 0, 2) Private Declare Auto Function PlaySound Lib "winmm.dll" (ByVal lpszSoundName As String, ByVal Module As Integer, ByVal dwFlags As Integer) As Integer
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
至强电脑笔记本大世界怎么去啊,我要去那办事
下图中(Ⅰ)~(Ⅲ)分别表示不同光照强度、
如何更换14款标致408空气滤芯
我己50岁。可还是想做点啥生意,不知卖电子秤
以前女人当尼姑,男人当和尚,那现在呢怎么说
状元数码极品店地址好找么,我有些事要过去
强钳的意思是什么啊?知道的请说下!
临江市大栗子司法所地址有知道的么?有点事想
空气能热水器放出来的谁怎么是温水
曹操第一次败仗手和谁对阵
初中生进入青春期后,在学习、生活中常常会遇
哪个软件能反向看股票走势图 就是把走势图倒
德国读博士要几年
走街串巷(西亚斯店)地址在什么地方,想过去办
如何选灯具
推荐资讯
民族用品批发部这个地址在什么地方,我要处理
中国营养学会将我国成年人钙供给量定为0.8克/
美国《商业周刊》曾把美国在20世纪90年代长达
包头市2017年企业退休职工几月份九月份上涨养
想买一辆摩托,玩摩托的推荐一下
天龙动漫城地址有知道的么?有点事想过去
如何修改大学英语专八成绩、大学英语专八成绩
脊祥叁宝健康管理中心地址在哪,我要去那里办
从哪里方面能看出男朋友是不是真心爱我
古交农商银行桥西储蓄所地址在哪,我要去那里
大型双筒支架观景望远镜那个牌子的好
孩子头发立着长是怎么回事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?