netlib.narod.ru< Назад | Оглавление | Далее >

Архитектура DirectMusic

DirectX содержит два интерфейса, которые можно применять для воспроизведения звуковых файлов: DirectSound и DirectMusic. Главное различие между ними заключается в том, что DirectSound предоставляет низкоуровневый доступ к аппаратуре звуковой карты. Лично я предпочитаю использовать DirectMusic, поскольку он предоставляет более широкие возможности и достаточно быстро работает на современных процессорах. DirectMusic содержит следующие основные части:

Загрузчик DirectMusic

Загрузчик в DirectMusic одвечает за загрузку аудио-содержимого. С его помощью вы можете загрузить файлы MIDI, файлы WAV, коллекции DLS и файлы сегментов DirectMusic. Как только вы сообщите, какой именно аудио-ресурс вам требуется загрузить, загрузчик выполнит всю необходимую работу и начнет потоковое чтение ресурса. Вам остается только выполнить воспроизведение аудиоданных!

Загрузчик использует единственный интерфейс с именем IDirectMusicLoader8. Возможно, вы удивляетесь почему в имени интерфейса DirectX 9.0 не стоит цифра 9? Дело в том, что по сравнению с 8 версией в DirectMusic не было сделано никаких существенных изменений. Большинство изменений были сделаны для увеличения быстродействия кода.

Интерфейс загрузчика содержит несколько методов, перечисленных в таблице 7.1.

Таблица 7.1. Методы интерфейса IDirectMusicLoader8

Метод Описание
CacheObject Увеличивает счетчик ссылок объекта. Полезно использовать для предотвращения многократной загрузки объекта.
ClearCache Очищает счетчик ссылок для объекта указанного типа.
CollectGarbage Очищает неиспользуемые ссылки.
EnableCache Включает автоматическое кэширование. Может также применяться для выключения автоматического кэширования.
EnumObject Перечисляет объекты заданного типа.
GetObject Возвращает объект.
LoadObjectFromFile Загружает объект из файла. Это наиболее часто используемый метод, поскольку он отвечает за загрузку файлов WAV.
ReleaseObjectByUnknown Освобождает ссылку на объект.
ReleaseObject Освобождает ссылку на объект.
ScanDirectory Выполняет поиск в каталоге файлов указанного типа. Кэширует результаты для перечисления.
SetObject Позволяет установить атрибуты некорректного объекта.
SetSearchDirectory Устанавливает путь к каталогу, в котором будет выполняться поиск аудиофайлов.


Вот что можно сказать об интерфейсе загрузчика. Позже в этой главе я покажу как используются некоторые из перечисленных в таблице 7.1 методов.

Исполнитель DirectMusic

Подобно тому, как музыкант исполняет произведение, интерфейс исполнителя в DirectMusic отвечает за исполнение музыки. Он управляет воспроизведением, работой с сообщениями, назначением каналов и контролем времени. Если говорить в двух словах, вы только создаете в вашей игре один из этих интерфейсов.

Вся работа исполнителя поддерживается единственным интерфейсом с именем IDirectMusicPerformance8. Он является рабочей лошадкой DirectMusic; поэтому в нем присутствуют десятки функций. Перечисление функций приведено в таблице 7.2.

Таблица 7.2. Методы интерфейса IDirectMusicPerformance8

