Музыкальные форматы в играх
Shiru (A.Semenov) mailto:shiru at mail dot ru



В процессе разработки игры рано или поздно встаёт вопрос - какие форматы для хранения игровых данных использовать. Целью данного обзора является рассмотрение особенностей, преимуществ и недостатков популярных форматов музыкального сопровождения в играх, с тем, чтобы исходя из полученной информации, можно было сделать разумный выбор в рамках своего проекта. Технические нюансы воспроизведения (как, чем) упоминаемых здесь форматов выходят за рамки статьи, поэтому здесь не рассматриваются.

Условно можно разделить форматы, используемые для хранения музыки, на две группы: потоковое аудио, где содержится конечный аудиотрек (т.е. просто звук), возможно сжатый для уменьшения размера; и собственно музыкальные форматы, где хранится набор указаний о том, когда и какую ноту играть, плюс звуки (сэмплы), которыми эти ноты надо воспроизводить. Для начала рассмотрим особенности этих двух групп.




Потоковое аудио

Это не совсем музыкальный формат - это звук, как он есть, записанный в файл. Но этот звук вполне может быть музыкой, поэтому в контексте данной статьи потоковое аудио является также и музыкальным форматом. Потоковым оно называется потому, что файлу не требуется присутствовать в памяти целиком - достаточно подчитывать с носителя небольшие кусочки, декодировать (если требуется), и отправлять на воспроизведение. Потоковое аудио бывает со сжатием и без него.

Форматы потокового аудио без сжатия для хранения музыки в играх обычно не используются, из-за огромного размера: одна секунда стереозвука CD-качества (44100hz, 16bit) занимает 172 килобайта. Исключение ранее составлял CD-DA, формат аудио компакт-дисков. Но игр с музыкой в этом формате в последние годы не наблюдается - всегда находится, чем забить немногочисленные, по современным меркам, мегабайты CD/DVD-дисков.

Более подходящими для игрового применения являются аудиоформаты со сжатием. Существуют алгоритмы сжатия звука без каких-либо потерь качества (т.н. lossyless алгоритмы), но выигрыш в объёме у них крайне несерьёзный, поэтому наиболее распространены форматы сжатия с потерей качества (lossy алгоритмы). Популярные алгоритмы сжатия, дающие большой выигрыш в объёме конечного файла, используют идею 'психоакустического кодирования' - динамического исключения из сигнала частот, плохо воспринимаемых человеческим слухом. Обычно выбирают такой уровень потерь, который малозаметен на слух. Алгоритмы сжатия звука обычно работают с фиксированным коэффициентом сжатия, для игр это обычно что-то около 11:1...7:1 (поток данных 128...192kb/s). Существует огромное количество форматов сжатия звука, но наиболее известными и используемыми из них являются MP3, WMA, OGG.

MP3 - наиболее старый, очень распространённый формат. Изначально появился, как формат сжатия звуковой дорожки для видеофильмов в формате VideoCD (полное название MP3 - MPEG Audio Layer III), но довольно быстро стал использоваться и сам по себе. Сейчас MP3 является промышленным стандартом. Использование звуковых файлов с MP3-сжатием в коммерческих игровых проектах, издающихся тиражом более 5000 копий, стоит денег - $2500 за один продукт (game license, подробнее о лицензировании смотрите ссылки в конце статьи). На сегодняшний день MP3 обеспечивает не лучшие показатели в соотношении размер/качество. Улучшенные варианты формата MP3 - MP3pro, например - при показателях, аналогичных WMA/OGG не завоевали особой популярности.

WMA - Windows Media Audio, формат, продвигаемый самой Microsoft как более совершенная альтернатива MP3, является примерно аналогичным по возможностям формату OGG. Его использование в программных продуктах для хранения звукового контента не требует лицензирования.

OGG - относительно новый формат сжатия звука, представляет наибольший интерес для разработчиков игр. Он не требует никакого лицензирования, его можно совершенно законно использовать бесплатно; при этом он обеспечивает более высокое качество звучания при одинаковом с MP3 размере, либо меньший размер при одинаковом качестве звука. Правда, декодирование OGG требует несколько больших вычислительных ресурсов, чем MP3/WMA. Программные кодеры и декодеры от создателя формата (Vorbis) распространяются с открытым исходным кодом.

