Составители:
У драйверов для адаптеров 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
Страницы
- « первая
- ‹ предыдущая
- …
- 223
- 224
- 225
- 226
- 227
- …
- следующая ›
- последняя »