Как претворить в жизнь идею компьютерной игры? Приходилось ли вам, играя в свою любимую игру, мечтать о том, как можно было бы ее улучшить

Вид материалаДокументы

Содержание


Частотные синтезаторы
Красная книга компакт-дисков.
Программное обеспечение цифрового микшироваиия.
Загружаемые алгоритмы инструментов и звуковых эффектов.
Midiform somg.xmi songa.mid songb.mid songc.mid
При исполнении MIDI-музыки с помощью пакета программ MIDPAK мне кажется, что часть музыкальной композиции теряется
При исполнении MIDI-музыки с помощью пакета программ MIDPAK, она звучит иначе, чем при использовании моего собственного музыкаль
Мне не удается изменить громкость с помощью MIDPAK. Почему?
Могу ли я использовать один и тот же MIDI-файл для всех звуковых карт?
Функция № 1: DigPlay
Функция № 2: SoundStatus
Функция № 4: DigPlay2
Вход: ах-68вп
Функция № 5: AudioCapabilities
Подобный материал:
1   ...   18   19   20   21   22   23   24   25   ...   37

^ Частотные синтезаторы. Самой первой популярной звуковой картой для персонального компьютера была плата Adiib Personal Music System. Она содержала синтезатор частотной модуляции Yamaha YM3812 (OPL2) FM. Э".э квазипрограммируемое устройство способно с помощью осцилляторов формировать вид звуковой волны, используя частотную модуляцию, генератор белого шума и операторы нарастания, удержания, затухания и освобождения звука. Это звучит замысловато не только на словах, но и на деле. Устройство феноменально сложно программируется. Даже приложив всю вашу изобретательность при программировании частотного синтезатора, вам вряд ли удастся достичь приемлемых результатов. К счастью, с появлением нового поколения MIDI-синтезаторов с волновыми таблицами прямое программирование частотных синтезаторов уходит в прошлое. Существует „много .систем, позволяющих YM3812 эмулировать устройство MIDI, избавляя программистов от необходимости работать с замысловатой логикой этого устройства.

MIDI. Спецификация интерфейса электромузыкальных инструментов (MIDI) - это международный стандарт «де-факто», который определяет последовательный интерфейс для объединения музыкальных синтезаторов, музыкальных инструментов и компьютеров. MIDI поддерживается Ассоциацией производителей MIDI (Лос-Анджелес, Калифорния). Он опирается на аппаратное (каналы ввода/вывода и соединительные кабели) и программное обеспечение (тон, громкость и так далее). В соответствии со спецификацией, принимающее устройство в MIDI-системе должно интерпретировать музыкальные данные даже в том случае, если у передающего устройства нет возможности узнать, что способно делать принимающее устройство. Это чревато проблемами, если приемник не способен корректно интерпретировать данные. В обобщенном MIDI эта проблема решается предварительной идентификацией возможностей аппаратуры.

Все устройства обобщенного MIDI поддерживают звучание музыкальных и ударных инструментов, вместе со 128 звуковыми эффектами. Системы обобщенного MIDI поддерживают одновременное использование 16 MIDI-каналов с минимум 24 нотами в каждом и имеют определенный набор музыкальных контроллеров. Это означает, что в случае обобщенного MIDI передающее устройство знает, что ожидать от принимающего. Точно так же и файл, созданный одним устройством, соответствующим спецификациям обобщенного MIDI, распознается любым другим подобным устройством без потери нот или нарушения баланса инструментов при воспроизведении. Это, однако, справедливо только в теории. На практике же файл MIDI обычно имеет характеристики, существенно зависящие от конкретного устройства. Это обусловлено тем, что если сами инструменты и стандартизованы в обобщенном MIDI, то их баланс, тембр и качество — нет. Таким образом, каждый обобщенный MIDI-инструмент играет с разными характеристиками. При написании произведения MIDI для качественного исполнения на любом устройстве композитору не следует использовать специфические особенности конкретного синтезатора. Так как файлы MIDI обычно небольшие, то я, чтобы полностью использовать все возможности каждого синтезатора, обычно делаю различные версии для наиболее популярных MIDI-синтезаторов.

Большинство поставщиков придерживаются обобщенного стандарта MIDI, в том числе Roland (Roland Sound Canvas, Roland RAP-10), Creative Labs (AWE 32), Logitech- (Logitech SoundWave), Ensoniq (SoimdScape), Gravis (Gravis Ultrasound), Turtle (Turtle Beach Maui), Sierra Semiconductor (Aria). Кроме того, устройства с частотными синтезаторами, такие как Sound Blaster, также могут эмулировать устройства MIDI с помощью набора драйверов типа MIDPAK. Видимо, в будущем вся интерактивная музыка будет придерживаться стандарта .MIDI. Благодаря этому вы сможете качественно воспроизводить с помощью разнообразных звуковых карт полнооркестровые произведения, созданные для вас профессиональными композиторами. Файлы данных MIDI небольшие, требуют сравнительно небольшого числа прерываний для обслуживания и не сильно загружают процессор. Большинство современных MIDI-синтезаторов используют алгоритмы. Алгоритмы — это оцифрованные записи реальной игры на разнообразных инструментах. Алгоритмы хранятся в постоянном запоминающем устройстве синтезатора. И когда MIDI-файл описывает, например, звучание пианино, то используется оцифрованный звук настоящего пианино. Благодаря этому мы получаем удивительно реалистично звучащую музыку. Полный набор алгоритмов, включающий в себя хоровые эффекты и эффекты реверберации, придаст вашей музыке дополнительный колорит.

MOD. Файлы MOD стали популярны благодаря компьютерам Amiga фирмы Commodore. Феноменальные для своего времени возможности этого игрового компьютера просто поражали. Аппаратное обеспечение этой машины поддерживало четыре канала цифрового звука. Многие создатели игр, сотрудничавшие с фирмой Amiga, хотели, чтобы в их играх звучала музыка. Поэтому они придумали схему, позволяющую получать полнооркестровую музыку, а файлы, содержащие звуковые данные, получили наименование MOD. Практически, этот метод базируется на программной эмуляции частотного синтеза с использованием алгоритмов (о них мы рассказывали выше в разделе MIDI). Надеюсь, вы еще помните, что алгоритмы содержат оцифрованную запись игры на разнообразных инструментах и хранятся в ПЗУ. Когда требуется воспроизвести звук пианино, то модулируется частота настоящей, исполненной на фортепиано, оцифрованной ноты. При использовании технологии MOD-файлов, делается все то же самое, только программным путем. Это требует достаточного количества оперативной памяти для хранения оцифрованных звуковых эффектов и программного обеспечения для частотной модуляции в реальном времени. Такая задача отнимает много памяти и ресурсов процессора. Кроме того, написание музыки в виде MOD-файлов значительно более трудоемкая задача, чем создание композиций для MIDI.

Так что, хотя файлы MOD и являются наиболее полным, наиболее реалистичным методом создания музыки для простых устройств типа Sound Blaster, они все же не могут соревноваться с настоящим синтезатором MIDI. Кроме того, когда цифровой канал звуковой платы занят исполнением музыки, усложняется воспроизведение шумовых эффектов. Так как современный рынок движется в сторону MIDI-синтеза, наиболее разумным будет писать музыку в формате MIDI, а фоновые и шумовые эффекты воспроизводить с помощью оцифрованных звуков. Пакеты программ MIDPAK и DIGPAK как раз и предназначены для этих целей.

^ Красная книга компакт-дисков. Одно из преимуществ дисководов CD-ROM, которые становятся все популярнее, состоит в том, что они могут проигрывать стандартные компакт-диски. Однако вы не можете сделать так, чтобы ваша игра одновременно и работала с диска CD-ROM и воспроизводила музыку оттуда же. Доступ к записанным на CD-ROM данным и к звуковым дорожкам является полностью взаимоисключающим. Также невозможно добиться плавной работы программы при постоянном переходе от данных к звуку и обратно. Однако многие разработчики любят помещать музыкальные фрагменты из игр на звуковые дорожки CD-ROM, и вы также можете взять это себе на вооружение.

