Public Sub MonitorAudio()
Dim WHrec As WAVEHDR
Dim WFrec As WAVEFORMATEX
Dim Rv&
Dim x As Long
With WFrec
.wFormatTag = WAVE_FORMAT_PCM
.nChannels = 2
.wBitsPerSample = 16
.nSamplesPerSec = 8000
.nBlockAlign = (.nChannels * .wBitsPerSample) / 8
.nAvgBytesPerSec = 32000
.cbSize = BufLEN * 32000
End With
Rv = waveInOpen(hWaveIn, RecDevice, WFrec, AddressOf waveInProc, 0, CALLBACK_FUNCTION)
If Rv <> 0 Then
Exit Sub
End If
DoEvents
waveInStart hWaveIn
With WHrec
.lpData = VarPtr(WaveData(0))
.dwBufferLength = BufLEN * 32000
.dwFlags = 0
End With
waveInPrepareHeader hWaveIn, WHrec, Len(WHrec)
bBufferFull = False
waveInAddBuffer hWaveIn, WHrec, Len(WHrec)
Do
Do
DoEvents
Loop Until bBufferFull Or hWaveIn = 0
waveInPrepareHeader hWaveIn, WHrec, Len(WHrec)
waveInAddBuffer hWaveIn, WHrec, Len(WHrec)
Loop Until hWaveIn = 0
End Sub
Пропуски при записи звука при помощи waveInOpen
Код:
Вот это выполняется отдельным потоком, но звук записывается не подряд, а 10 мс записалось звука, потом запись останавливается примерно на 1 мс, и опять 10 мс записывается (образно говоря, у меня длины буфера другие). Это видно по полученной синусоиде. Каждые 512 выборок меняется фаза. Подскажите что я тут не так делаю, очень надо чтобы не было никаких пропусков.