Чтение онлайн

ЖАНРЫ

Создание игр для мобильных телефонов
Шрифт:

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

Я уже несколько раз упомянул термин MIDI-музыка, но не объяснил, как она хранится и как работать с ней. Подобно волновым звукам, MIDI-музыка хранится в файлах, которые имеют расширение. mid. В отличие от wav-файлов, файлы MIDI-музыки не так велики, поскольку ноты не занимают много места. Подобно wav-файлам, их можно воспроизводить с помощью проигрывателя, например, Windows Media Player (рис. 9.2). В отличие от волновых файлов, создание MIDI-музыки требует специальных музыкальных знаний и особого программного обеспечения.

Рис. 9.2. Для воспроизведения MIDI-музыки можно использовать Windows Media Player

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

Воспроизведение MIDI-музыки в мобильных играх

Благодаря интерфейсу Player из MIDP 2.0 Media API подобно wav-файлам MIDI-музыку очень легко воспроизводить. Процесс воспроизведения MIDI-музыки несколько отличается от процесса воспроизведения волновых файлов.

Воспроизведение MIDI-музыки из JAR-файла

Чтобы воспроизвести MIDI-песню из JAR-файла, вы должны создать входящий поток, как и при воспроизведении из JAR-архива волнового файла. После того как вы создали входящий поток MIDI-файла, его необходимо использовать для создания проигрывателя, после чего воспроизводить. Ниже приведен код, который создает проигрыватель MIDI-файла из JAR-архива:

try {

Player musicPlayer;

InputStream is = getClass.getResourseStream("Music.mid");

musicPlayer = Manager.createPlayer(is, "audio/midi"); //Обратите внимание, что для воспроизведения MIDI-файла используется другой MIME-тип

musicPlayer.prefetch;

musicPlayer.start;

}

catch (IOException ioe)

}

catch (MediaException e) {

}

Единственная хитрость в этом коде – это MIME-спецификация воспроизводимого MIDI-файла при создании проигрывателя. Помимо этого, вызывается метод prefetch, который минимизирует задержку, а метод start запускает воспроизведение звука.

...

Совет Разработчику

MIDP 2.0 Media API также поддерживает воспроизведение MP3-музыки. Чтобы загрузить и воспроизвести MP3-песню, создайте входящий поток точно так же, как и в случае воспроизведения MIDI-песни или волнового файла, передайте имя и укажите MIME-тип файла, audio/mpeg.

Говоря о воспроизведении музыки, я упустил одну деталь. Я имею в виду повторы воспроизведения. По умолчанию звуковой файл воспроизводится один раз. Если требуется воспроизводить мелодию снова и снова, вы можете установить большое число повторов:

MusicPlayer.setLoopCount(-1);

Обычно в этот метод передается число повторов воспроизведения музыки, если вы передадите -1, то мелодия будет повторяться бесконечно, или до тех пор, пока не будет вызван метод stop.

...

Совет Разработчику

Если вы хотите контролировать число повторов мелодии, важно перед методом start вызвать метод setLooptCount.

Ниже приведен код, который необходимо вызвать для закрытия проигрывателя MIDI-файла:

musicPlayer.close;

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

Воспроизведение MIDI-файлов через URL

Как же воспроизвести файл через URL? Зная, как воспроизвести файл из JAR-архива, вы можете догадаться, что воспроизведение MIDI-файла через URL будет похоже на аналогичное воспроизведение wav-файла. И вы будете правы! Ниже приведен код, выполняющий это:

try {

Player gameoverPlayer =

Manager.createPlayer("http://yourserver/Music.mid");

gameoverPlayer.prefetch;

gameoverPlayer.start;

}

catch(IOException ioe) {

}

catch(MediaException e) {

}

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

Создание программы Henway 2

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

Первый шаг, который нужно сделать на пути добавления звука в игру, – это определить, какие именно моменты игры можно улучшить, используя звуковое сопровождение. Не нужно много думать, чтобы понять: цыпленок готовится перебежать через шоссе, цыпленок удачно перебирается на другую сторону дороги, и окончание игры. Но вы можете добавить, например, звуковое сопровождение шагов цыпленка, а также добавить звук клаксонов автомобилей. Но это тот случай, когда необходимо экспериментировать с настоящим мобильным телефоном, поскольку только так вы сможете определить грань необходимого числа звуков. Я не говорю о том, что звук – это плохо, но просто он замедляет выполнение мидлета.

...

Совет Разработчику

Если вы столкнулись с проблемой, что в конкретной ситуации необходимо использовать звук, но при этом вы теряете в производительности, вы всегда можете использовать тоны. Нет причины, по которой вы не должны смешивать тоны с цифровыми звуками. Такой подход позволяет создавать интересные звуковые эффекты без потери производительности.

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

В результате в игре Henway 2 будут следующие звуки:

► Celebration – цыпленок удачно перешел через дорогу;

► Squish – цыпленок попал под машину;

► Game Over – умер последний цыпленок, игра закончена;

► Music – фоновая музыка, воспроизводимая во время игры.

Первые три звука – это волновые звуки, последний – или MP3, или MIDI. Поскольку MIDI обычно занимают много меньше места и менее требовательны к ресурсам по сравнению с MP3, в игре Henway 2 я буду использовать MIDI-мелодию.

Написание программного кода

Первый фрагмент нового кода – это создание проигрывателей. Ниже приведены четыре проигрывателя, необходимые для воспроизведения звуков, они объявлены, как переменные класса HCanvas:

private Player musicPlayer;

private Player celebratePlayer;

private Player squishPlayer;

private Player gameoverPlayer;

Как видно их этого кода, переменные ничем не отличаются друг от друга, кроме как именами. Разницы между проигрывателями MIDI-музыки и волновых звуков нет, пока они не созданы. Далее приведен код, создающий проигрыватели, он находится в методе start класса HCanvas:

Поделиться с друзьями: