Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Пропуски при записи звука при помощи waveInOpen

22K
21 января 2007 года
kikach
1 / / 14.11.2006
Код:
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


Вот это выполняется отдельным потоком, но звук записывается не подряд, а 10 мс записалось звука, потом запись останавливается примерно на 1 мс, и опять 10 мс записывается (образно говоря, у меня длины буфера другие). Это видно по полученной синусоиде. Каждые 512 выборок меняется фаза. Подскажите что я тут не так делаю, очень надо чтобы не было никаких пропусков.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог