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

UptoLike

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

сообщая драйверу о завершении обработки очередного фрагмента потока.
Драйвер асинхронного устройства возвращает управление сразу же после по-
лучения очередного буфера, и в его очереди может находиться сколь угодно
большое количество буферов.
Звуковые адаптеры, способные одновременно записывать и воспроизво-
дить различные звуковые потоки, называются полнодуплексными (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