如何针对声卡编程发出特定频率的声音

恩我想针对声卡或者主板蜂鸣器编程,2种方案:
1、针对声卡编程,使声卡发出特定频率的声音,c语言,或者vb 汇编都可以,不知各位大大谁能给个源代码或者重要的提示。

2、针对主板蜂鸣器编程,使蜂鸣器发出超声波,任何语言编的都可以,给个源代码或者重要的提示。
两种都可以,当然哪位大大能2种都给出来俺一定感激不尽,狂给你分的

蜂鸣器编程的话,有个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
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-16
曾经有过这样的程序,像电子蚊香之类的,用编程实现次声波
但是,后来这种理论就被推翻了~
原因是由于硬件的局限性,声卡或则主板蜂鸣器的发声范围在硬件制造时已经限制过了
绝对发不出超声波或则次声波~

如何针对声卡编程发出特定频率的声音
调用方法是Beep 声音频率,持续时间(毫秒为单位)比如 beep 2000,1000 如果是声卡编程的话,也有相应的API函数,比如你可以用DirectSound(也就是DirectX的一部分),功能比较强大,也很专业。事实上,如果你使用的是专业级的声卡和音响设备,它可以在一定范围内回放出超出人耳听觉范围的声音。当然也可以用...

如何用VC++或者VB编程控制声卡发出想要频率的声音?
设单击Command1时发出频率为500㎐,持续时间为1秒的声音。代码如下。--- Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long Private Sub Command1_Click()Beep 500, 1000 '500表示频率,单位为㎐;1000表示持续时间,单位为...

如何编程控制声卡发音
如果说你是要控制发音频率,应该用windowAPI的Beep函数了 声明如下:Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long,ByVal dwDuration As Long) As Long beep 有两参数 参数1、Long,声音频率(从37Hz到32767Hz)。参数2、Long,声音的持续时间,以毫秒为单位。如为-1,表示...

怎样编程能让音箱发出指定频率的声音?运行时频率可以任意改变(100-1000...
'控制计算机发出一个声音 dwFreq(声高) dwDuration(声长)private sub main()call apibeep(250,200)'这样扬声器就发出你可以控制的声音了,如果没有安装声卡 则从主板小喇叭上发出 end sub

如何制造特定频率的声波
方法很多很多,下面是两种比较精确的方法,精度都可以达到小数点后1位。硬件法:1、DDS信号发生器一台,用来产生特定频率的正弦波;2、音频功率放大器一块(电路板),用来对电信号进行放大;3、与功放匹配的扬声器(喇叭)一个。把三个东西串联起来,然后调整DDS信号发生器的频率,在扬声器上就可以产生从...

C\/C++ 声卡编程代码
waveInOpen :打开声音输入设备; waveInPrepareHeader:预备声音输入缓冲区waveInReset :停止声音输入设备工作; waveInStart :停止声音输入设备工作waveInStop :停止声音输入; waveInUnprepareHeader : 清除预备的声音文件头需要说明的是:不同的编程工具多会含有对这些低级波形音频函数进行说明的头文件(比如在Delphi4.0中,对...

vb.net的一个问题
调用方法是Beep 声音频率,持续时间(毫秒为单位)比如 beep 2000,1000 如果是声卡编程的话,也有相应的API函数,比如你可以用DirectSound(也就是DirectX的一部分),功能比较强大,也很专业。事实上,如果你使用的是专业级的声卡和音响设备,它可以在一定范围内回放出超出人耳听觉范围的声音。当然也可以用...

电脑发出的声音频率只有3000赫兹.我需要6500赫兹的声音,我该怎么办...
纠正一下楼上的,2500Hz人类能听见,高于20000Hz以上人类就听不见了 可以通过软件,比如千千静听专业版,有专门的频率插件 楼主很Ging啊,能自己编程序 既然你的声卡和音响只能发出3000Hz的频率,肯定是要更换更好的设备的,没办法,不过一般音响应该不是问题,可能是声卡 ...

如何用Pascal语言进行声音编程
Turbo pascal 声音编程 一、使用Pascal进行声音操作前的准备 首先需要说明的是我们所说的Pascal声音操作,并不是指实现Pascal对于声卡进行操作,而是利用Pascal对计算机的PC喇叭操作,使它发出声音。在Turbo Pascal中有一个叫做CRT单元的东西,CRT单元实现了一系列强大的可以充分地控制你计算机的功能CRT单元提供...

如何编程设置systick中断发生频率
第1步:启动计算机,并按住DEL键,直到BIOS设置窗口(通常为蓝色背景,黄色英文字)。 2.选择并进入第二,“BIOS SETUP”(BIOS设置)。 BOOT文字里面找包含的物品或组,按优先顺序排列,并找到了“FIRST”“SECEND”“THIRD”三项,分别代表“第一次启动”,“第二次创业”和“第三次创业”。在这里...

相似回答