В первую очередь эта статья предназначена для игроделов, то есть для тех, кто хочет использовать в своей программе качественную музыку.
Насколько я наблюдаю, сейчас существует несколько способов добавления музыки в коммерческие игры. Да впрочем вы и сами все это знаете, если играли в игры.
Самый частый способ сейчас, это изобретение нового, а скорее небольшая корректировка "под себя" уже существующего формата сжатия аудиозаписи. При этом, размер аудиоклипа получается сравнимым с форматом MP3, т. е. ~1мб - 1 минута. Другой способ - вообще не применение сжатия, а просто помещать весь музон в WAV формате, при этом качество и улучшается, тормозить игра становится меньше, а размеры аудио разбухают до невероятных размеров. Самым не влияющим на быстродействие компа является помещение звука на аудио диске. Однако при этом начинаются глюки и тормознутости, если сидюк у пользователя привередливый (например как у меня). Понятно, что производители-гиганты места не считают, ведь у них игры измеряются дисками и могут себе позволить все эти способы.
Но нам, как скромным программистам эти способы не подходят. Игры мы носим на дискетках, а на болванки записываем продукты нескольких лет творчества :) ...
Короче, все способы добавления музыки в низкокилобайтных играх сводились к применению небезызвестного формата MIDI (Musical Instrumnt Digital Interface). Он конечно не плох, когда вы делаете казино с музыкой в стиле зевнуть и уснуть, и когда у юзера звуковая карта с обалденным Wavetable'ом... Вобщем у большинства игроков ваш МИДИ будет звучать как на похоронах музыкального искусства. Несомненным преимуществом MIDI является только лишь его смешные размеры. Композицию длиной в десяток минут можно уложить мешьше, чем в сотню килобайт.
В общем, MIDI нам тоже не подходит. Тогда что же?
Если вы знаете, как устроен MIDI, то можете пропустить этот абзац.
Сам MIDI файл на самом деле представляет собой набор команд аудиокарте, и звука
не содержит. В аудиокарте "зашито" 128 стандартных инструментов, которые
она по возможности воспроизводит. Так вот, файл MIDI - это не что иное как ноты,
по которым аудиокарта изображает симфонический оркестр и ирает музыку (?) В
дешевых аудиокартах эти 128 инструментов синтезируются. В картах типа SoundBlaster32
записаны готовый 32 инструмента, в AWE64 - 64 инструмента и так далее.
Теперь представьте себе такой файл, в котором будут записаны такие-же МИДюшные
ноты, а инструменты будут присандалены к этому же файлу. Ну и что мы получим?
Получим MOD!
MOD проигрывает уже не чисто аудиокарта, а процессор. Он берет инструменты из
MODа, а затем по нотам пробует представлять различные тональности звучания инструмента.
Сам инструмент - это чаще всего WAV файл, в котором записано что-нибудь типа
"блюм", похожее, например, на удар по клавише пианино. При этом инструмент,
в зависимости от качества может занимать от 1 до много килобайт, а вся композиция
может использовать всего 5-10 инструментов. В результате, файл с композицией
занимает опять таки в зависимости от качества от 40 до 1000 кб. Конечно, можно
и больше, но это уже для музыкантов, а не игроделов. И это еще не все! MOD может
сжиматься WinZIPом почти в два раза! Он может использовать от 4-х до около 50
каналов. Делать независимый PAN на каждом канале, вобщем полный DolbySURROUND
[where avialable]...
Ну как, вы уже поняли?
MOD'ы бывают разных форматов:
Самый рулезный (на мой взгляд, естественно) редактор MODов на сегодняшний день - ModPlug Tracker. Он работаете по Винды и поддерживает все форматы + SoundBank'и + Экспорт в Wav и MP3 + еще много чего. Обязательно зайдите на сайт его создателя - Olivier Lapicque (http://www.jps.net/oliverl)
Что надо, чтобы просто послушать MOD?
Возьмите Winamp (http://www.winamp.com)
- это лучше всего. Нет Winamp'а, скачайте мою прогу в конце это статьи и слушайте
свой первый MOD с ее помощью.
Где взять MODы?
Громадная... Просто огромная коллекция MODов на любой вкус и направление лежит
на http://www.modarchive.com
Как добавить MOD к своей программе?
Вот тут мы и подошли к самому главному вопросу. Если вы слушали MODы через Winamp,
то наверняка обращали внимание, как тормозит при этом комп. Естественно, для
игры это никак не годится. Другой известный плеер, который я иногда юзаю - ModPlugPlayer.
Качество ужасное, но процессор почти свободен. Отсюда напросились требования
к проигрыванию MODов в нашей программе - качественно и не тормознуто.
В этом месте я хочу сказать спасибо всем тем, кто на разных конференциях подсказал мне места, где можно найти контролы - проигрыватели MODов.
Итак, после вечера поисков, на моем винчестере оказались несколько контролов и библиотека. Причем библиотека эта была от того самого ModPlugPlayer'а, и соответственно обладала огромным количеством функций работы с МОДами. Эта библиотека лежит на том же сайте http://www.jps.net/oliverl и туда я вынужден направить программирующих на Си, так как там есть ее описание для Си (на VB, однако ее тоже можно использовать).
Но как я уже сказал, качество звучания ModPlug, по крайней мере у меня на компе, просто отвратное (А ведь MOD должен звучать у всех примерно одинаково). Поэтому, после некоторого тестинга, я остановился на очень удобном, хотя и немного недоделанном контроле DMC2.
Эта приятная вещица, которую я взял на http://www.active-x.com, может качественно проигрывать не только MOD'ы, но еще MP3 и WAV'ы, что делает ее весьма полезной для создания игр. Кроме того, DMC2 использует DirectSound, а это - быстрота. Для работы, на компе у енд-юзера должны быть установлены два файла - dmc2.ocx и библиотека bass.dll, которая идет вместе с контролом.
Как пользоваться DMC2?
Легко! Создайте проект, поместите на форму контрол DMC2 и кнопку Command1.
И все! Контрол имеет несколько самых необходимых настроек для модуля, а также свойства текущей позиции проигрывания в модуле, его длину и т.п.Sub Form_Load ()
dmc1.InitBass Me.hWnd, 44100, false, false 'Инициализация контрола
dmc1.OpenModule "test.xm",false 'Открыть модуль
End SubSub Command1_Click()
dmc1.PlayModule 'Играть
End Sub
Контрол также имеет неплохую справку, понятную даже ребенку, так что вы не заблудитесь в его свойствах.
Я протестил контрол на DirectX игрухе, которую сейчас делаю - на максимальном качестве, контрол не затормозил игру ни на один FPS!
Вобщем, пробуйте! На мой взгляд, использование MODов в игре оправдывает себя на все 100%!
Удачи!
Anti's ModPlayer - исходники использования DMC2 и сам DMC2
Приятного программирования, Antiloop
Posted: 28.01.2k1
Autor: Antiloop
<anti_loop@mail.ru>