È difficile ottenere un beep continuo... si sentono necessariamente i "salti" tra una chiamata e l'altra di BeepAPI. In ogni caso ecco una parziale soluzione:
codice:
Option Explicit
Private Declare Function BeepAPI Lib "kernel32" Alias "Beep" (ByVal dwFrequency As Long, ByVal dwMilliseconds As Long) As Long
Private Sub cmdStart_Click()
Timer1.Enabled = True
End Sub
Private Sub cmdStop_Click()
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
Dim freq As Long
freq = CLng(txtFreq.Text)
BeepAPI freq, Timer1.Interval
End Sub
Private Sub txtFreq_Validate(Cancel As Boolean)
On Error Resume Next
Dim tlng As Long
Err.Clear
tlng = CLng(txtFreq.Text)
If Err.Number Then MsgBox "Inserire un numero intero.", vbCritical, "Errore": Cancel = True
End Sub
(dove Timer1 è un Timer con la proprietà Interval impostata a 10, cmdStart è il pulsante di avvio, cmdStop è il pulsante di stop e txtFreq è la casella di testo in cui inserire la frequenza).
Circa la domanda 3, devi ricorrere ad altre API per interfacciarti con la scheda audio per ottenere il risultato che desideri.