^ Программное обеспечение цифрового микшироваиия. За исключением Gravis Ultrasound и Creative Labs AWE32, почти все звуковые карты поддерживают только один канал для цифрового звука. Однако в интерактивной игре вам может потребоваться воспроизвести одновременно несколько звуков. Этого вы можете добиться, применяя программное обеспечение, которое осуществляет цифровое микширование. Так как звук аддитинен, этот процесс удивительно прост. Все необходимые звуки, которые должны звучать в данный момент, складываются в буфере, отсекаются точки, вышедшие за установленные пределы, а затем результат передается звуковой карте. Некоторые инструментальные пакеты для разработки программного обеспечения включают поддержку программного цифрового микширования в свои программные интерфейсы.

^ Загружаемые алгоритмы инструментов и звуковых эффектов. При использовании звуковых карт Gravis Ultrasound и Creative Labs AWE32 программа может загружать музыкальные инструменты или эффекты в память самой платы. После этого вы можете манипулировать ими, простоинициируя события MIDI. Это очень мощный метод, потому что он позволяет не только осуществлять поддержку многоканальности и использовать оригинальные инструменты и эффекты при низкой загрузке процессора и экономном расходовании памяти. Данный метод еще дает возможность манипулировать звуковыми эффектами в реальном времени, применяя сдвиг высоты звука, управление ударными инструментами и даже хоровые эффекты и эффекты реверберации.

Пакеты программ DIGPAK и MIDPAK

На подступах к новому тысячелетию разработчикам уже не надо беспокоиться о программировании на аппаратном уровне индивидуальных звуковых устройств. В Windows 3.1 уже существует механизм драйверов, позволяющий прикладным программам воспроизводить оцифрованный звук и музыку MIDI. Точно так же в реальном или защищенном режиме процессора существует ряд программных интерфейсов, освобождающих вас от этого тяжкого бремени, позволяя сфокусировать свои силы на написании самих звуков и музыки. Среди подобных коммерческих систем можно назвать Audio Interface Library фирмы Miles Design и Sound Operating System фирмы Human Machine Interfaces.

Одной из наиболее популярных среди разработчиков систем являются созданные фирмой Audio Solution пакеты программ DIGPAK и MIDPAK. Первый из них представляет собой универсальный DOS-интерфейс для испол­нения цифрового звука на практически любой звуковой карте. MIDPAK позво­ляет вам воспроизводить полнооркестровую MIDI-музыку практически на любой звуковой карте, включая прекрасную эмуляцию MIDI для карт, не обладающих подобной возможностью (например, Sound Blaster). С 1 января 1994 года пакеты программ DIGPAK и MIDPAK бесплатны для некоммерчес­кого использования. Небольшая лицензионная плата требуется для коммерчес­кого распространения драйверов. Эта плата идет на усовершенствование драй­веров и на содержание BBS поддержки — SoundBytes OnLine BBS.

Пакеты программ DIGPAK и MIDPAK были созданы для того, чтобы разработчик игр для DOS мог справиться с громадным количеством наводнив­ших рынок звуковых карт. Уже больше пяти лет мы с Джоном Майлсом из Miles Design (как и многие другие специалисты из фирм по производству звуковых плат) занимаемся разработкой, улучшением и обновлением этих драйверов. Пакеты программ DIGPAK и MIDPAK вы найдете на дискете, прилагаемой к этой книге, а чуть ниже в данной главе будет приведена докумен­тация на API этих пакетов. Обратите внимание, что на дискете есть дополни­тельная документация и многочисленные примеры использования драйверов.

