注册 登录
编程论坛 VB6论坛

关于BEEP函数的发声问题

bobo2021 发布于 2014-01-24 22:43, 738 次点击
'声明API函数
Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Public v  '变量声明

我在笔记本上用是扬声器响

到了台式机就变成蜂鸣器响了,

怎样处理才能在耳机或扬声器发声?
6 回复
#2
alike2014-01-25 08:42
你台式机装了扬声器没?
#3
lowxiong2014-01-25 09:36
可以使用midi音色模拟,但效果没有beep好。
新建一工程,在窗口里放一个command控件,拷贝如下代码,可以从耳机里听到一个长声,两个短声的莫斯电码。

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 Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim sLen As Integer   '定义一个短电码时长,则长声为其3倍
Dim jLen As Integer   '定义码间间隔时长

Private Sub MosCode(Code As Integer)
  Dim hMidi As Long, t As Long
  Dim midi_err As Integer
  midi_err = MIDIOutOpen(hMidi, -1, 0, 0, 0)
  t = sLen
  If Code = 1 Then t = 3 * sLen
  If Not midi_error = 0 Then Exit Sub
  midiOutShortMsg hMidi, 65 * &H100 + &HC0    '更换midi音色,65是次中音萨克斯,最接近电报声
  midiOutShortMsg hMidi, &H90 + 80 * &H100 + 100 * &H10000 + 0
  Sleep t
  midiOutClose hMidi
  Sleep jLen
End Sub

Private Sub Command1_Click()
  sLen = 200: jLen = 10
  MosCode 1
  MosCode 0
  MosCode 0
End Sub
#4
bobo20212014-01-25 12:28
回复 3楼 lowxiong
效果的确不好,为什么在笔记本上是可以的?
#5
bobo20212014-01-25 12:28
回复 2楼 alike
你试了吗?
#6
bobo20212014-01-25 12:29
回复 3楼 lowxiong
不知道把台式机里的蜂鸣器折了行不行?
#7
vbvcr512014-01-26 12:47
用api函数-playsound,例如:
PlaySound "C:\WINDOWS\Media\ding.wav", 3, SND_ASYNC
1