netlib.narod.ru | < Назад | Оглавление | Далее > |
DirectX содержит два интерфейса, которые можно применять для воспроизведения звуковых файлов: DirectSound и DirectMusic. Главное различие между ними заключается в том, что DirectSound предоставляет низкоуровневый доступ к аппаратуре звуковой карты. Лично я предпочитаю использовать 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 отвечает за исполнение музыки. Он управляет воспроизведением, работой с сообщениями, назначением каналов и контролем времени. Если говорить в двух словах, вы только создаете в вашей игре один из этих интерфейсов.
Вся работа исполнителя поддерживается единственным интерфейсом с именем 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 представляют собой реально воспроизводимые звуковые данные. Любой файл 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 | < Назад | Оглавление | Далее > |