Страница 19 из 22 Интерфейс IDirectSound Обслуживает объекты устройств воспроизведения. Содержит следующие методы: Initialize | Инициализация устройства | SetCooperativeLevel | Установка уровня взаимодействия с аппаратурой | CreateSoundBuffer | Создание звукового буфера | DuplicateSoundBuffer | Создание копии объекта буфера | GetCaps | Запрос возможностей и параметров устройства | Compact | Уплотнение внутренней памяти звукового адаптера | GetSpeakerConfig | Запрос конфигурации звукоизлучателей | SetSpeakerConfig | Установка конфигурации звукоизлучателей | Initialize - инициализация устройстваHRESULT IDirectSound::Initialize ( LPCGUID GUID ); - GUID - идентификатор устройства либо нулевое значение для выбора стандартного устройства.
Метод используется для объектов, созданных не специальной функциями Create, а стандартным для COM методом CoCreateInstance. Функции Create возвращают инициализированный объект, в то время как CoCreateInstance - объект-заготовку, который не связан с конкретным устройством. SetCooperativeLevel - установка уровня взаимодействияHRESULT IDirectSound::SetCooperativeLevel ( HWND Win, DWORD Level ); - Win - ключ окна (window handle), по положению которого определяется состояние приложения. Когда окно становится текущим (foreground), приложение также считается текущим, и наоборот. Если приложение использует DirectDraw, то в методах установки уровня DirectDraw и DirectSound должно использоваться одно и то же окно.
- Level - запрашиваемый уровень взаимодействия. Имена констант кодов уровней имеют префикс DSSCL_:;
NORMAL | Обычный уровень. Формат первичного буфера фиксирован. Когда приложение является текущим, звучат только его собственные источники, а также источники других приложений, помеченные флагом DSBCAPS_GLOBALFOCUS | PRIORITY | Приоритетный уровень. Подобен обычному, но допускаются смена формата первичного буфера и уплотнение памяти адаптера. Когда приложение становится текущим, подсистема переключает формат выводимого через адаптер звука | EXCLUSIVE | Исключительный уровень. Сверх приоритетного, запрещается звучание всех источников остальных приложений, когда приложение становится активным | WRITEPRIMARY | Уровень доступа к первичному буферу. Разрешается прямой доступ к первичному буферу, однако запрещается использование вторичных буферов. Установка уровня допускается только для устройств, имеющих драйвер DirectSound (флаг DSCAPS_EMULDRIVER в свойствах устройства не установлен) | CreateSoundBuffer - создание звукового буфераHRESULT IDirectSound::CreateSoundBuffer ( LPCDSBUFFERDESC BufferDesc, LPDIRECTSOUNDBUFFER *Buffer, IUnknown *Outer ); - BufferDesc - указатель заполненного описателя создаваемого буфера (структура DSBUFFERDESC);
- Buffer - указатель переменной, в которую будет занесен указатель созданного объекта буфера;
- Outer - указатель объекта <наружного> интерфейса IUnknown. Не используется, должен иметь нулевое значение.
Метод создает звуковой - первичный или вторичный буфер, в зависимости от состояния флага DSBCAPS_PRIMARYBUFFER. При создании буфера должны быть указаны способы управления (флаги DSBCAPS_CTRLxxx), которые будут использоваться при проигрывании буфера. Если заданы флаги DSBCAPS_LOCHARDWARE, DSBCAPS_LOCSOFTWARE, подсистема сразу же пытается разместить буфер в памяти определенного типа. Если задан флаг DSBCAPS_LOCDEFER, размещение буфера откладывается до запуска его звучания. DuplicateSoundBuffer - создание копии объекта буфераHRESULT IDirectSound::DuplicateSoundBuffer ( LPDIRECTSOUNDBUFFER Original, LPLPDIRECTSOUNDBUFFER Duplicate ); - Original - указатель копируемого объекта;
- Duplicate - указатель переменной, в которую заносится указатель объекта-копии.
Метод служит для создания копии объекта, описывающего звуковой буфер, и используется для создания источников, разделяющих между собой один звуковой фрагмент. Оба объекта ссылаются на один и тот же участок памяти, и изначально их параметры полностью совпадают. Впоследствии приложение может изменять параметры каждого из объектов, что дает соответственное изменение звучания. Например, если это звук автомобиля, то методом копирования объектов можно создать звучания нескольких одинаковых автомобилей, различающихся громкостью, высотой, положением в пространстве и т.п., не затрачивая дополнительную память для самой звуковой оцифровки. GetCaps - запрос параметров и состояния устройстваHRESULT IDirectSound::GetCaps ( DSCAPS *Caps ); - Caps - указатель структуры DSCAPS, которая будет заполнена параметрами устройства. Перед обращением к методу должно быть установлено поле dwSize, определяющее версию интерфейса.
-
GetSpeakerConfig - запрос конфигурации звукоизлучателейHRESULT IDirectSound::GetSpeakerConfig ( DWORD *Config ); - Config - адрес переменной, в которую будет занесен код текущей конфигурации звукоизлучателей для данного устройства. Имена констант значений кодов имеют префикс DSSPEAKER_:;
MONO | Одиночный громкоговоритель | STEREO | Стереофонические громкоговорители; (стандартно) | HEADPHONE | Наушники | QUAD | Квадрафонические громкоговорители | SURROUND | Громкоговорители, включенные по системе Surround | 5POINT1 | Громкоговорители Surround с добавлением общего низкочастотного (subwoofer) | В конфигурации STEREO добавляется код расположения громкоговорителей. Имена значений кодов имеют префикс DSSPEAKER_GEOMETRY_: MIN | Под углом в 5° | NARROW | Под углом в 10° | WIDE | Под углом в 20° | MAX | Под углом в 180° | Для выделения из двойного слова кодов конфигурации и расположения используются макросы DSSPEAKER_CONFIG и DSSPEAKER_GEOMETRY. SetSpeakerConfig - установка конфигурации звукоизлучателейHRESULT IDirectSound::SetSpeakerConfig ( DWORD Config ); - Config - набор флагов, описывающих конфигурацию.
Метод устанавливает новую конфигурацию звукоизлучателей, которая будет учитываться при создании результирующей звуковой картины. Для объединения кодов конфигурации и расположения используется макрос DSSPEAKER_COMBINED (Config, Geometry). Compact - уплотнение внутренней памяти адаптераHRESULT IDirectSound::Compact (); Метод выполняет уплотнение внутренней памяти адаптера, устраняя фрагментацию и собирая все неиспользуемые фрагменты в один непрерывный участок. Для использования метода приложение должно иметь уровень взаимодействия не ниже приоритетного. |