Метод Описание
AddNotificationType Добавляет тип уведомления.
AddPort Назначает исполнителю порт.
AdjustTime Смещает время исполнителя вперед или назад.
AllocPMsg Выделяет память для сообщения.
AssignPChannel Назначает канал исполнителя.
AssignPChannelBlock Назначает блок из 16 каналов.
ClonePMsg Копирует сообщение исполнителя.
CloseDown Закрывает объект исполнителя.
CreateAudioPath Создает аудио-путь (audio path).
CreateStandardAudioPath Создает аудио-путь со стандартными параметрами.
DownloadInstrument Загружает инструмент DLS.
FreePMsg Освобождает занятую сообщением память.
GetBumperLength Возвращает время между помещением сообщения в буфер и началом его обработки.
GetDefaultAudioPath Возвращает аудио-путь по умолчанию.
GetGlobalParam Возвращает глобальные значения исполнителя.
GetGraph Возвращает инструментальный граф (toolgraph).
GetLatencyTime Возвращает время, необходимое исполнителю на обработку звука и вывод его на динамики.
GetNotificationPMsg Возвращает сообщение уведомления.
GetParam Возвращает параметры дорожки.
GetParamEx Возвращает параметры дорожки. Поддерживает саморегулируемые сегменты.
GetPrepareTime Возвращает латентность дорожки.
GetQueueTime Возвращает время, когда сообщения могут быть вытеснены.
GetResolvedTime Преобразует время в предел.
GetSegmentState Возвращает состояние текущего сегмента.
GetTime Возвращает время исполнителя.
InitAudio Инициализирует исполнителя.
Invalidate Вытесняет все сообщения.
IsPlaying Проверяет, воспроизводится ли текущий сегмент.
MIDIToMusic Преобразует значение ноты MIDI в значение DirectMusic.
MusicToMIDI Преобразует значение DirectMusic в значение MIDI.
MusicToReferenceTime Преобразует MUSIC_TIME в REFERENCE_TIME.
PChannelInfo Возвращает информацию о канале.
PlaySegment Воспроизводит сегмент.
PlaySegmentEx Воспроизводит сегмент с дополнительными параметрами.
ReferenceToMusicTime Преобразует REFERENCE_TIME в MUSIC_TIME.
RemoveNotificationType Удаляет тип уведомления.
RemovePort Удаляет порт.
RhythmToTime Преобразует время ритма во время музыки.
SendPMsg Отправляет сообщение.
SetBumperLength Устанавливает интервал между помещением сообщения в буфер и его обработкой.
SetDefaultAudioPath Устанавливает аудио-путь по умолчанию. Установленный путь становится активным.
SetGlobalParam Устанавливает глобальные значения.
SetGraph Устанавливает инструментальный граф.
SetNotificationHandle Устанавливает обработчик события.
SetParam Устанавливает данные дорожки.
SetPrepareTime Устанавливает время между отправкой сообщения и воспроизведением звука.
Stop Останавливает воспроизведение сегмента.
StopEx Останавливает сегмент или аудио-путь.
TimeToRhythm Преобразует время музыки во время ритма.


Ничего себе. Какой огромный список функций. Он не должен подавлять вас; я использую в своих программах лишь несколько из перечисленных функций. Представьте себе, вся эта функциональность доступна вам абсолютно бесплатно!

Сегменты DirectMusic

Сегменты в DirectMusic представляют собой реально воспроизводимые звуковые данные. Любой файл WAV или последовательность MIDI, которые вы воспроизводите должны быть сперва загружены в сегмент. В DirectMusic существует два типа сегментов: первичные и вторичные. Первичный сегмент является главной звуковой дорожкой. Вторичные сегменты обычно используются для спецэффектов.

Вся функциональность сегментов сосредоточена в интерфейсе IDirectMusicSegment8. Так как он может содержать данные объектов различных типов, в нем достаточно много функций. Все они перечислены в таблице 7.3.

Таблица 7.3. Методы интерфейса IDirectMusicSegment8

Метод Описание
AddNotificationType Добавляет тип события.
Clone Копирует сегмент.
Compose Составляет дорожку.
Download Копирует данные в объект исполнителя.
GetAudioPathConfig Возвращает конфигурацию аудио-пути.
GetDefaultResolution Возвращает разрешение времени для сегмента.
GetGraph Возвращает инструментальный граф.
GetLength Возвращает длину сегмента.
GetLoopPoints Возвращает точки начала и конца цикла.
GetParam Возвращает параметры дорожки.
GetRepeats Возвращает количество цикличских повторений сегмента.
GetStartPoint Возвращает начальную точку.
GetTrack Возвращает дорожку, соответствующую заданным условиям поиска.
GetTrackGroup Возвращает группу битов дорожки.
InitPlay Инициализирует состояние воспроизведения.
InsertTrack Вставляет дорожку.
RemoveNotificationType Удаляет тип события.
RemoveTrack Удаляет дорожку.
SetDefaultResolution Устанавливает разрешение по умолчанию.
SetGraph Устанавливает инструментальный граф.
SetLength Устанавливает длину.
SetLoopPoints Устанавливает начальную и конечную точки цикла.
SetParam Устанавливает параметры дорожки.
SetPChannelsUsed Устанавливает используемый канал исполнителя.
SetRepeats Устанавливает количество циклических повторов сегмента.
SetStartPoint Устанавливает начальную точку.
SetTrackConfig Конфигурирует дорожку.
Unload Удаляет данные из объекта исполнителя.


Как видно из таблицы 7.3, интерфейс сегмента предоставляет много полезных функций. Функциональные возможности DirectMusic позволяют вам управлять практически каждым параметром сегмента. Вся красота в том, что вы можете использовать столько функциональных возможностей, сколько пожелаете. Перейдем к демонстрации!


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz