Операционные системы. Учебное пособие. Марапулец Ю.В. - 225 стр.

UptoLike

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

У драйверов для адаптеров ISA это отставание может достигать десятков миллисекунд,
у драйверов для адаптеров PCI оно обычно ограничивается единицами миллисекунд.
Для более оперативного вывода звука, особенно с модификацией его в реальном
времени, Microsoft разработан более новый интерфейс - DirectSound. Этот интерфейс
призван «приблизить» аппаратуру адаптера к прикладной программе и позволяет ей
практически напрямую записывать звук в системный кольцевой буфер, сводя макси-
мальные задержки к единицам миллисекунд для любого адаптера. При работе с
DirectSound программа обращается непосредственно к 32-разрядному системному
драйверу адаптера (VxD), минуя переключения между 32- и 16-разрядным режимом ис-
полнения.
В целях эффективной работы интерфейс DirectSound должен поддерживаться сис-
темным драйвером адаптера. Для устройств, драйверы которых не поддерживают
DirectSound, Windows эмулирует новый интерфейс «поверх» обычного MME-драйвера,
но в этом случае все задержки даже возрастают из-за накладных расходов на эмуляцию.
К сожалению, Microsoft разработала спецификацию расширения DirectSound для
звуковых VxD только в части воспроизведения звука, действуя прежде всего в интересах
производителей игр. Запись звука через DirectSound до сих пор ведется путем эмуляции
поверх MME.
Следует отметить, что звуковая подсистема Windows 3.x и 9x, равно как и подсис-
тема удаленного доступа к сети (RAS), обладает низкой устойчивостью к ошибкам. Это
чаще всего проявляется в том, что при аварийном завершении программы, открывшей
звуковые устройства и работающей с ними, система не выполняет корректного закрытия
(cleanup) используемых устройств. В результате этого в ряде случаев после такого ава-
рийного завершения может потребоваться перезагрузка, а до тех пор незакрытые уст-
ройства будут недоступны другим приложениям. Кроме того, 16-разрядные подсистемы
защищены от ошибок гораздо меньше 32-разрядных, так что серьезные ошибки в звуко-
вых программах могут приводить к сбоям и «зависаниям» всей системы Windows.
В Windows NT все подсистемы сделаны изначально 32-разрядными, поэтому опи-
санных проблем там не возникает, однако задержки ввода и вывода звука по-прежнему
определяются частотой обновления кольцевого буфера, которая задается драйвером
конкретного адаптера.
§ 9.2. Элементарные API-функции для обработки звука
Программные средства обработки звука. По общепринятой договоренности фай-
лам звукозаписи присваивается расширение WAV. Для воспроизведения звука большин-
ство программ используют одну из трех простейших функций, которые лучше всего
подходят для работы с короткими WAV-файлами.
MessageBeep() - Воспроизводит системные звуки, занесенные в реестр в качестве сигна-
лов предупреждений и сигналов об ошибках.
SndPlaySound() - Воспроизводит звук непосредственно из WAV-файла или из буфера в
памяти.
PlaySound() - Новая функция Win32, которая во многом дублирует команду
sndPlaySound, но имеет два отличия: она не воспроизводит фрагменты, находящиеся в
памяти, но позволяет прослушивать звукозаписи, которые хранятся в ресурсах типа
WAVE.
Функция MessageBeep() принимает единственный параметр, указывающий один из
пяти системных звуков, сконфигурированных с помощью панели управления. Дополняя
каждый вызов функции MessageBox() функцией MessageBeep(), можно сопровождать
звуковыми сигналами все сообщения различного уровня важности. Например, если
функция MessageBox() отображает значок MB_ICONHAND, в качестве аргумента Mes-
227
У драйверов для адаптеров ISA это отставание может достигать десятков миллисекунд,
у драйверов для адаптеров PCI оно обычно ограничивается единицами миллисекунд.
      Для более оперативного вывода звука, особенно с модификацией его в реальном
времени, Microsoft разработан более новый интерфейс - DirectSound. Этот интерфейс
призван «приблизить» аппаратуру адаптера к прикладной программе и позволяет ей
практически напрямую записывать звук в системный кольцевой буфер, сводя макси-
мальные задержки к единицам миллисекунд для любого адаптера. При работе с
DirectSound программа обращается непосредственно к 32-разрядному системному
драйверу адаптера (VxD), минуя переключения между 32- и 16-разрядным режимом ис-
полнения.
      В целях эффективной работы интерфейс DirectSound должен поддерживаться сис-
темным драйвером адаптера. Для устройств, драйверы которых не поддерживают
DirectSound, Windows эмулирует новый интерфейс «поверх» обычного MME-драйвера,
но в этом случае все задержки даже возрастают из-за накладных расходов на эмуляцию.
      К сожалению, Microsoft разработала спецификацию расширения DirectSound для
звуковых VxD только в части воспроизведения звука, действуя прежде всего в интересах
производителей игр. Запись звука через DirectSound до сих пор ведется путем эмуляции
поверх MME.
      Следует отметить, что звуковая подсистема Windows 3.x и 9x, равно как и подсис-
тема удаленного доступа к сети (RAS), обладает низкой устойчивостью к ошибкам. Это
чаще всего проявляется в том, что при аварийном завершении программы, открывшей
звуковые устройства и работающей с ними, система не выполняет корректного закрытия
(cleanup) используемых устройств. В результате этого в ряде случаев после такого ава-
рийного завершения может потребоваться перезагрузка, а до тех пор незакрытые уст-
ройства будут недоступны другим приложениям. Кроме того, 16-разрядные подсистемы
защищены от ошибок гораздо меньше 32-разрядных, так что серьезные ошибки в звуко-
вых программах могут приводить к сбоям и «зависаниям» всей системы Windows.
      В Windows NT все подсистемы сделаны изначально 32-разрядными, поэтому опи-
санных проблем там не возникает, однако задержки ввода и вывода звука по-прежнему
определяются частотой обновления кольцевого буфера, которая задается драйвером
конкретного адаптера.

     § 9.2. Элементарные API-функции для обработки звука

     Программные средства обработки звука. По общепринятой договоренности фай-
лам звукозаписи присваивается расширение WAV. Для воспроизведения звука большин-
ство программ используют одну из трех простейших функций, которые лучше всего
подходят для работы с короткими WAV-файлами.
MessageBeep() - Воспроизводит системные звуки, занесенные в реестр в качестве сигна-
лов предупреждений и сигналов об ошибках.
SndPlaySound() - Воспроизводит звук непосредственно из WAV-файла или из буфера в
памяти.
PlaySound() - Новая функция Win32, которая во многом дублирует команду
sndPlaySound, но имеет два отличия: она не воспроизводит фрагменты, находящиеся в
памяти, но позволяет прослушивать звукозаписи, которые хранятся в ресурсах типа
WAVE.
     Функция MessageBeep() принимает единственный параметр, указывающий один из
пяти системных звуков, сконфигурированных с помощью панели управления. Дополняя
каждый вызов функции MessageBox() функцией MessageBeep(), можно сопровождать
звуковыми сигналами все сообщения различного уровня важности. Например, если
функция MessageBox() отображает значок MB_ICONHAND, в качестве аргумента Mes-

                                        227