...
Совет Разработчику
Если вы хотите контролировать число повторов мелодии, важно перед методом 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:
try {
InputStream is = getClass().getResourceAsStream("Music.mid");
musicPlayer = Manager.createPlayer(is, "audio/midi");
musicPlayer.prefetch();
is = getClass().getResourceAsStream("Celebrate.wav");
celebratePlayer = Manager.createPlayer(is, "audio/X-wav");
celebratePlayer.prefetch();
is = getClass().getResourceAsStream("Squish.wav");
squishPlayer = Manager.createPlayer(is, "audio/X-wav");
squishPlayer.prefetch();
is = getClass().getResourceAsStream("GameOver.wav");
gameoverPlayer = Manager.createPlayer(is, "audio/X-wav");
gameoverPlayer.prefetch();
}
catch (IOException ioe) {
}
catch (MediaException me) {
Читать дальше
Конец ознакомительного отрывка
Купить книгу