Основы программирования в Win32API. Марапулец Ю.В. - 134 стр.

UptoLike

Составители: 

делается циклическим (кольцевым). Это означает, что пока одна сторона
(адаптер или ЦП) ведет запись первой половины буфера, другая сторона
должна успеть прочитать данные из второй половины, и наоборот. Если быст-
родействия ЦП или драйвера не хватает или нарушается правильная работа
системы аппаратных прерываний, то записываемый звук теряется, а воспроиз-
водимыйзацикливается. Зацикливание короткого фрагмента воспроизводи-
мого звукатипичный признак неверного выбора линии прерывания для
адаптера или неисправности в системе прерываний.
Взаимодействие приложения с драйвером организуется в виде взаимного
обмена потоками звуковых данных в реальном времени. От устройства ввода
к приложению идет непрерывный поток записанного звука, от приложения
к устройству выводанепрерывный поток воспроизводимого. Приложение
должно успевать принимать записываемый поток и формировать воспроизво-
димый, иначе в звуковых потоках возникают выпадения и помехи.
Звуковой буфер служит для переноса потоков между приложением
и звуковым драйвером. Он представляет собой область памяти, в которой хра-
нится небольшой фрагмент потока длительностью в десятки-сотни миллисекунд.
Звуковые буферы создаются приложением и затем передаются драйверу: пустые
для устройств ввода; заполненные звуковыми даннымидля устройств выво-
да. Драйвер ставит полученные буферы в очередь в порядке поступления; вос-
произведение или запись данных ведется с начала очереди.
После завершения обработки каждого очередного буфера драйвер воз-
вращает его приложению. С этого момента буфер доступен для повторного
использования: он может быть заполнен новыми данными и снова передан
этому же или другому звуковому устройству для постановки в очередь. Таким
образом, между драйвером и приложением происходит циклическое «враще-
ние» буферов, в которых переносятся звуковые потоки.
Для каждого звукового буфера приложением также создается заголовок
(header) – дескриптор, куда заносятся параметры буфера и режимы его обра-
ботки. Обмен буферами между приложением и драйвером происходит в виде
обмена их дескрипторами. Если к моменту завершения обработки буфера уст-
ройства вывода в очереди не имеется следующего буфера, то в выходном зву-
ковом сигнале возникает пауза, но вывод потока не прерывается. Если про-
грамма не успевает передать драйверу очередной буфер для устройства
записи, то фрагмент сигнала теряется.
Звуковые устройства делятся на синхронные и асинхронные. Синхронному
устройству для выполнения операций записи/воспроизведения требуются все
ресурсы центрального процессора. Драйвер такого устройства, получив оче-
редной буфер, не возвращает управления до тех пор, пока буфер не будет за-
полнен или проигран. В очереди драйвера синхронного устройства может на-
ходиться только один звуковой буфер. Асинхронное устройство работает
независимо от центрального процессора, обрабатывая данные в выделенной
области памяти и лишь изредка (один раз в несколько десятков миллисекунд)
134
делается циклическим (кольцевым). Это означает, что пока одна сторона
(адаптер или ЦП) ведет запись первой половины буфера, другая сторона
должна успеть прочитать данные из второй половины, и наоборот. Если быст-
родействия ЦП или драйвера не хватает или нарушается правильная работа
системы аппаратных прерываний, то записываемый звук теряется, а воспроиз-
водимый – зацикливается. Зацикливание короткого фрагмента воспроизводи-
мого звука – типичный признак неверного выбора линии прерывания для
адаптера или неисправности в системе прерываний.
     Взаимодействие приложения с драйвером организуется в виде взаимного
обмена потоками звуковых данных в реальном времени. От устройства ввода
к приложению идет непрерывный поток записанного звука, от приложения
к устройству вывода – непрерывный поток воспроизводимого. Приложение
должно успевать принимать записываемый поток и формировать воспроизво-
димый, иначе в звуковых потоках возникают выпадения и помехи.
     Звуковой буфер служит для переноса потоков между приложением
и звуковым драйвером. Он представляет собой область памяти, в которой хра-
нится небольшой фрагмент потока длительностью в десятки-сотни миллисекунд.
Звуковые буферы создаются приложением и затем передаются драйверу: пустые
– для устройств ввода; заполненные звуковыми данными – для устройств выво-
да. Драйвер ставит полученные буферы в очередь в порядке поступления; вос-
произведение или запись данных ведется с начала очереди.
     После завершения обработки каждого очередного буфера драйвер воз-
вращает его приложению. С этого момента буфер доступен для повторного
использования: он может быть заполнен новыми данными и снова передан
этому же или другому звуковому устройству для постановки в очередь. Таким
образом, между драйвером и приложением происходит циклическое «враще-
ние» буферов, в которых переносятся звуковые потоки.
     Для каждого звукового буфера приложением также создается заголовок
(header) – дескриптор, куда заносятся параметры буфера и режимы его обра-
ботки. Обмен буферами между приложением и драйвером происходит в виде
обмена их дескрипторами. Если к моменту завершения обработки буфера уст-
ройства вывода в очереди не имеется следующего буфера, то в выходном зву-
ковом сигнале возникает пауза, но вывод потока не прерывается. Если про-
грамма не успевает передать драйверу очередной буфер для устройства
записи, то фрагмент сигнала теряется.

    Звуковые устройства делятся на синхронные и асинхронные. Синхронному
устройству для выполнения операций записи/воспроизведения требуются все
ресурсы центрального процессора. Драйвер такого устройства, получив оче-
редной буфер, не возвращает управления до тех пор, пока буфер не будет за-
полнен или проигран. В очереди драйвера синхронного устройства может на-
ходиться только один звуковой буфер. Асинхронное устройство работает
независимо от центрального процессора, обрабатывая данные в выделенной
области памяти и лишь изредка (один раз в несколько десятков миллисекунд)

                                   134