如题,是指由系统产生的,不是WAV等文件形式的,不是beep。有个参考例子:http://dike.6168.net/qzsa/sweepgen.zip
请教用什么办法(API)能实现这个发声功能?谢谢!

解决方案 »

  1.   

    能详细些吗?
    waveOut函数是WAV的吧,音频范围从20HZ到22000HZ,如果每个频率做一个WAV文件,那软件岂不是要几张光盘才放得下?
      

  2.   

    用api函数beep:
    【VB声明】
      Private Declare Function Beep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long【说明】
      用于生成简单的声音 
    【返回值】
      Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError 
    【备注】
      在windows95中,这个函数简单的播放默认系统响铃
    【参数表】
      dwFreq ---------  Long,声音频率(从37Hz到32767Hz)。在windows95中忽略
      dwDuration -----  Long,声音的持续时间,以毫秒为单位。如为-1,表示一直播放声音,直到再次调用该函数为止。在windows95中会被忽略
      

  3.   

    由于vb中存在同名函数,一般我们需要修改它的函数名称,下面是一个例子:
    Private Declare Function apiBeep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
    Private Sub Command1_Click()
          ' Attempt to play a note at 800 Hz for 2 seconds.  This will only
        ' behave this way on Windows NT/2000; users of Windows 95/98 will only hear the
        ' default sound.
        Dim retval As Long  ' return value
        retval = apiBeep(800, 2000)  ' ideally, an 800 Hz tone for 2 seconds
    End Sub
      

  4.   

    Beep在WIN9X中是没什么用的,有没有其它的函数实现这个功能?
      

  5.   

    是不是想通过敲击键盘奏出一段乐曲?
    如果是的话,我明天把我那本书上的代码给你抄上来.
    我现在已经不从事IT了,并且我以前做的是VC和DELPHI,没做过VB,但我对VB很感兴趣.
    那本书上的代码我也没试过,不知道能通过不,恐怕你得费一番工夫调试.
      

  6.   

    谢谢 COM1。
    不是做音乐,是想做个简单的音频信号发生器,目的和我找到的那个程序一样。但我要做个内嵌在我程序中的,不是调用别人的程序。
      

  7.   

    那个有代码?能否给我一个
    [email protected]
      

  8.   

    Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
    【操作系统】
    Win9X:Yes
    WinNT:Yes【说明】
      用于生成简单的声音 【返回值】
      Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError 【其它】
      在windows95中,这个函数简单的播放默认系统响铃【参数表】
      dwFreq ---------  Long,声音频率(从37Hz到32767Hz)。在windows95中忽略
      dwDuration -----  Long,声音的持续时间,以毫秒为单位。如为-1,表示一直播放声音,直到再次调用该函数为止。在windows95中会被忽略
      

  9.   

    这个功能从QBASIC中就有,但到了Window下不一样了。所以不会用了。
    BEEP还可以用,只不过不是机箱蜂鸣器了,而是系统定义的声响,好像是默认的那个。
      

  10.   

    小小的问题难倒了一大堆人哟。真让人头痛,好象是要调用DirectX才行,可是咱不懂DirectX。哪位高手能做个例子吗?小弟先行拜谢了……
      

  11.   

    我的机器坏了,懒的去修(关键是没钱)
    现在是别人的机器,上面没有VB,并且也不方便下载东西,所以你最开始给的实例我没办法看到.
    不过还是把这段代码放上去,也许有的哥们用得着.
    ///////////////////////////////////////////////////
    1.引入下面四个API函数或过程:
      OpenSound,CloseSound,SetVoiceNote,StartSound
    2.在Form1中放一个由7个按钮组成的控件数组:
    Sub Command1_Click(Index As Integer)
      a%=OpenSound()
      Select Case Index
        Case 0: f=37
        Case 1: f=39
        Case 2: f=41
        Case 3: f=42
        Case 4: f=44
        Case 5: f=46
        Case 6: f=48
      End Select
      m1%=SetVoiceNote(1,f,4,0)
      m2%=StartSound()
    End Sub
    /////////////////////////////////////////////////
    改一下,放入键盘事件中,即可实现奏乐.
    请用过并调试过的朋友,给出最后的代码.
      

  12.   

    晕,我要的不是电子琴,是纯正弦波音频,用来做音频信号发生器及扫频的……
    不过还是要谢谢 COM1的热心帮助。
      

  13.   

    //.引入下面四个API函数或过程:
      OpenSound,CloseSound,SetVoiceNote,StartSound不行的这几个api函数在win32中已经废弃不用了,事实上,上面这几个函数最开始由windows 1.0定义,实际能在windows 2.0中工作,在windows 3.x里事实上已被废弃(尽管仍能支持),直至最后完全消亡
      

  14.   

    我只是大体上知道有这样一种办法,没具体作过:
    可以使用一些低阶的api函数,在内存中生成波形数据,然后送到声卡,然后再生成,再送到声卡建议查询下列函数的用法:
    waveOutOpen
    waveOutPrepareHeader
    waveOutClose
    waveOutReset
    waveOutUnprepareHeader
      

  15.   

    risingo(Z_Z) Win98能用?是Windows2098版吧 ^-^
      

  16.   

    GZ,要是那位能研究出在内存中播放MP3或MIDI(这个最难搞了)就爽了!