| < Назад Далее > |
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 позволяют вам управлять практически каждым параметром сегмента. Вся красота в том, что вы можете использовать столько функциональных возможностей, сколько пожелаете. Перейдем к демонстрации!