Я хотел бы сказать спасибо всем, кто помогал создавать эти драйверы:
  • Джон Майлс, Miles Design
  • Скотт Синдров, Creativ Labs
  • Дуг Коди, MediaVision
  • Майк Лейбов, Forte
  • Майк Дабс, Simutronics
  • Керщен Хеллер, Sierra Semiconductor
  • Мило Стрит, Street Electronics
  • Брэд Крэг, Advanced Gravis
  • Ричард Мазерес, Turtle Beach

Что такое «расширенный MIDI-формат»?

Так как пакет программ MIDPAK использует драйверы AIL Miles Design, то он не проигрывает MIDI-файлы напрямую. Ваш MIDI-файл должен быть преобразован в расширенный MIDI-формат. Этот формат был разработан Miles Design. Он поддерживает несколько MIDI-последовательностей в одном файле, причем с помощью команды PlaySequence пакет программ MIDPAK позволяет переходить от одной последовательности к другой практически мгновенно. Процесс добавления нескольких MIDI-файлов в один расширенный MIDI-файл (XMI) выглядит следующим образом. Допустим, у вас есть три музыкальных файла SONGA.MID, SONGB.MID и SONGC.MID, и вы хотите поместить их в один файл XMI. Для этого в командной строке DOS надо выполнить следующую команду:

^ MIDIFORM SOMG.XMI SONGA.MID SONGB.MID SONGC.MID

Команда поместит эти три MIDI-последовательности в один файл расширенного MIDI-формата SONG.XMI. Вы можете манипулировать ими из MIDPAK, используя функции PlaySequence(0), PlaySequence(l) и PlaySequence(2).

В каком формате должны быть представлены данные MIDI?

В случае настоящего MIDI-устройства, такого как MPU401 или SoundCanvas, ему будут передаваться данные MIDI без каких-либо изменений (исключая сообщения SysEx).

В случае Adiib или Sound Blaster, MIDPAK будет эмулировать устройство MIDI и эта эмуляция имеет определенные ограничения;
  • Каналы 2-9 используются для мелодических инструментов;
  • Канал 10 используется для ударных инструментов;
  • Загружаемые алгоритмы должны быть в формате обобщенного MIDI.

Вопросы и ответы

В этом разделе приведены ответы на наиболее часто задаваемые вопросы, касающиеся озвучивания игр.

^ При исполнении MIDI-музыки с помощью пакета программ MIDPAK мне кажется, что часть музыкальной композиции теряется

Проверьте назначение каналов. Эмуляция MIDI на Sound Blaster и других картах происходит на каналах 2-9 для мелодических инструментов и на 10 канале для ударных. Многие программы записывают последовательности MIDI, начиная с канала 1. При эмуляции MIDI пакетом MIDPAK канал 1 игнориру­ется. Назначения каналов MIDPAK были разработаны для эмуляции Roland МТ-32. Несмотря на ряд усовершенствований для поддержки обобщенного MIDI, каналы все еще ограничены номерами со второго по девятый и десятым.

^ При исполнении MIDI-музыки с помощью пакета программ MIDPAK, она звучит иначе, чем при использовании моего собственного музыкального контроллера. Почему?

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

^ Мне не удается изменить громкость с помощью MIDPAK. Почему?

Уровень громкости в MIDPAK изменяется относительно базового уровня данного канала. MIDPAK не может изменить громкость, если вы не определили базовый уровень для каждого канала в вашем файле MIDI. Вы можете определить базовую громкость для MIDI-канала, используя Контроллер 7.

^ Могу ли я использовать один и тот же MIDI-файл для всех звуковых карт?

Нет, но вы можете сделать нечто похожее. Во-первых, сделайте запись в стандарте обобщенного MIDI. Затем ее нужно скорректировать для Sound Canvas, MIDI, OPL2/OPL3 и МТ-32. Базовые уровни громкости и качество звучания разных алгоритмов для этих устройств немного различаются. Исходные тексты программы SETM (программа конфигурации MIDPAK) входят в поставку (файл SETUP.ZIP) и, в зависимости от звукового драйвера выбранного пользователем, вы можете копировать различные версии вашей музыки.

API пакета программ DIGPAK

