Red de conocimiento informático - Conocimiento informático - Cómo programar una tarjeta de sonido para producir sonidos de frecuencias específicas

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