Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Графика -> Гончаров Д. -> "DirectX 7.0 Для программистов" -> 123

DirectX 7.0 Для программистов - Гончаров Д.

Гончаров Д., Салихо Т. DirectX 7.0 Для программистов — Спб.: Питер, 2001. — 528 c.
ISBN 5-318-00173-4
Скачать (прямая ссылка): dirext7dlyaprogrammistov2001.djvu
Предыдущая << 1 .. 117 118 119 120 121 122 < 123 > 124 125 126 127 128 129 .. 229 >> Следующая

Поле dwFlags описывает различные возможности порта при помощи комбинации флагов, среди которых: DMUS PC DIRECTSOUND (порт поддерживает звуковой вывод с использованием DirectSound), DMUS PC DLS и DMUSPCJDLS2 (порт поддерживает работу с загружаемыми звуками DLS), DMUS_PC_SOFTWARESYNTH (порт является программным синтезатором), DMUS_PC_GSINHARDWARE (порт содержит набор звуков Roland GS в аппаратной памяти) и некоторые другие.
DirectMusic: знакомимся ближе
283
Поле dwClass может содержать только два значения: DMUSPCINPUTCLASS для устройства ввода и DMUS_PC_OUTPUTCLASS для устройства вывода.
Оставшееся поле dwType указывает на тип порта: DMUSPORTWINMMDRIVER (мультимедийный драйвер Windows), DMUSPORTJJSERMODESYNTH (драйвер сторонней реализации) или DMUS_PORT_KERNEL_MODE (WDM-драйвер).
Перечисление портов DirectMusic
Как мы уже сказали, после создания интерфейса для работы с портом можно получить описание его возможностей в виде этой структуры. Если выбранный нами порт обладает всеми необходимыми возможностями, то вопрос с созданием порта является решенным, но что делать, если нет? В таком случае необходимо выполнить перечисление всех имеющихся в системе портов DirectMusic, с тем чтобы выбрать подходящий.
Перечисление можно выполнить при помощи метода интерфейса IDi rectMusi с HRESULT EnumPort(
DWORD dwlndex.
LPDMUS_PORTCAPS pPortCaps
):
Второй параметр этого метода представляет собой адрес переменной только что рассмотренного типа DMUS PORTCAPS. Перед тем как передать адрес этой структуры методу EnumPort, следует правильно заполнить ее поле dwSize.
Чтобы понять назначение первого параметра, следует обратить внимание на то, что никакой функции обратного вызова, обычной в перечислениях объектов других компонентов DirectX, здесь не используется. Вместо этого при первом вызове метода EnumPort следует задать значение dwlndex равным 0, а затем при каждом повторном вызове увеличивать это значение на 1. Вызовы метода EnumPort следует прекратить, если он возвратит значение S FALSE, указывающее на то, что портов для перечисления больше нет. Стоит отметить, что индекс порта, полученный таким образом, не является постоянным и может измениться, например, при перезагрузке системы. Поэтому запоминать его для последующего использования не стоит.
Настройка среды выполнения
После того как интерфейс для работы с портом, удовлетворяющим нашим требованиям, был создан, пришло время заняться настройкой среды выполнения с использованием интерфейса IDirectMusicPerformance. Так как часть работы этого интерфейса (создание порта, например) мы выполнили самостоятельно, то и взаимодействие с ним несколько изменится.
Во-первых, при инициализации среды выполнения с использованием метода Init ему следует передать адрес указателя на созданный интерфейс IDi rectMusi с: hRet-pDMPerformance->Init( &pDMusic. NULL, NULL ); if (FAILED(hRet))
//Обрабатываем ошибку
Поскольку для привязки объекта DirectSound мы использовали метод SetDi rectSound интерфейса IDi rectMusi с, то вторым и третьим параметрами методу Init вполне можно передавать NULL.
284
Урок 9 • Основы использования DirectMusic
Во-вторых, если мы не собираемся выполнять загрузку инструментов для каждого сегмента явно, то следует установить глобальный флаг автозагрузки инструментов при помощи метода SetGl obal Рагат так же, как и в первом примере данного урока.
В-третьих, в среду выполнения необходимо добавить порт, интерфейс для работы с которым мы создали на предыдущих шагах: hRet-pDMPerformance->AddPort( pDMPort ); if (FAILED(hRet))
//Обрабатываем ошибку
где pDMPort — указатель на ранее созданный интерфейс IDirectMusicPort.
Наконец, поскольку интерфейс для работы с портом был создан нашей программой самостоятельно, следует связать блок из 16 каналов воспроизведения PChannels со средой выполнения и спроецировать на используемый порт. Этот шаг следует обязательно выполнять за исключением случая, когда методу AddPort передавался NULL. Указанные действия выполняет метод интерфейса IDirectMusicPerformance:
HRESULT AssignPChannelBlock(
DWORD dwBlockNum,
IDirectMusicPort* pPort.
DWORD dwGroup
);
Первый параметр содержит номер блока (0 представляет каналы от 0 до 15). Второй параметр, pPort, является указателем на интерфейс IDirectMusicPort, для которого и происходит привязка каналов. Третий параметр указывает номер создаваемой группы каналов для порта. Нумерация групп начинается с 1.
При успешном выполнении метод возвращает либо значение S 0K, если все прошло нормально, либо S FALSE, если третий параметр метода выходит за границы допустимых значений для данного порта. В последнем случае привязка каналов все равно будет выполнена, только порт не станет проигрывать указанную группу каналов.
Мы будем использовать этот метод следующим образом:
hRet-pDMPerformance->AssignPChannelBlock( 0, pDMPort, 1 ); if (FAILED(hRet))
//Обрабатываем ошибку
чтобы связать первые 16 каналов PChannels в группу под номером 0 для данного порта, представленного указателем pDMPort.
Активизация порта вывода
Предыдущая << 1 .. 117 118 119 120 121 122 < 123 > 124 125 126 127 128 129 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.