Пакет программ DIGPAK наряду с интерфейсами реального и защищенного режима DOS включает в себя набор исходных текстов, которые работают во всех моделях памяти. Драйверы DIGPAK полностью совместимы с драйверами MIDPAK. Кроме того, хотя все драйверы DIGPAK разрабатывались для реального режима, они работают в защищенном режиме через подключаемый интерфейс DIGPLAY. Поддержка защищенного режима требует наличия драйверов DIGPAK версии 3.4 или выше.

В версии 3.4 пока имеются не всё драйверы звука DIGPAK. Еще не конвертированы драйверы для Gravis Ultrasound и Turtle Beach Multisound. Кроме того, драйверы, использующие таймер 8253, также не будутработать в

защищенном режиме из-за большой потери производительности и возможных конфликтов вследствие высокой частоты прерываний таймера.

Набор драйверов оцифрованного звука использует вектор прерывания 66h, что обеспечивает прозрачный программный интерфейс. Ниже описываются два способа воспроизведения оцифрованного звука. Первый способ основан на прерываниях. Второй — на использовании библиотеки функций на Си или . ассемблере, которые позволяют не только осуществлять доступ к драйверам звука, но и предоставляют другие полезные функции. Эти функции находятся в исходном файле DIGPLAY.ASM.

******************************************************************

********* Спецификация интерфейса прерывания 66h *****************

******************************************************************

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

*** РЕАЛЬНЫЙ РЕЖИМ:

typedef struct

(

unsigned char far *sound* // дальний указатель на звуковые данные

unsigned short sndlen; // длина звуковой последовательности

short far *IsPiaying; // адрес флага состояния

short frequency; // частота воспроизведения

} SNDSTRUC;

*** ЗАЩИЩЕННЫЙ РЕЖИМ:

typedef struct

{

unsigned char *sound* // должен быть в формате

// СМЕШЕНИЕ:СЕГМЕНТ в пределах 1Мб!

unsigned short sndlen;// длина звуковой последовательности < 64К

short *IsPlaying; // адрес флага состояния. СМЕЩЕНИЕ:СЕГМЕНТ!

short frequency; // частота воспроизведения

} SNDSTRUC;

********* функции DIGPAK *****************************************

Замечание

Все неуказанные номера функций являются устаревшими.


^ Функция № 1: DigPlay

Функция DigPlay исполняет 8-битный оцифрованный звук. Она является базовой функцией DIGPAK для исполнения звуковых эффектов. Прикладная программа создает структуру звуковых данных, описывая положение звука в памяти и его продолжительность. Функция DigPlay может модифицировать содержимое звукового буфера. Поэтому если вам необходимо исполнить звуковой эффект более одного раза, используйте комбинацию функций MassageAudio и DigPlay2. Вы также можете использовать DigPlay для воспроизведения звука с разным разрешением с компакт-дисков и даже для его записи. Универсальность данной функции объясняется тем, что интерфейс пакета программ DIGPACK развивался в течение нескольких лет и изначально содержал только одну эту функцию. Для обеспечения совместимости сверху вниз, эта функция сохранила прежние возможности, получив расширенные установки различных режимов воспроизведения и записи.

Прототип этой функции находится в файле DIGPLAY.H. Реализация функции содержится в файле DIGPLAY-OBJ, объектном файле, созданном из файла DIGPLAY.ASM. Вы можете использовать либо интерфейсные функции, либо напрямую вызывать прерывание 66h.

Вход: AX=688h Номер команды

DS:SI *Реальный режим*

Указатель на звуковую структуру, описывающую звуковой эффект.

ESI *Прямая адресация*

В случае использования 32-разрядной адресации, ESI указывает на 32-разрядный адрес звуковой структуры в первом мегабайте адресного пространства. Будет преобразован драйвером DIGPAK в допустимый адрес СЕГМЕНТ:СМЕЩЕНИЕ.

Выход: Ничего

^ Функция № 2: SoundStatus

