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

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

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

279
HWND hWnd
);
Первый параметр этого метода является тем самым указателем на IDirectSound, который мы передаем для использования DirectMusic. Если этот параметр равен NULL, то метод самостоятельно создаст объект DirectSound и установит для него режим совместного доступа DSSCL PRIORITY. Но это произойдет лишь в тот момент, когда будет активирован хотя бы один порт, используемый DirectMusic. После деактивации всех портов объект DirectSound, созданный автоматически, будет также автоматически удален. Впрочем,, вариант автоматического создания нам абсолютно не подходит, ведь мы сами также собираемся использовать в программе объект DirectSound, а следовательно, будем передавать его DirectMusic.
Второй параметр представляет собой дескриптор окна, используя который будет создаваться объект DirectSound, если первый параметр метода SetDirectSound равен NULL. Поэтому если первый параметр указанного метода не равен NULL, то его второй параметр игнорируется, ведь мы уже указали окно верхнего уровня при вызове метода IDirectSound::SetCooperativeLevel.
В случае успешного завершения рассматриваемый метод возвращает значение S_0K.
Другим аспектом при взаимодействии DirectSound и DirectMusic является возможность указывать, в какой звуковой буфер DirectMusic должен направлять свои результирующие данные. То есть можно самостоятельно создать потоковый звуковой буфер с требуемыми характеристиками, а затем передать его DirectMusic, и весь звуковой вывод будет происходить именно в этот буфер. Такая возможность позволяет, например, изменять трехмерные характеристики такого буфера, в результате чего воспроизводимая средствами DirectMusic мелодия сможет «перемещаться» в пространстве. Для этого достаточно, используя имеющийся интерфейс IDirectSoundBuffer, получить для него интерфейс IDi rectSound3DBuffer.
Изменить используемый для воспроизведения буфер можно при помощи уже упоминавшегося метода интерфейса IDirectMusicPort (а не IDirectMusic):
HRESULT SetDirectSound(
LPDIRECTSOUND pDirectSound.
LPDIRECTSOUNDBUFFER pDirectSoundBuffer
);
Предназначение параметров этого метода должно быть понятным, стоит отметить лишь, что, передавая в качестве первого параметра NULL, можно отсоединить конкретный порт от DirectSound (например, для того, чтобы впоследствии освободить интерфейс IDirectSound). Этот метод мы применять не будем, а воспользуемся аналогичным методом интерфейса IDirectMusic. Однако великолепный по своей ясности пример использования этого метода (и пример изменения трехмерных характеристик выходного буфера DirectMusic) можно изучить, просмотрев исходный код программы 3DMusic, поставляемый вместе с DirectX SDK.
Получение интерфейса IDirectMusic
Изучив взаимодействие между DirectSound и DirectMusic, мы рассмотрим основные шаги в реализации обещанного второго примера.
280
Урок 9 • Основы использования DirectMusic
После того как в программе был полностью инициализирован DirectSound (этот процесс ничем не отличается от рассмотренного в предыдущих уроках, поэтому на нем мы останавливаться не будем), приходит очередь инициализации DirectMusic. После инициализации библиотеки СОМ операционной системы (этот шаг выполняется так же, как и в первом примере данного урока) следует получить указатель на интерфейс IDirectMusic. Сделать это можно, например, так: IDirectMusic* pDMusic-NULL;
hRet-CoCreateInstance( CLSID_DirectMusic, NULL, CLSCTX_INPROC_SERVER, IID_IDirectMusic, (V0ID**)&pDMusic ); if( FAILED(hRet))
//Обрабатываем ошибку
Как обычно, CLSID DirectMusic представляет собой идентификатор класса создаваемого интерфейса, CLSID DirectMusic — идентификатор создаваемого интерфейса, a pDMusic — переменная, в которую будет записан указатель на создаваемый интерфейс.
Имея на руках инициализированный указатель на интерфейс IDirectSound и полученный только что указатель на интерфейс IDirectMusic, можно произвести присоединение:
hRet*pDMusic->SetDirectSound( pDS, hMainWnd );
1f (FAILED(hRet))
//Обрабатываем ошибку
Первый параметр метода SetDirectSound — указатель на интерфейс IDirectSound, а второй — дескриптор главного окна (в данной ситуации вместо него не раздумывая можно передавать NULL). После описанных шагов DirectMusic для вывода сформированных звуковых данных будет использовать тот же самый объект DirectSound, что и остальная часть нашей программы.
Создание интерфейса для работы с портом звукового вывода
Далее нашей программе следует получить указатели на интерфейсы IDirectMusic Performance (без него не обойтись) и IDirectMusicLoader. Эти шаги также ничем не отличаются от аналогичных шагов первого примера данного урока и поэтому не рассматриваются.
В первом примере при использовании звукового порта мы полностью полагались на возможности среды выполнения, но сейчас хотелось бы продемонстрировать более гибкий подход. Мы будем создавать интерфейс для взаимодействия с портом при помощи следующего метода интерфейса IDirectMusic:
HRESULT CreatePort(
REFCLSID rclsidPort,
LPDMUS PORTPARAMS pProtParams,
LPDIRECTMUSICPORT *ppPort,
Предыдущая << 1 .. 115 116 117 118 119 120 < 121 > 122 123 124 125 126 127 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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