聲音如何編程
『壹』 怎樣編程能讓音箱發出指定頻率的聲音運行時頻率可以任意改變(100-1000之間) 用VB、C、C++、C#都可以
樓上正解!
----------------------------------
VB版的
Public Declare Function APIBeep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, _
ByVal dwDuration As Long) As Long
'控制計算機發出一個聲音 dwFreq(聲高) dwDuration(聲長)
private sub main()
call apibeep(250,200)'這樣揚聲器就發出你可以控制的聲音了,如果沒有安裝音效卡 則從主板小喇叭上發出
end sub
『貳』 如何用Pascal語言進行聲音編程
Turbo pascal 聲音編程
一、使用Pascal進行聲音操作前的准備
首先需要說明的是我們所說的Pascal聲音操作,並不是指實現Pascal對於音效卡進行操作,而是利用Pascal對計算機的PC喇叭操作,使它發出聲音。
在Turbo Pascal中有一個叫做CRT單元的東西,CRT單元實現了一系列強大的可以充分地控制你計算機的功能CRT單元提供了控制顯示模式、擴展鍵盤代碼、顯示顏色、窗體和聲音的功能。
若是要在Turbo Pascal中實現聲音操作,就必須要調用CRT單元。那麼怎麼樣來調用CRT單元呢?現在介紹一下單元調用語句:USES
USES的語法:
USES 單元表識符,……,單元表識符;
說明:
擴展名為*.TPW是Windows下的單元文件,*.TPU是DOS下的單元文件。
二、Pascal聲音操作的全部——三個過程
其實,Pascal的聲音操作是十分簡單的,一共可以使用的過程也只有3個,由此可見,你可以用很少的時間使你的PC喇叭發出你所希望的長度、你所希望的頻率的聲音
(1)SOUND過程
調用SOUND的方法: SOUND(HZ);
說明:在調用SOUND的時候,它的參數HZ必須是WORD,也就是說變數HZ必須在0~65535這個范圍中,變數HZ就是使PC喇叭遲碧發出等於HZ變數數值的頻率的聲音,由此可見人耳可以聽見的范圍遠遠小於這個范圍。
(2)DELAY過程
調用DELAY的方法: DELAY(TIME);
說明:當你在調用了SOUND過程之後,必須指定它發出變數HZ所指定的頻率的聲音的時間長度,DELAY就是用來指定這個長度的過程,變數TIME必須是大於等於零的整數,並且當TIME=1000時,它所延遲的時間是1秒,也就是說TIME的單位是千分之秒。
(3)NOSOUND過程
調用DELAY的方法: NOSOUND;
說明:NOSOUND是一個無參過程,它的作用從過程名上就可以看出——用來使PC喇叭停止發聲,在調用SOUND之後,最好是要調用NOSOUND使PC喇叭停止發聲。
例:用於上過程編寫一個警報程序:
PROGRAM Alert;
USES Crt;
VAR
Hz : Word;
Count : Word;
BEGIN
REPEAT
Count:=Count+1;
Hz := 262;
WHILE Hz <= 524 DO
BEGIN
Sound(Hz);
Delay(2);
Hz := Hz + 1;
END;
UNTIL Count = 10;
Nosound;
END.
注意,在不同的機器上發出的聲音碼大舉有所差異。這是因為計算機主頻不同。還有,在試驗這個程序,或者說試驗這種發聲程序之前,最好先准備一個調用NOSOUND使PC喇叭仿培停止發聲的簡單程序,以免異常中斷,使喇叭響個不停。
========================= ========================
可以使用CLRSCR函數在需要處清屏
不過如果要使用 CLRSCR(清屏過程,在 DOS單元中)的話,必須在程序頭部加上: USES DOS;
『叄』 如何針對音效卡編程發出特定頻率的聲音
蜂鳴器編程的話,有個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
『肆』 如何用C語言編一個發出聲音的程序
這個唱 多來米法少
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
main()
{
Beep(523,500);
Beep(587,500);
Beep(659,500);
Beep(698,500);
Beep(784,500);
Beep(880,500);
Beep(980,500);
Beep(1060,500);
Sleep(500);
Beep(523,500);
Beep(587,500);
Beep(659,500);
Beep(698,500);
Beep(784,500);
}