Плюсы использования потокового аудио для хранения музыки:

Минусы:




Музыкальные форматы

Собственно музыкальными форматами являются форматы, содержащие не конечный звук, а только лишь информацию о том, как его получить. Т.е., информацию о том, когда и какие ноты какими звуками играть (и - необязательно - сами эти звуки). За счёт этого возможно достижение значительного выигрыша в объёме хранимой информации (размере файла). Получение окончательного звука (который услышит игрок) происходит непосредственно в процессе проигрывания музыки. Это отнимает некоторые вычислительные ресурсы, но в целом нагрузка не выше, чем при декодировании сжатого потокового аудио, а обычно даже меньше (проигрывание музыкальных форматов поддаётся аппаратному ускорению; на PC, к примеру, требуемая аппаратная поддержка встречается намного чаще, чем требуемая аппаратная поддержка для декодирования сжатого аудио).

Музыкальные форматы накладывают некоторые ограничения на свободу творчества музыканта - длинную вокальную или записанную вживую инструментальную партию, например, уже не вставить - точнее, это будет невыгодно, т.к. приведёт к увеличению размеров файла, и удобнее будет использовать потоковое аудио. Для "живой" музыки (симфонический оркестр, рок-группа, и т.п.) однозначно нужно использовать потоковое аудио. Музыкальные форматы подходят лишь для имитации живой музыки (для случаев, когда звучание имитации становится приемлемым за счёт существенного выигрыша в размерах файла), либо для электронной музыки. Достичь абсолютного сходства звучания композиции в музыкальном формате с живой музыкой практически невозможно, возможны лишь разные степени приближения. Как показывает практика, это ограничение не является серьёзным недостатком.

Используемые в играх музыкальные форматы можно разделить на две подгруппы: MIDI и семейство трекерных форматов (т.н. трекерные модули, иногда также называемые просто модулями). Главное различие между этими двумя подгруппами - стандартные MIDI-файлы содержат в себе только ноты, тогда как в трекерных модулях помимо нот хранятся сэмплы, которыми эти ноты озвучиваются. Остальные отличия касаются, в основном, некоторых ограничений, накладывающих свою специфику при написании музыки.

Важный момент: и MIDI, и трекерные форматы не требуют лицензирования для их использования в коммерческом продукте.



Музыкальные форматы: MIDI

MIDI (Musical Instruments Digital Interface) - аппаратный интерфейс, а также стандарт, описывающий процесс обмена музыкальными данными между электронными музыкальными инструментами. Музыкальные данные - это не звук, это, говоря очень упрощённо, только информация о нажимаемых/отпускаемых клавишах синтезатора. MIDI - также стандарты хранения этой информации в файлах (наиболее известные варианты - .mid, .midi). MIDI можно в некотором приближении назвать "потоковым музыкальным форматом", т.к. для его воспроизведения нет необходимости иметь весь файл в памяти - можно подчитывать его по кусочкам, как и в случае с потоковым аудио. Но это единственное сходство между этими форматами.

Многие пользователи PC, услышав слово "миди", презрительно говорят что-то вроде - "а, это такие маленькие файлики, с ужасно звучащей музыкой" (особенно те, у кого ещё сохранились раритетные звуковые карты без качественных WaveTable-синтезаторов). Важно понимать, что звучание записанной в MIDI-файл композиции - это звучание синтезатора в вашем компьютере, через который содержимое файл воспроизводится, качество звучания напрямую зависит от качества синтезатора. Мало кто знает, что MIDI повсеместно используется при создании профессиональной электронной музыки (в т.ч. и для создания музыки к играм, для последующей записи в аудиоформат).

