Мобильная версия сайта | |||||||||
[Главная] | [Новости] | [Статьи] |
[Проекты] |
[Ссылки] |
[Автор] |
||||
[Архив новостей] | |||||||||
[Форум] | на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы | ||||||||
Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...] | |||||||||
[Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi] | |||||||||
[Разработка компьютерной игры] [Пример игры Donuts3D] | |||||||||
12/06/2008 Воспроизведение файлов в форматах *.it, *.xm, *.s3m, *.mod Для
воспроизведения используется интерфейс для библиотеки FMOD 3.75 (c) Firelight
Technologies Pty, Ltd, Автор конверсии на Delphi - Dragan Bocevski. Полный список понимаемых библиотекой FMOD 3.75 файлов - *.MOD;*.S3M;*.XM;*.IT;*.MID;*.RMI;*.SGT;*.WAV;*.MP2;*.MP3;*.OGG;*.WMA;*.ASF |
|||||||||
Чем FMOD 3.75 отличается от miniFMOD? miniFMOD - это прежде всего библиотека демо-проектов, обладающая минимальным объемом, но и минимумом возможностей. В частности даже отсутсвует возможность регулировки громкости проигрываемого трека. FMOD 3.75 также распространяется на бесплатной основе, но возможности его несоизмеримо шире. Заметно, что качество звука воспроизводимого трека гарантированно выше, а возможности по настройкам и регулировкам - все какие только нужны: громкость, списки воспроизведения, регулировка позиции воспроизведения по паттернам, спектральный анализатор звуковой волны и многое другое, что потянет на использование уже не только в игровом проекте, но и для написания собственного медиа-плеера наподобие ModPlugPlayer или даже тректера наподобие ModPlugTracker. Правда следует отметить, что ModPlugPlayer и ModPlugTracker написаны совсем на другой основе (по крайней мере не на основе FMOD), хотя и используют те же ставшие стандартом де-факто трекерские форматы - *.it, *.xm, *.s3m, *.mod и еще целый ряд подобных им. |
|||||||||
Почему бы не взять для музыки OggVorbis и ограничиться этим? Вполне можно, разработчики современного FMOD версии 4.17 пошли еще дальше и разработали формат OXM, который еще более компактен чем оригинальные XM-файлы за счет сжатия сэмплов в формате ogg. Если Вам это нужно, то можете использовать самые свежие версии FMOD. Мы же здесь ограничимся рассмотрением использования версии FMOD 3.75 в игровом проекте Нечто: Необъяснимое. В этом проекте планируется использовать OggVorbis преимущественно для воспроизведения длинных речевых диалогов. FMOD 3.75 - для воспроизведения оригинальных музыкальных треков в форматах *.it, *.xm и других. В этом случае звуки речи будут более компактны за счет большего коэффициента сжатия с некоторым понижением качества, но зато с достаточной длительностью по времени. Музыкальные файлы также будут компактны, за счет использования не слишком больших сэмплов и за счет того, что не будут экспортироваться в ogg, а будут оставаться в своем родном формате, в котором они были написаны в трекере! Поскольку FMOD 3.75 умеет открывать и воспроизводить и файлы в формате OggVorbis, то использование отдельной библиотеки и ее файлов не потребуется! |
|||||||||
Что нужно для использования FMOD 3.75 ? | |||||||||
В первую очередь, конечно, нужно создать свои треки, например в ModPlugTracker 1.16. Есть и несколько уроков, посвященных этой проблеме - введение в трекерскую музыку, введение в ModPlugTracker 1.16 и ряд других. Если файлы содержат речь или длинные наборы звуков, то их нужно пересохранить в более компактном формате - сначала экспортировать в Wav или mp3, а затем в Ogg. Поскольку FMOD 3.75 понимает и mp3 файлы, то можно оставить в формате mp3. Однако это целесообразно делать только для записей речи. Музыкальные файлы в трекерских форматах (*.it, *.xm, *.mod, *.s3m) более компактны чем mp3 или ogg поскольку содержат только наборы сэмплов и нот, а не непрерывную звуковую дорожку, которая должа играть на протяжении определенного времени как это имеет место в wav, mp3 и ogg. Правда mp3 и ogg позволяют сильно сократить объем по сравнению с wav. Но все-равно они проигрывают в объеме трекерским файлам. Таким образом получается следующая картина - для коротких звуков лучше использовать формат wav, который легко воспроизводится средствами IDirectSound. Для более длинных звуков или записей речи нужно использовать mp3 или ogg. И наконец музыку, написанную в трекере можно использовать в своем собственном формате, учтя лишь тот факт, что размеры входящих в мелодию сэмплов должны быть не слишком большими, чтобы общий объем не превышал скажем 4Mb, а то и еще меньше. Иначе дистрибутив игры, особенно распространяемой через сеть, разрастется до непомерных размеров, а это актуально лишь для CD и DVD-версий игры. Игры же распространяемые по сети желательно делать как можно меньшими. |
|||||||||
На заре создания сайта Мега Информатик автором уже был создан компонент SXModPlayer2 на основе библиотеки MPPSDK.DLL, но по некоторым причинам - качество звука и некоторые ограничения не дают возможности полноценно использовать его в качестве успешного плеера музыки в игровых проектах. Главным образом из-за отсутствия открытого кода по библиотеке mppsdk.dll. Есть правда открытый код ModPlugTracker 1.16, но он написан на C++, знатоком которого автор к сожалению не является. | |||||||||
По этим причинам разыскивался аналогичный компонент и им стал FMOD 3.75. | |||||||||
Итак, перейдем к рассмотрению работы с библиотекой FMOD 3.75 | |||||||||
Для начала разберемся как это сделано в примере из дистрибутива fmodapi375win.rar - допустим мы распаковали содержимое данного архива в папку fmodapi375win\ тогда мы рассмотрим сейчас реализацию примера из папки - fmodapi375win\samplesdelphi\FMod |
|||||||||
Здесь находится файл проекта testbed.dpr который без проблем открывается из Delphi 7. Открываем этот файл из Delphi. |
|||||||||
В опциях проекта указываем ссылку на папку Search path - ..\..\api\delphi; (Project > Options > Directories\Conditionals) | |||||||||
![]() |
|||||||||
Из папки fmodapi375win\api копируем файл fmod.dll в папку fmodapi375win\samplesdelphi В опциях проекта в поле Output directory укажите ..\ (см. рисунок) для того, чтобы скомпилированный exe-файл попал в папку fmodapi375win\samplesdelphi уже содержащую необходимую ему dll. |
|||||||||
Нажимаем ОК, выполняем компиляцию. Если всё сделано верно Вы должны получить следующее сообщение - |
|||||||||
![]() |
|||||||||
Если Вы уже догадались, как исправить данную ошибку, то сделайте это сами. | |||||||||
Если нет, то вот что нужно сделать - Дело в том, что в данном массиве содержится на 1 меньше элемент, чем описано в его начале. Просто найдите тип TFSoundOutputTypes и обратите внимание какие константы описаны там. Скопируйте элемент FSOUND_OUTPUT_PSP, вставьте его в массив OutputTypes который давал ошибку, заключив в кавычки и вставив после 'FSOUND_OUTPUT_GC' - 'FSOUND_OUTPUT_PSP', Сохраните и снова откомпилируйте проект. Теперь результат должен быть ОК. |
|||||||||
Запустите полученный в папке fmodapi375win\samplesdelphi файл testbed.exe | |||||||||
![]() |
|||||||||
Откройте какой-либо трекерский файл (*.it, *.xm, *.s3m или *.mod) нажав кнопку Load. Если под рукой нет ничего подходящего можете скачать примеры треков. | |||||||||
Теперь можете нажать кнопку Play и попробовать регулировать громкость, переключаться на последующие паттерны (-/+). Можно щелкнуть по окошку спектрального анализатора - Click for spectrum. Кнопочка Config позволит Вам выбрать другое устройство (драйвер) воспроизведения звука и кое-какие параметры фильтрации. | |||||||||
Сравнив звучание одной и той же мелодии например в трекере ModPlugTraker, а затем в данном тестовом приложении приходим к выводу, что оно более чем превосходит все наши ожидания, в чём-то даже звучание превосходит оригинал. | |||||||||
Рассмотрим как реализованы вызовы интерфейсов FMOD 3.75 в примере данного приложения. | |||||||||
Проект testbed.dpr Модуль main.pas В методе создания окна формы - procedure TfrmMain.FormCreate FMOD_Load(nil); метод загрузки динамической библиотеки - возвращает значение о том, загружена она или нет Далее следует сравнение версий API в исходных файлах и версии библиотеки dll {
Check version numbers } Инициализируется FSound. FSound управляет параметрами звуковых буферов, в которые поступают результаты вывода звуковых потоков от FMusic. Т.е. объект FMusic получив it или ogg файл сначала выводит его в отведенный буфер производя микширование (в случае трекерского модуля) или декодирование в случае mp3 или ogg. Полученный в буфере кусочек звука воспроизводится средствами звука Windows или DirectSound - в зависимости от того, какой драйвер (устройство) для вывода звука будет выбрано. Для начала выбираются настройки по умолчанию - {
Initialize FSOUND } Если все прошло гладко, то FSound инициализируется со следующими параметрами - частота дискретизации микширования стерео-сигнала 22050 Гц, количество программных аудио-каналов - 128, флаги - 0
if not FSOUND_Init(22050, 128, 0) then |
|||||||||
Очищается список воспроизведения - количество файлов не должно превышать 512. К слову сказать, FMOD умеет выводить полифонию, т.е. файлы, содержащиеся в списке могут воспроизводиться одновременно! Это очень удобно, особенно с той точки зрения, когда нужно будет чтобы играла музыка и в то же время персонаж что-нибудь говорил. Это не потребует создания отдельных объектов fmod! {
Initialize song list to empty } Номер текущего трека, число треков, состояние CD-плеера - FMOD умеет работать и с CD!!! FTrackNumber
:= 0; |
|||||||||
Спектральный анализатор, вообще-то в игре это и не нужно, но, в плеере, например будет очень полезно, а вот если использовать как-то выходные параметры анализатора в игре, например, для влияния на количество врагов и т.п. Тогда становится еще интереснее! FSpectrum
:= TMiniSpectrum.Create(nil); |
|||||||||
Оставшиеся строки кода актуальны только для примера testbed.dpr | |||||||||
[далее] - продолжаем рассмотрение работы с FMOD 3.75 из проектов Delphi | |||||||||
[Назад] [Все уроки] | |||||||||
Обновления
и новости о развитии Delphi DirectX проекта http://www.megainformaticsite.pochta.ru http://www.megainformatic.boom.ru http://www.megainformatic.narod.ru
|
|||||||||
Cвои пожелания, вопросы или заметки отправляйте на: |
|||||||||
Обмен ссылками | |||||||||
|
|||||||||
(с) МЕГА ИНФОРМАТИК 2006-2009 | |||||||||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |