симметрична для устройств ввода и вывода, разработчики Microsoft по непо-
нятной причине разделили названия функций для устройств ввода
и вывода: каждая функция имеет префикс, состоящий из типа и «ориентации»
устройства: midiIn, waveOut и т. п. С одной стороны, это способствует защите
от ошибок, но с другой – усложняет создание универсальных функций и клас-
сов, в которых направление передачи задается параметром.
Главным недостатком звуковой подсистемы MME, реализованной
в Windows 9x, является то, что подсистема и ее драйверы так и остались
16-разрядными, как и в Windows 3.x. Из-за этого каждое обращение к звуковому
драйверу из Win32-приложения сопровождается двойной сменой режима испол-
нения (thunking), что приводит к дополнительным временным расходам, которые
могут доходить до единиц миллисекунд. Кроме того, многие драйверы ограничи-
вают частоту обновления кольцевого буфера, через который идет обмен между
компьютером и адаптером, до нескольких десятков раз в секунду, отчего в процес-
се передачи звука возникает отставание (latency). У драйверов для адаптеров ISA
это отставание может достигать десятков миллисекунд, у драйверов для адаптеров
PCI оно обычно ограничивается единицами миллисекунд.
Для более оперативного вывода звука, особенно с модификацией его
в реальном времени, в Microsoft разработан более новый интерфейс –
DirectSound. Этот интерфейс призван «приблизить» аппаратуру адаптера
к прикладной программе и позволяет ей практически напрямую записывать
звук в системный кольцевой буфер, сводя максимальные задержки к единицам
миллисекунд для любого адаптера. При работе с DirectSound программа обра-
щается непосредственно к 32-разрядному системному драйверу адаптера
(VxD), минуя переключения между 32- и 16-разрядным режимом исполнения.
В целях эффективной работы интерфейс DirectSound должен поддерживаться
системным драйвером адаптера. Для устройств, драйверы которых не поддер-
живают DirectSound, Windows эмулирует новый интерфейс «поверх» обычного
MME-драйвера, но в этом случае все задержки даже возрастают из-за наклад-
ных расходов на эмуляцию.
К сожалению, Microsoft разработала спецификацию расширения Direct-
Sound для звуковых VxD только в части воспроизведения звука, действуя пре-
жде всего в интересах производителей игр. Запись звука через DirectSound до
сих пор ведется путем эмуляции поверх MME.
Следует отметить, что звуковая подсистема Windows 3.x. и 9x, равно как
и подсистема удаленного доступа к сети (RAS), обладает низкой устойчиво-
стью к ошибкам. Это чаще всего проявляется в том, что при аварийном завер-
шении программы, открывшей звуковые устройства и работающей с ними,
система не выполняет корректного закрытия (cleanup) используемых уст-
ройств. В результате этого в ряде случаев после такого аварийного завершения
может потребоваться перезагрузка, а до тех пор незакрытые устройства будут
недоступны другим приложениям. Кроме того, 16-разрядные подсистемы за-
щищены от ошибок гораздо меньше 32-разрядных, так что серьезные ошибки
в звуковых программах могут приводить к сбоям и «зависаниям» всей системы
139