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

UptoLike

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

ройством либо со стандартным системнымв последнем случае служба пере-
назначения определяет нужное устройство.
Кроме трансляции запросов к нужному устройству, 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() и прочие к ним неприменимы.
Несмотря на то, что большая часть функций интерфейса одинакова либо
138
ройством либо со стандартным системным – в последнем случае служба пере-
назначения определяет нужное устройство.
     Кроме трансляции запросов к нужному устройству, 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() и прочие к ним неприменимы.
     Несмотря на то, что большая часть функций интерфейса одинакова либо

                                    138