Составители:
Рубрика:
сообщая драйверу о завершении обработки очередного фрагмента потока.
Драйвер асинхронного устройства возвращает управление сразу же после по-
лучения очередного буфера, и в его очереди может находиться сколь угодно
большое количество буферов.
Звуковые адаптеры, способные одновременно записывать и воспроизво-
дить различные звуковые потоки, называются полнодуплексными (full duplex).
Соответствующие устройства ввода и вывода в Windows могут быть открыты
и использованы одновременно, и при этом встречные потоки никак не влияют
друг на друга.
Адаптеры, способные в каждый момент времени работать только в одном
режиме (либо на запись, либо на воспроизведение), называются полудуплекс-
ными (half duplex). Из соответствующей пары устройств в Windows одновре-
менно может быть открыто только одно – либо устройство ввода, либо устрой-
ство вывода. При попытке открытия второго устройства возвращается ошибка
«устройство занято».
Некоторые адаптеры обладают возможностью ограниченной полнодуп-
лексной работы, например: только в монофоническом режиме (ряд адаптеров
на микросхемах ESS), только в восьмиразрядном режиме (большинство моде-
лей Sound Blaster 16, AWE32, SB 32, AWE64) и т. п. В остальных режимах та-
кие адаптеры работают только в полудуплексе.
При завершении обработки каждого буфера драйвер устанавливает
в его заголовке флаг готовности, по которому приложение может определить,
что драйвер освободил данный буфер. Однако для асинхронных устройств го-
раздо более эффективным способом возврата буфера является уведомление
(notification), при котором драйвер либо вызывает заданную функцию прило-
жения, либо активизирует событие (event), либо передает сообщение заданно-
му окну или задаче (thread) приложения. При этом в параметрах функции или
сообщения передается также указатель заголовка буфера.
Перед тем, как быть переданным драйверу устройства, каждый звуковой
буфер должен быть подготовлен (prepared). Как правило, подготовка заключа-
ется в фиксации буфера в памяти, так как большинство звуковых адаптеров
пользуется внепроцессорными методами передачи данных, а эти методы тре-
буют размещения буфера на одних и тех же адресах памяти. Передача драйве-
ру неподготовленного буфера приводит к ошибке.
При работе со звуковыми адаптерами чаще всего используется традици-
онный способ цифрового кодирования PCM (Pulse Code Modulation – им-
пульсно-кодовая модуляция, ИКМ). Ряд мгновенных значений звуковой ам-
плитуды, следующих друг за другом с частотой дискретизации, представляется
рядом чисел выбранной разрядности, значения которых пропорциональны ве-
личине амплитуды. Именно в таком виде звуковой поток снимается с выхода
АЦП или подается на вход ЦАП. Однако наряду с предельной простотой PCM
обладает существенной избыточностью, передавая звук настолько точно, на-
сколько это возможно при выбранных параметрах оцифровки. Зачастую при
программировании звуковых устройств на первый план выходит задача мини-
135
сообщая драйверу о завершении обработки очередного фрагмента потока. Драйвер асинхронного устройства возвращает управление сразу же после по- лучения очередного буфера, и в его очереди может находиться сколь угодно большое количество буферов. Звуковые адаптеры, способные одновременно записывать и воспроизво- дить различные звуковые потоки, называются полнодуплексными (full duplex). Соответствующие устройства ввода и вывода в Windows могут быть открыты и использованы одновременно, и при этом встречные потоки никак не влияют друг на друга. Адаптеры, способные в каждый момент времени работать только в одном режиме (либо на запись, либо на воспроизведение), называются полудуплекс- ными (half duplex). Из соответствующей пары устройств в Windows одновре- менно может быть открыто только одно – либо устройство ввода, либо устрой- ство вывода. При попытке открытия второго устройства возвращается ошибка «устройство занято». Некоторые адаптеры обладают возможностью ограниченной полнодуп- лексной работы, например: только в монофоническом режиме (ряд адаптеров на микросхемах ESS), только в восьмиразрядном режиме (большинство моде- лей Sound Blaster 16, AWE32, SB 32, AWE64) и т. п. В остальных режимах та- кие адаптеры работают только в полудуплексе. При завершении обработки каждого буфера драйвер устанавливает в его заголовке флаг готовности, по которому приложение может определить, что драйвер освободил данный буфер. Однако для асинхронных устройств го- раздо более эффективным способом возврата буфера является уведомление (notification), при котором драйвер либо вызывает заданную функцию прило- жения, либо активизирует событие (event), либо передает сообщение заданно- му окну или задаче (thread) приложения. При этом в параметрах функции или сообщения передается также указатель заголовка буфера. Перед тем, как быть переданным драйверу устройства, каждый звуковой буфер должен быть подготовлен (prepared). Как правило, подготовка заключа- ется в фиксации буфера в памяти, так как большинство звуковых адаптеров пользуется внепроцессорными методами передачи данных, а эти методы тре- буют размещения буфера на одних и тех же адресах памяти. Передача драйве- ру неподготовленного буфера приводит к ошибке. При работе со звуковыми адаптерами чаще всего используется традици- онный способ цифрового кодирования PCM (Pulse Code Modulation – им- пульсно-кодовая модуляция, ИКМ). Ряд мгновенных значений звуковой ам- плитуды, следующих друг за другом с частотой дискретизации, представляется рядом чисел выбранной разрядности, значения которых пропорциональны ве- личине амплитуды. Именно в таком виде звуковой поток снимается с выхода АЦП или подается на вход ЦАП. Однако наряду с предельной простотой PCM обладает существенной избыточностью, передавая звук настолько точно, на- сколько это возможно при выбранных параметрах оцифровки. Зачастую при программировании звуковых устройств на первый план выходит задача мини- 135
Страницы
- « первая
- ‹ предыдущая
- …
- 133
- 134
- 135
- 136
- 137
- …
- следующая ›
- последняя »