Данная функция проверяет текущее состояние звукового драйвера и возвращает номер версии для драйверов версии 3.1 и выше. Она используется для запроса текущего состояния исполнения звукового эффекта. Если в настоящий момент звуковой эффект воспроизводится, в регистре АХ будет возвращена 1. Данная функция также используется для определения версии звукового драйвера DIGPAK, числовое значение которой помещается в регистр ВХ. Это справедливо Для драйверов версий 3.1 и выше. Для получения этого значения вы также Можете использовать функцию ReportVersionNumber.

Вход: AX =689h

Выход: АХ =0 Звук не исполняется.

=1 В настоящий момент исполняется звуковой эффект.

ВХ= Начиная с версии 3.1 вызов функции SoundStatus возвращает в регистре ВХ номер версии. Номер версии возвращается в десятичном формате и умножен на 100, то есть значение 310 соответствует версии 3.10. Версии ниже 3.1 ничего невозвращают в регистре ВХ, так что вы должны обнулить его перед проверкой номера версии. Если ВХ остался нулевым, значит версия загруженного драйвера DIGPAK меньше, чем 3.1.

Функция № 3: MassageAudio

Функция преобразует звуковые данные в выходной формат аппаратного обеспечения. Данные будут преобразованы в необходимый аппаратно-зависимый формат в соответствии с заголовком структуры. Например, некоторые устройства не позволяют воспроизводить звук непосредственно в беззнаковом 8-битном формате. После переформатирования содержимого памяти, вы можете без перезагрузки данных использовать функцию DigPlay2 столько раз, сколько это необходимо.

ВХОД: AX=68Ah

DS:SI *Реальный режим* Указатель на звуковую структуру, описывающую звуковой эффект.

ESI *Прямая адресация* В случае использования 32-разрядной адресации, ESI указывает на 32-разрядный адрес звуковой структуры в первом мегабайте адресного пространства. Будет преобразован драйвером DIGPAK в допустимый адрес СЕГМЕНТ:СМЕЩЕНИЕ.

^ Функция № 4: DigPlay2

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

^ ВХОД: АХ-68ВП

DS:SI * Реальный режим* Указатель на звуковую структуру, описывающую звуковой эффект.

ESI *Прямая адресация* В случае использования 32-разрядной адресации, ESI указывает на 32-разрядный адрес звуковой структуры в первом мегабайте адресного пространства. Будет преобразован драйвером DIGPAK в допустимый адрес СЕГМЕНТ:СМЕЩЕНИЕ.

ВЫХОД: Ничего

^ Функция № 5: AudioCapabilities

Данная функция сообщает о возможностях аппаратного обеспечения. Она возвращает информацию от резидентного драйвера DIGPAK об ограничениях и специфических особенностях платы в виде слова состояния, которое вы можете легко проанализировать.

ВХОД: АХ=68Ch ВЫХОД: АХ=Бит 0 -> 1 - поддерживается фоновое воспроизведение

0 - драйвер воспроизводит звук только как основной процесс.

Бит 1-> 1 - исходные данные должны быть преобразованы для выходного устройства;

0 - устройство способно воспроизводить неформатированные 8-битовые беззнаковые звуковые данные

Бит 2 -> 1 - устройство может воспроизводить звук только с фиксированной частотой, но звуковой драйвер способен понизить частоту входных данных

0 - устройство способно воспроизводить звук с указанной пользователем частотой.

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

Бит 3 -> 1 — устройство использует вектор прерывания таймера во время воспроизведения звука.

Бит 4 -> 1 — драйвер поддерживает разделение таймера (не доступно в защищенном режиме).

Бит 5-> 1 — поддерживается режим ожидания.

Бит б-> 1 — поддерживается режим стереопанорамы.

Бит 7-> 1 - поддерживается воспроизведение 8-битного РСМ-стереозвука.

Бит 8-> 1 — поддерживается запись звука.

Бит 9-> 1 - поддерживается режим обратной записи DMA.

DX = Если драйвер может воспроизводить данные только с определенной частотой, в регистре DX содержится значение этой частоты.