Страница: 1 |
Страница: 1 |
Вопрос: Пропуски при записи звука при помощи waveInOpen
Добавлено: 21.01.07 00:47
Автор вопроса: Sasha | ICQ: 45250329
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
Вот это выполняется отдельным потоком, но звук записывается не подряд, а 10 мс записалось звука, потом запись останавливается примерно на 1 мс, и опять 10 мс записывается (образно говоря, у меня длины буфера другие). Это видно по полученной синусоиде. Каждые 512 выборок меняется фаза. Подскажите что я тут не так делаю, очень надо чтобы не было никаких пропусков.
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 21.01.07 09:10
Попробуй создать циклический буфер, тут у тебя, как я понял, он только один - пока ты его обрабатываешь и происходит задержка.
Номер ответа: 2
Автор ответа:
Sasha
ICQ: 45250329
Вопросов: 1
Ответов: 1
Профиль | | #2
Добавлено: 21.01.07 12:32
Есть примерчик? Очень надо... Как раз этого момента я и не догнал
Номер ответа: 3
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #3
Добавлено: 21.01.07 12:35
Если не жалко, то и сюда примерчик
AgentFire[att]mail[dot]ru