Заметки по работе с DirectX8.1 SDK и по созданию 3D-игр  
     
   
     
  [Все уроки по DirectX] [Уроки по DirectSound8]  
     
 

Краткое описание компонента SXModPlayer2

Введение

Итак, Вы решили заняться созданием собственной игрушки в DirectX8.1 на Delphi6-7. Для этого Вам непременно потребуется воспроизведение музыки! Где же взять хороший и бесплатный компонент для этих целей и в каком формате музыку использовать?

Конечно же есть готовые и бесплатные компоненты. Кроме того, в DirectX SDK описывается как воспроизводить музыку в формате mid, т.е. midi. Однако можно создать компонент самому, как сделал это я. Теперь Вам остается только взять его и пользоваться!

Вашему вниманию предлагается компонент SXModPlayer2 созданный на основе компонента SXModPlayer из библиотеки SXMedia (автор Den Ellis). Ядром компонента является библиотека времени выполнения mppsdk.dll

Компонент SXModPlayer2 использует модуль MPPSDK.dll (автор Оливье Лаписку, он же автор ModPlug Tracker 1.16!). Этот модуль + некоторое количество кода на Delphi позволяет воспроизводить музыку в форматах IT, MOD, XM, S3M.

Den Ellis попытался создать компонент для библиотеки DelphiX. Однако на поверку компонент оказался некорректным. При его использовании после завершения приложения в памяти остается незавершенный подпроцесс, что приводит к ошибкам. Кроме того, библиотека DelphiX в существующем виде рассчитана на использование DirectX7. На сегодняшний же день актуальным является использование минимум DirectX8.1!

Почему SXModPlayer2 ? Это серьезно переработанная версия компонента SXModPlayer. В нём исправлена главная ошибка - незакрытие подпроцесса, отвечающего за генерацию музыки. Для звукового буфера используется интерфейс IDirectSound8.

Компонент SXModPlayer2 позволяет загружать и воспроизводить музыкальные файлы в форматах IT, MOD, XM, S3M, регулировать громкость, панораму, частоту воспроизведения.

В комплекте с исходным кодом компонента идет пример, демонстрирующий приемы работы с компонентом. Они достаточно просты.

1) В секции interface модуля вашего приложения объявить константу, представляющую имя музыкального файла

const

ModFile = 'music\testsong.it';

или использовать список файлов, которые будут воспроизводиться. Но реализовать выбор и загрузку из списка нужно самим :)

2) В классе вашего приложения объявить поле с типом TSXModPlayer

TMyD3DApp = TForm

...

private

FSXModPlayer: TSXModPlayer;

...

end;

Обратите внимание! Класс Вашего приложения должен производиться от TForm!!! Об использовании компонента в WinAPI приложении будет рассказано и показано в последующих статьях!

3) В методе инициализации приложения создать указанный объект:

procedure TMyD3DApp.OneTimeSceneInit;

begin

...

FSXModPlayer := TSXModPlayer.Create(MyD3DApp, ModFile);

...

end;

Это Важно!!! Создание компонента нужно производить уже после создания формы окна приложения, т.е. не в методе FormCreate, а позднее. Это и показано в примере с исходным кодом.

4) где-то в коде вызывать требуемые методы и свойства объекта FSXModPlayer для управления

воспроизведением, громкостью, остановом, загрузкой другой мелодии и т.д.

Для этого используются:

метод FSXModPlayer.Play(Loop: Boolean) - выполняет воспроизведение указанной в методе Create или свойстве Filename композиции. Воспроизведение выполняется с начала или с текущей позиции останова. Параметр Loop позволяет задать циклическое воспроизведение композиции. Этого же можно добиться, используя свойство FSXModPlayer.Looping

свойство FSXModPlayer.FileName - позволяет задать файл и полный путь к композиции. Обратите внимание! Если путь задан неверно или имя файла не соответствует имеющемуся, то никаких ошибок не будет, просто SXModPlayer будет молчать. Поэтому тщательно контролируйте имена и пути!!!

метод FSXModPlayer.Stop - выполняет временную остановку воспроизведения, это как бы пауза, для проигрывания остановленной композиции с самого начала нужно сначала вызвать метод FSXModPlayer.Reset, а затем FSXModPlayer.Play. Небольшим недостатком является то, что при вызове метода Play воспроизведение начинается не сразу, а с некоторой задержкой. Это связано с тем, что требуется некоторое время на рендеринг звукового файла интерфейсом IModMixer (см. исходный код в файле SXModPlayer2.pas). добиться моментального включения и останова композиции (без задержек) довольно просто - вместо останова и воспроизведение используйте манипуляции с громкостью! Тогда не будет никаких задержек. Вот и всё!

свойства FSXModPlayer.Volume, Pan, Frequency - позволяют задать требуемую громкость, панораму, частоту дискретизации композиции. Нужно обратить внимание на допустимые диапазоны значений:

Volume = 0..-5000; 0-максимальная громкость.

Pan = -10000..10000; что соответствует уходу в левый/правый стереоканалы, 0 - полный баланс каналов;

Frequency = DSBFREQUENCY_MIN..DSBFREQUENCY_MAX; - минимальная и максимальная частоты дискретизации. Изменение частоты можно использовать для каких-то звуковых эффектов типа убыстрения/замедления музыки. А так, по большому счету Вы, скорее всего вообще не будете ее изменять!

5) В деструкторе приложения вызвать можно явно вызвать метод для уничтожения объекта FSXModPlayer

FreeAndNil(FSXModPlayer), если этого не сделать, он будет вызван автоматически объектом-владельцем (Owner), который в указали при создании объекта TSXModPlayer.

Вот в кратце и всё! Изучайте и пользуйтесь!!!

Теперь и Вы можете использовать музыку в своих играх на Delphi.

 
     
  Важное замечание!: Ядром компонента SXModPlayer является библиотека времени исполнения MPPSDK.DLL (автор Оливье Лаписку, он же автор ModPlug Player, Mod Plug Tracker 1.16), Поэтому чтобы Ваши приложения могли использовать компонент SXModPlayer нужно обязательно распространять их вместе с файлом MPPSDK.DLL. Т.е. так, чтобы Ваш исполнимый файл мог находить эту библиотеку. Сделать это достаточно просто - разместить этот библиотечный файл в той же папке, что и EXE-файл вашего приложения. Это делается по аналогии с тем, как Вы используете файлы D3DX81ab.dll и DXErr81ab.dll из папки с ОБЩИМ КОДОМ.  
     
    Итак, теперь для воспроизведения музыки в играх на Delphi Вы можете воспользоваться компонентом SXModPlayer2 (140 Кб) разработанным автором на основе оригинального (но не совсем корректно написанного) компонента SXModPlayer из библиотеки SXMedia, автор Dean Ellis.
  Внимание! Для нормальной работы и компиляции Вам потребуется архив С ОБЩИМ КОДОМ (762 Кб).
ОБЩИЙ КОД - 585 Кб
 
   
SXModPlayer2 - 138Кб
       

(с) Мега Информатик 2006-2007

Hosted by uCoz