1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| Public Sub Capture()
Static Wave(1) As WaveHdr, b As Integer, ncycle As Integer
For b = 0 To 1
Wave(b).lpData = VarPtr(InData(0, b))
Wave(b).dwBufferLength = LInData
Wave(b).dwFlags = 0
Next
' Premier remplissage du premier buffer
b = 0
waveInPrepareHeader DevHandle(b), VarPtr(Wave(b)), Len(Wave(b))
waveInAddBuffer DevHandle(b), VarPtr(Wave(b)), Len(Wave(b))
QueryPerformanceCounter td(0)
t0 = td(0)
'attend le remplissage du buffer
Do
DoEvents
Loop Until ((Wave(b).dwFlags And WHDR_DONE) = WHDR_DONE) Or DevHandle(b) = 0
' on entre dans la boucle où le remplissage d'un buffer se fait pendant le traitement de l'autre
b = 1
ncycle = 0
Do
QueryPerformanceCounter t
ncycle = ncycle - 1
Do ' on cherche dans quel cycle de même parité on se trouve
ncycle = ncycle + 2
DoEvents
Loop Until t < t0 + ncycle * Périodeperf
Do ' on attend la fin de ce cycle
QueryPerformanceCounter t
DoEvents
Loop While t < t0 + ncycle * Périodeperf
DoEvents
waveInPrepareHeader DevHandle(b), VarPtr(Wave(b)), Len(Wave(b))
waveInAddBuffer DevHandle(b), VarPtr(Wave(b)), Len(Wave(b))
QueryPerformanceCounter td(b)
Form1.Nocycle = ncycle
Form1.Tmps = 1000 * (td(b) - t0) / freq
'traite l'autre buffer
traite (1 - b)
'Positionne ce qu'il faut pour ré-utiliser le buffer
DoEvents
waveInUnprepareHeader DevHandle(1 - b), VarPtr(Wave(1 - b)), Len(Wave(1 - b))
'attend le remplissage du buffer (précaution)
Do
DoEvents
Loop Until ((Wave(b).dwFlags And WHDR_DONE) = WHDR_DONE) Or DevHandle(b) = 0
DoEvents
If DevHandle(b) = 0 Then Exit Do ' signal de sortie de la boucle
b = 1 - b
Loop While DevHandle(b) <> 0
End Sub |
Partager