Составители:
Кроме трансляции запросов к нужному устройству, Wave Mapper может выпол-
нять и поиск наиболее подходящего устройства, поддерживающего требуемый формат
звука.
В Win32 имеется подсистема сжатия звука (Audio Compression Manager, ACM),
при помощи которой возможно взаимное преобразование звуковых форматов - как
внутри групп, так и между ними. Наряду с простыми преобразованиями (изменением
частоты дискретизации, количества каналов или разрядности отсчета), ACM предостав-
ляет широкий набор форматов сжатия - ADPCM, a-Law, mu-Law, MSN Audio, GSM,
MPEG и т.п. Подсистема сжатия реализована в виде набора так называемых кодеков
(ACM Codec) - специальных драйверов ACM, которые непосредственно занимаются пе-
реводом звука из одного формата в другой. Сам же ACM - это диспетчер, который взаи-
модействует с приложением и по запрошенным форматам активизирует нужные кодеки,
снабжая их необходимыми параметрами. Служба ACM может использоваться как авто-
номно - через собственный отдельный интерфейс, так и автоматически - службой Wave
Mapper.
Когда приложение открывает конкретное звуковое устройство, указывая требуе-
мый формат потока, звуковая подсистема пытается связаться непосредственно с драйве-
ром устройства. Однако если устройство не поддерживает требуемый формат, а обра-
тившейся программой разрешена работа через Wave Mapper, то подсистема может
попытаться найти подходящий кодек ACM, который способен в реальном времени пре-
образовывать один из «родных» форматов устройства в формат, запрошенный приложе-
нием. Если такой кодек обнаружен, подсистема прозрачно включает его в работу между
драйвером и приложением, а приложение может считать, что выбранный формат потока
поддерживается непосредственно устройством.
Звуковая подсистема нумерует установленные устройства начиная с нуля. При ус-
тановке нового устройства или удалении существующего нумерация изменяется, поэто-
му даже во время работы программы в системе могут появиться или исчезнуть звуковые
устройства. Вместо номера звукового устройства может использоваться ключ (handle)
ранее открытого устройства; система автоматически определяет, какое именно значение
передано интерфейсной функции. Как и в случае с файлами, при открытии каждого зву-
кового устройства система возвращает его идентификатор, или ключ (handle), по кото-
рому затем происходит вся остальная работа с устройством. Формально идентификато-
ры устройств ввода и вывода имеют различные типы - HWAVEIN и HWAVEOUT,
однако оба они эквивалентны типу HWAVE, который может использоваться для созда-
ния универсальных функций, не зависящих от типа устройства. Ключи звуковых уст-
ройств не имеют ничего общего с ключами файлов, событий, окон, задач и т.п. Систем-
ные функции DuplicateHandle(), CloseHandle() и прочие к ним не применимы.
Несмотря на то, что большая часть функций интерфейса одинакова либо симмет-
рична для устройств ввода и вывода, разработчики Microsoft по непонятной причине
разделили названия функций для устройств ввода и вывода: каждая функция имеет пре-
фикс, состоящий из типа и «ориентации» устройства: midiIn, waveOut и т.п. С одной
стороны, это способствует защите от ошибок, но с другой - усложняет создание универ-
сальных функций и классов, в которых направление передачи задается параметром.
Главным недостатком звуковой подсистемы MME, реализованной в Windows 9x
является то, что подсистема и ее драйверы так и остались 16-разрядными, как и в
Windows 3.x. Из-за этого каждое обращение к звуковому драйверу из Win32–
приложения сопровождается двойной сменой режима исполнения (thunking), что приво-
дит к дополнительным временным расходам, которые могут доходить до единиц милли-
секунд. Кроме того, многие драйверы ограничивают частоту обновления кольцевого бу-
фера, через который идет обмен между компьютером и адаптером, до нескольких
десятков раз в секунду, отчего в процессе передачи звука возникает отставание (latency).
226
Кроме трансляции запросов к нужному устройству, Wave Mapper может выпол- нять и поиск наиболее подходящего устройства, поддерживающего требуемый формат звука. В Win32 имеется подсистема сжатия звука (Audio Compression Manager, ACM), при помощи которой возможно взаимное преобразование звуковых форматов - как внутри групп, так и между ними. Наряду с простыми преобразованиями (изменением частоты дискретизации, количества каналов или разрядности отсчета), ACM предостав- ляет широкий набор форматов сжатия - ADPCM, a-Law, mu-Law, MSN Audio, GSM, MPEG и т.п. Подсистема сжатия реализована в виде набора так называемых кодеков (ACM Codec) - специальных драйверов ACM, которые непосредственно занимаются пе- реводом звука из одного формата в другой. Сам же ACM - это диспетчер, который взаи- модействует с приложением и по запрошенным форматам активизирует нужные кодеки, снабжая их необходимыми параметрами. Служба ACM может использоваться как авто- номно - через собственный отдельный интерфейс, так и автоматически - службой Wave Mapper. Когда приложение открывает конкретное звуковое устройство, указывая требуе- мый формат потока, звуковая подсистема пытается связаться непосредственно с драйве- ром устройства. Однако если устройство не поддерживает требуемый формат, а обра- тившейся программой разрешена работа через Wave Mapper, то подсистема может попытаться найти подходящий кодек ACM, который способен в реальном времени пре- образовывать один из «родных» форматов устройства в формат, запрошенный приложе- нием. Если такой кодек обнаружен, подсистема прозрачно включает его в работу между драйвером и приложением, а приложение может считать, что выбранный формат потока поддерживается непосредственно устройством. Звуковая подсистема нумерует установленные устройства начиная с нуля. При ус- тановке нового устройства или удалении существующего нумерация изменяется, поэто- му даже во время работы программы в системе могут появиться или исчезнуть звуковые устройства. Вместо номера звукового устройства может использоваться ключ (handle) ранее открытого устройства; система автоматически определяет, какое именно значение передано интерфейсной функции. Как и в случае с файлами, при открытии каждого зву- кового устройства система возвращает его идентификатор, или ключ (handle), по кото- рому затем происходит вся остальная работа с устройством. Формально идентификато- ры устройств ввода и вывода имеют различные типы - HWAVEIN и HWAVEOUT, однако оба они эквивалентны типу HWAVE, который может использоваться для созда- ния универсальных функций, не зависящих от типа устройства. Ключи звуковых уст- ройств не имеют ничего общего с ключами файлов, событий, окон, задач и т.п. Систем- ные функции DuplicateHandle(), CloseHandle() и прочие к ним не применимы. Несмотря на то, что большая часть функций интерфейса одинакова либо симмет- рична для устройств ввода и вывода, разработчики Microsoft по непонятной причине разделили названия функций для устройств ввода и вывода: каждая функция имеет пре- фикс, состоящий из типа и «ориентации» устройства: midiIn, waveOut и т.п. С одной стороны, это способствует защите от ошибок, но с другой - усложняет создание универ- сальных функций и классов, в которых направление передачи задается параметром. Главным недостатком звуковой подсистемы MME, реализованной в Windows 9x является то, что подсистема и ее драйверы так и остались 16-разрядными, как и в Windows 3.x. Из-за этого каждое обращение к звуковому драйверу из Win32– приложения сопровождается двойной сменой режима исполнения (thunking), что приво- дит к дополнительным временным расходам, которые могут доходить до единиц милли- секунд. Кроме того, многие драйверы ограничивают частоту обновления кольцевого бу- фера, через который идет обмен между компьютером и адаптером, до нескольких десятков раз в секунду, отчего в процессе передачи звука возникает отставание (latency). 226
Страницы
- « первая
- ‹ предыдущая
- …
- 222
- 223
- 224
- 225
- 226
- …
- следующая ›
- последняя »