Составители:
Взаимодействие приложения с драйвером организуется в виде взаимного обмена
потоками звуковых данных в реальном времени. От устройства ввода к приложению
идет непрерывный поток записанного звука, от приложения к устройству вывода - не-
прерывный поток воспроизводимого. Приложение должно успевать принимать записы-
ваемый поток и формировать воспроизводимый, иначе в звуковых потоках возникают
выпадения и помехи.
Звуковой буфер служит для переноса потоков между приложением и звуковым
драйвером. Он представляет собой область памяти, в которой хранится небольшой
фрагмент потока длительностью в десятки-сотни миллисекунд. Звуковые буферы соз-
даются приложением и затем передаются драйверу: пустые - для устройств ввода, за-
полненные звуковыми данными - для устройств вывода. Драйвер ставит полученные
буферы в очередь в порядке поступления; воспроизведение или запись данных ведется с
начала очереди.
После завершения обработки каждого очередного буфера драйвер возвращает его
приложению. С этого момента буфер доступен для повторного использования: он может
быть заполнен новыми данными и снова передан этому же или другому звуковому уст-
ройству для постановки в очередь. Таким образом, между драйвером и приложением
происходит циклическое «вращение» буферов, в которых переносятся звуковые потоки.
Для каждого звукового буфера приложением также создается заголовок (header) –
дескриптор, в который куда заносятся параметры буфера и режимы его обработки. Об-
мен буферами между приложением и драйвером происходит в виде обмена их дескрип-
торами. Если к моменту завершения обработки буфера устройства вывода в очереди не
имеется следующего буфера, то в выходном звуковом сигнале возникает пауза, но вывод
потока не прерывается. Если программа не успевает передать драйверу очередной буфер
для устройства записи, то фрагмент сигнала теряется.
Звуковые устройства делятся на синхронные и асинхронные. Синхронному уст-
ройству для выполнения операций записи/воспроизведения требуются все ресурсы цен-
трального процессора. Драйвер такого устройства, получив очередной буфер, не воз-
вращает управления до тех пор, пока буфер не будет заполнен или проигран. В очереди
драйвера синхронного устройства может находиться только один звуковой буфер. Асин-
хронное устройство работает независимо от центрального процессора, обрабатывая дан-
ные в выделенной области памяти и лишь изредка (один раз в несколько десятков мил-
лисекунд) сообщая драйверу о завершении обработки очередного фрагмента потока.
Драйвер асинхронного устройства возвращает управление сразу же после получения
очередного буфера, и в его очереди может находиться сколь угодно большое количество
буферов.
Звуковые адаптеры, способные одновременно записывать и воспроизводить раз-
личные звуковые потоки, называются полнодуплексными (full duplex). Соответствую-
щие устройства ввода и вывода в Windows могут быть открыты и использованы одно-
временно, и при этом встречные потоки никак не влияют друг на друга.
Адаптеры, способные в каждый момент времени работать только в одном режиме
(либо на запись, либо на воспроизведение), называются полудуплексными (half duplex).
Из соответствующей пары устройств в Windows одновременно может быть открыто
только одно - либо устройство ввода, либо устройство вывода. При попытке открытия
второго устройства возвращается ошибка «устройство занято».
Некоторые адаптеры обладают возможностью ограниченной полнодуплексной ра-
боты, например: только в монофоническом режиме (ряд адаптеров на микросхемах
ESS), только в восьмиразрядном режиме (большинство моделей Sound Blaster 16,
AWE32, SB 32, AWE64) и т.п. В остальных режимах такие адаптеры работают только в
полудуплексе.
223
Взаимодействие приложения с драйвером организуется в виде взаимного обмена потоками звуковых данных в реальном времени. От устройства ввода к приложению идет непрерывный поток записанного звука, от приложения к устройству вывода - не- прерывный поток воспроизводимого. Приложение должно успевать принимать записы- ваемый поток и формировать воспроизводимый, иначе в звуковых потоках возникают выпадения и помехи. Звуковой буфер служит для переноса потоков между приложением и звуковым драйвером. Он представляет собой область памяти, в которой хранится небольшой фрагмент потока длительностью в десятки-сотни миллисекунд. Звуковые буферы соз- даются приложением и затем передаются драйверу: пустые - для устройств ввода, за- полненные звуковыми данными - для устройств вывода. Драйвер ставит полученные буферы в очередь в порядке поступления; воспроизведение или запись данных ведется с начала очереди. После завершения обработки каждого очередного буфера драйвер возвращает его приложению. С этого момента буфер доступен для повторного использования: он может быть заполнен новыми данными и снова передан этому же или другому звуковому уст- ройству для постановки в очередь. Таким образом, между драйвером и приложением происходит циклическое «вращение» буферов, в которых переносятся звуковые потоки. Для каждого звукового буфера приложением также создается заголовок (header) – дескриптор, в который куда заносятся параметры буфера и режимы его обработки. Об- мен буферами между приложением и драйвером происходит в виде обмена их дескрип- торами. Если к моменту завершения обработки буфера устройства вывода в очереди не имеется следующего буфера, то в выходном звуковом сигнале возникает пауза, но вывод потока не прерывается. Если программа не успевает передать драйверу очередной буфер для устройства записи, то фрагмент сигнала теряется. Звуковые устройства делятся на синхронные и асинхронные. Синхронному уст- ройству для выполнения операций записи/воспроизведения требуются все ресурсы цен- трального процессора. Драйвер такого устройства, получив очередной буфер, не воз- вращает управления до тех пор, пока буфер не будет заполнен или проигран. В очереди драйвера синхронного устройства может находиться только один звуковой буфер. Асин- хронное устройство работает независимо от центрального процессора, обрабатывая дан- ные в выделенной области памяти и лишь изредка (один раз в несколько десятков мил- лисекунд) сообщая драйверу о завершении обработки очередного фрагмента потока. Драйвер асинхронного устройства возвращает управление сразу же после получения очередного буфера, и в его очереди может находиться сколь угодно большое количество буферов. Звуковые адаптеры, способные одновременно записывать и воспроизводить раз- личные звуковые потоки, называются полнодуплексными (full duplex). Соответствую- щие устройства ввода и вывода в Windows могут быть открыты и использованы одно- временно, и при этом встречные потоки никак не влияют друг на друга. Адаптеры, способные в каждый момент времени работать только в одном режиме (либо на запись, либо на воспроизведение), называются полудуплексными (half duplex). Из соответствующей пары устройств в Windows одновременно может быть открыто только одно - либо устройство ввода, либо устройство вывода. При попытке открытия второго устройства возвращается ошибка «устройство занято». Некоторые адаптеры обладают возможностью ограниченной полнодуплексной ра- боты, например: только в монофоническом режиме (ряд адаптеров на микросхемах ESS), только в восьмиразрядном режиме (большинство моделей Sound Blaster 16, AWE32, SB 32, AWE64) и т.п. В остальных режимах такие адаптеры работают только в полудуплексе. 223
Страницы
- « первая
- ‹ предыдущая
- …
- 219
- 220
- 221
- 222
- 223
- …
- следующая ›
- последняя »