Cómo programar una tarjeta de sonido para producir sonidos de frecuencias específicas
Para la programación del timbre, existe una función API y la declaración en VB es
Declarar función Beep Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
El método de llamada es Frecuencia del sonido del pitido, duración (en milisegundos)
Por ejemplo, pitido 2000, 1000
Si es Para la programación de una tarjeta de sonido, también hay funciones API correspondientes. Por ejemplo, puede usar DirectSound (que es parte de DirectX), que es relativamente potente y profesional. De hecho, si utiliza una tarjeta de sonido y un equipo de audio de calidad profesional, puede reproducir sonidos más allá del alcance del oído humano dentro de un rango determinado.
Por supuesto, también puede utilizar una API más simple. Aquí hay algunas funciones requeridas:
Función de declaración privada midiOutGetDevCaps Lib "winmm.dll" Alias "midiOutGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As MIDIOUTCAPS. , ByVal uSize As Long) As Long
Función de declaración privada midiOutGetNumDevs Lib "winmm" () Como entero
Función de declaración privada MIDIOutOpen Lib "winmm.dll" Alias "midiOutOpen" (lphMidiOut mientras, ByVal uDeviceID mientras, ByVal dwCallback mientras, ByVal dwInstance mientras, ByVal dwFlags mientras) Mientras
Función de declaración privada midiOutClose Lib "winmm.dll" (ByVal hMidiOut mientras) As Long
Función de declaración privada midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long
Función de declaración privada midiOutGetErrorText Lib "winmm.dll" Alias "midiOutGetErrorTextA" (ByVal err As Long, ByVal lpText As String, ByVal uSize As Long) As Long
Private Const MAXERRORLENGTH = 128 ' longitud máxima del texto de error (incluido NULL)
Private Const MIDIMAPPER = (- 1)
Private Const MIDI_MAPPER = (-1)
'La estructura MIDIOUTCAPS describe el rendimiento del dispositivo de entrada de interfaz digital de instrumentos musicales (MIDI)
Escriba MIDIOUTCAPS
wMid como entero
wPid como entero ' ID del producto
vDriverVersion como largo ' Versión del dispositivo
szPname As String * 32 ' Nombre del dispositivo
wTechnology As Integer ' Tipo de dispositivo
wVoices As Integer
wNotes As Integer<
/p>
wChannelMask como entero
dwSupport como largo
Tipo de fin
Sub note_on(ch como entero, ByVal kk como entero, v como Integer)
' función principal de pronunciación. Los parámetros son número de canal, tono, velocidad
Llamar a midi_outshort(amp; H90 ch, kk, v)
End Sub
Sub midi_outshort(b1 As Integer , b2 como entero, b3 como entero)
Dim midi_error como entero
midi_error = midiOutShortMsg(hMidi, b3 * amp; H10000 b2 * amp; H100 b1)
Si no midi_error = 0 Entonces
Llamar a midi_outerr(midi_error)
Finalizar si
Fin Sub
Sub midi_outerr(ByVal midi_error Como entero)
Atenuar s como cadena
Atenuar x como entero
s = Espacio(MAXERRORLENGTH)
x = midiOutGetErrorText(midi_error , s, MAXERRORLENGTH)
MsgBox s
End Sub