В настоящий момент единственным используемым принципом работы MIDI-синтезаторов на PC является т.н. WaveTable-синтез. Т.е., есть набор (банк) звуков различных инструментов (описанный стандартом, минимум 128 инструментов и 64 звука ударных), синтезатор воспроизводит ноты этими звуками. В MIDI-файле звуки инструментов не хранятся, а банки инструментов от разных производителей звуковых карт могут различаться (не составом инструментов, но особенностями их звучания). Поэтому с разными банками инструментов звучание одного и того-же MIDI-файла несколько изменяется, что иногда составляет определённую проблему. Написанная под один банк композиция может плохо звучать с другим (из-за различающегося баланса громкостей инструментов, например). Это-же накладывает и ограничение на творческую свободу музыканта - он ограничен только теми тембрами (инструментами), которые описывает стандарт. С другой стороны, отсутствие сэмплов инструментов в MIDI-файле очень сильно уменьшает его размер - огромной длины композиция может весить всего 50-100 килобайт, и при этом отлично сжиматься обычным ZIP`ом в несколько раз.

Есть несколько обратно совместимых стандартов MIDI - основной, General Midi (GM); расширение от Roland (GS); более продвинутое расширение от Yamaha (XG). Расширенные форматы обладают большим количеством инструментов в стандарте (минимум 226 для GS, минимум 480 для XG - не считая ударных), и дополнительными возможностями управления синтезом звука, за счёт которых можно разнообразить и улучшить качество звучания.

Для воспроизведения MIDI нужен MIDI-синтезатор в системе - на PC это может быть звуковая карта с аппаратным WaveTable синтезатором (GM/GS/XG, со своим банком звуков), либо простейшая звуковая карта (типа AC'97) с программным синтезатором (который отъедает часть производительности системы; программный GS-синтезатор со стандартным звуковым банком есть в составе DirectX). На устройствах типа мобильных телефонов это может быть простой аппаратный синтезатор (для программного синтеза мощности пока не те), причём не WaveTable, а одного из альтернативных способов синтеза (обычно это FM-синтез), очень приблизительно имитирующих звучание инструментов.

Если аппаратного синтезатора в системе нет, а для программного синтеза недостаточно ресурсов процессора/памяти - воспроизводить MIDI на таком устройстве невозможно.

Плюсы: Минусы:


Музыкальные форматы: трекерная музыка

Музыку в этом формате также называют 'модулями'. Как и в MIDI, в файле хранятся данные о нотах, но кроме них также и сэмплы, которыми ноты будут озвучиваться при проигрывании. На этом сходство заканчивается - технически между MIDI и трекерной музыкой больше различий, чем сходств. Несмотря на общую идею (хранить ноты, а не конечный звук), реализации этой идеи сильно различаются.

Трекер - это музыкальный редактор с определённым типом интерфейса (вертикальные столбцы цифр и букв вместо привычного для музыкантов нотного стана). Трекеры появились очень давно, ещё на первых домашних компьютерах, имевших простейшие устройства для синтеза звуков. Ноты озвучивались аппаратными средствами системы (например, через чип SID на C64, через чип AY на ZX128). Трекеры, использующие для озвучивания нот сэмплы, появились в конце 80-х на платформе AMIGA, а позже распространились и по всем остальным платформам, имеющим средства для воспроизведения цифрового звука.

Сам принцип работы трекеров накладывает определённые ограничения на возможности музыканта, с другой стороны, предоставляя не совсем обычные возможности управления звуком. В отличии от профессионального стандарта MIDI, это - любительский стандарт, разработанный любителями компьютерной музыки, а не производителями музыкального оборудования. Написание музыки в трекерах отличается от работы с профессиональными программными MIDI-секвенсорами. Основные особенности трекеров:

- Жёсткая квантизация времени - ноты не могут начинать и прекращать звучать в произвольное время, а только на определённых позициях (это затрудняет исполнение некоторых эффектов, например, плавного взятия гитарного аккорда);
- Отсутствие полифонии на отдельно взятом канале (дорожке), одновременно может звучать ровно столько нот, сколько каналов в треке;
- Наличие "эффектов" - команд, влияющих на процесс воспроизведения каждой отдельно взятой ноты. Эффекты могут быть как вполне обычными (с музыкальной точки зрения) - вибрато, управление громкостью, портаменто; так и не вполне обычными - смещение начала сэмпла, управление фильтрами, и т.п.

Несмотря на некоторые ограничения (по сравнению c MIDI), хранение сэмплов в файле с композицией даёт очевидные преимущества - возможность использовать любые необходимые тембры, фрагменты исполненных "вживую" партий (гитарные рифы, барабанные лупы) - это позволяет поднять качество звучания, и сделать его более приближенным к "живому звучанию".

Существует большое количество трекерных форматов - как правило, каждый новый редактор помимо поддержки нескольких наиболее популярных форматов, имел и свой собственный формат. Форматы различаются возможностями и организацией данных внутри файла, но общая идея остаётся неизменной. Наиболее популярными являются четыре формата, ставшие стандартными (поддерживаются практически всеми редакторами): простые MOD (Sound Tracker/Pro Tracker) и S3M (Scream Tracker), и более совершенные XM (Fast Tracker) и IT (Impulse Tracker).

Самый первый трекерный формат - MOD (от слова module, поэтому трекерную музыку и называют модулями) - имел скромные возможности: 4 канала, максимум 15 инструментов (только 8-bit сэмплы, плюс возможность простейшей петли в сэмпле), скудный набор эффектов. Позднее появилась модификация MOD с возможностью использовать 31 инструмент и 8 каналов.

S3M несколько расширяет возможности MOD - в частности, можно использовать до 32-х каналов, увеличенное количество эффектов. Но формат сэмплов по-прежнему ограничен 8-bit.

XM и IT дают гораздо большие возможности для творчества, и заметно более высокое качество звучания. Большое количество каналов (зависит от редактора и поддержки со стороны плеера), большое количество эффектов, 16-битные сэмплы (они могут быть зациклены как прямой, так и двунаправленной петлёй), 64 инструмента. Инструменты в XM/IT не являются синонимом сэмплу - это описание, какие сэмплы использовать для определённых диапазонов нот инструмента (т.н. слои, это нужно для повышения качества имитации живых инструментов), громкостная и панорамная огибающая, и некоторые другие параметры.

Воспроизведение MOD/S3M требует несколько меньших ресурсов CPU, чем воспроизведение более сложных XM/IT. Нагрузка на CPU также зависит от количества каналов в модуле и от используемого алгоритма интерполяции при микшировании (от качества интерполяции сильно зависит качество звучания).

Файлы трекерной музыки могут занимать от сотен байт до нескольких мегабайт. Размер файла напрямую зависит от количества и качества используемых сэмплов. В среднем более-менее прилично звучащий модуль (причём любой длительности) занимает 200-500 килобайт.

Для уменьшения объёма, занимаемого музыкой в игре, можно хранить несколько композиций в одном файле, используя в них одни и те-же сэмплы инструментов. Возможности трекеров позволяют организовать несколько зацикленных фрагментов внутри композиции, в игре можно воспроизводить такой трек, начиная с разных позиций внутри него.

Существуют модификации стандартных трекерных форматов с использованием сжатия сэмплов посредством OGG/MP3. Это форматы MO3 (объединяет в себе форматы IT/XM/S3M/MTM/MOD) и OXM (стандартный XM, но с использованием OGG для упаковки сэмплов). Оба формата используют сжатие только для тех сэмплов, для которых оно даёт выгоду в размере. Сжатие сэмплов приводит к существенному уменьшению занимаемого на диске объёма при практически незаметном на слух снижении качества. Сэмплы хранятся сжатыми только в файле, при загрузке модуля они разворачиваются в памяти, поэтому само проигрывание таких модулей не даёт увеличения нагрузки на CPU, но модуль при воспроизведении будет занимать столько-же оперативной памяти, сколько и неупакованный. Использование сжатия сэмплов может позволить как просто уменьшить размер файла, так и повысить качество звучания без изменения размера (за счёт использования более качественных сэмплов). Данная технология может быть непригодной для использования на маломощных платформах - сэмплы могут слишком долго декодироваться (загружаться).

Плюсы: Минусы:


Что выбрать?

Ознакомившись со спецификой различных музыкальных форматов, мы можем наконец перейти к собственно проблеме выбора наиболее подходящего из них, в рамках конкретного проекта. Для начала нужно определить критерии отбора: какие возможности имеет платформа, на которой работает ваша игра, какие технические ограничения имеются. В частности - критичен-ли объём занимаемой музыкой на носителе и, при проигрывании, оперативной памяти; критична-ли нагрузка на CPU; есть-ли аппаратные возможности для проигрывания музыки (декодер MP3, MIDI-синтезатор).

Потоковое аудио резонно использовать, когда нет жёстких ограничений по объёму, занимаемому на носителе, и достаточно мощности CPU для декодирования (либо есть аппаратный декодер). Также, если необходимо создать очень качественное музыкальное оформление (примеры: радиостанции в серии игр GTA; записанная вживую музыка), других вариантов, кроме потокового аудио, просто не остаётся. Большим плюсом этого формата является отсутствие проблем с навыками (или их отсутствием) использования различного оборудования и программ ваших музыкантов - они могут свободно использовать те средства, которые им наиболее удобны, т.к. результат всегда можно записать в аудиофайл.

Если имеются жёсткие ограничения по объёму занимаемой памяти, лучше задуматься о музыкальных форматах - MIDI или трекерной музыке. Выбирать между этими двумя направлениями нужно, исходя из возможности воспроизведения форматов на целевой платформе (MIDI на Palm или GBA, скажем, особо не поиграешь) и ограничений в размерах файлов. Также не последнюю роль играют возможности ваших музыкантов (т.к. создание качественной музыки в этих форматах требует определённых навыков).

Сейчас популярно использовать в условиях сильного ограничения объёма памяти на носителе (обычно это shareware игры на PC), отводимого под музыку, одно-двухминутных отрывков потокового аудио (обычно OGG) в очень низком качестве (от 56 kbps и ниже, в 22050hz моно - это около 500-600 килобайт). В таких случаях стоит задуматься о возможности использования трекерных форматов - мощности CPU в этом случае на воспроизведение хватит, зато при том-же или меньшем размере файла можно получить существенно более качественное, чистое звучание (возможно, менее живое - но здесь всё зависит от квалификации музыканта).

Если проект на PC, а место под музыку ограничено очень сильно (скажем, 500 килобайт на всё музыкальное оформление), можно задуматься об использовании вместо потокового аудио и трекерных модулей MIDI-файлов. Проблему с различием звучания при использовании разных звуковых банков можно решить, используя программный MIDI-синтезатор DirectX - Microsoft Software GS MIDI Synthezer. Он использует идущий в поставке DirectX трёхмегабайтный GS-банк, и, если писать MIDI-трек специально в расчёте на этот синтезатор, можно получить весьма приличный звук при минимальном расходе памяти на музыкальное оформление (в 500 килобайт свободно поместится десяток неупакованных 5-10 минутных MIDI-файлов). Также можно использовать свой программный MIDI-синтезатор, или свой DLS-банк - в этом случае вы получите все преимущества работы с музыкой посредством MIDI, и возможность использовать собственные тембры, свойственную трекерным форматам.

На КПК и ручных игровых приставках наиболее подходящим сейчас форматом является трекерная музыка (конкретный формат выбирается в зависимости от мощности CPU) - объёмы носителей, в отличии от мощности процессоров, там пока не доросли до возможности свободного использования потокового аудио в играх.


В заключение хочу сказать - выбор музыкального формата не должен ограничиваться вашими возможностями программной реализации проигрывателя. Существует огромное количество готовых библиотек (как платных, так и бесплатных) для воспроизведения всех перечисленных форматов для всех платформ, где это возможно реализовать аппаратно.




Полезные ссылки

Информация о лицензировании MP3
Сайт разработчиков формата OGG (информация, исходники)
Прямая ссылка на FAQ по OGG (включая вопросы лицензирования)
Лицензирование WMA
Всё о трекерах и трекерной музыке (на русском)
OGGMOD - конвертор XM в OXM
Конвертор в MO3