...
В копилку Игрока
Помимо того, что вы можете воспроизводить звуки, хранящиеся в JAR-файле или в сетевом ресурсе, также можно проигрывать звуки из хранилища записей. Хранилище записей – это специальные базы данных, которые использует мидлет для доступа к данным и их хранения. Поскольку проще всего для хранения звуков использовать JAR-файл, то такой подход применяется чаще всего.
Воспроизведение звука из JAR-файла
Чтобы получить доступ к звуку, хранящемуся в JAR-файле мидлета, сначала необходимо убедиться, что нужный файл был добавлен в JAR-архив на этапе сборки мидлета. Если вы поместите звуковой файл в папке res внутри основной папки мидлета, он будет автоматически добавлен в JAR-файл при сборке мидлета инструментом KToolbar. Когда нужный файл находится в архиве, можно рассмотреть код, который необходим для его воспроизведения.
Чтобы воспроизвести звук из JAR-файла, необходимо создать поток звукового файла, а затем использовать его как основу для создания проигрывателя. Это может показаться не простой задачей, однако необходимо написать лишь пару строк кода. Ниже приведен фрагмент кода, который воспроизводит звук «окончания игры» из JAR-файла:
try {
Player gameoverPlayer;
InputStream is = getClass().getResourseAsStream("GameOver.wav");
gameoverPlayer = Manager.createPlayer(is, "audio/x-wav"); //MIME-тип auto/X очень важен – он означает волновой звук
gameoverPlayer.prefetch();
gameoverPlayer.start();
}
catch(IOException ioe) {
}
catch(MediaException e) {
}
Сначала создается объект InputStream, методу getResourseAsStream передается имя файла, который вызывается классом, возвращаемым методом getClass(). После того как входной поток создан, его необходимо передать в метод Manager.createPlayer(), а также указать MIME-тип звукового файла. В результате вы получаете новый объект проигрывателя, который почти готов к воспроизведению указанного звука. Чтобы убедиться, что звук воспроизводится с минимальной задержкой, вызывается метод prefetch(). Наконец, чтобы начать воспроизведение, вызывается метод start(). Поскольку некоторые из указанных методов могут вызывать исключения, их вызовы производятся в конструкции try-catch. Помните, вы можете вызвать метод start() столько раз, сколько это необходимо. Однако если вызывать этот метод, когда звук воспроизводится, то он не начнет воспроизводиться заново. Для этого применяется метод setMediaTime(), в который в качестве параметра следует передать 0. Это будет означать, что вы хотите остановить воспроизведение и начать его с начала:
gameoverPlayer.setMediaTime(0);
...
Совет Разработчику
Метод setMediaPlayer() можно использовать для перезапуска воспроизведения любых звуков, проигрываемых с помощью интерфейса Player, включая MP3-звуки и MIDI-музыку.
Если говорить о длительности воспроизведения ресурса, то с помощью методов getDuration() и getMediaType() вы можете определить нужные параметры. Оба метода возвращают время в миллисекундах. Первый метод возвращает длительность звукового файла, а второй – время от начала воспроизведения.
Когда вы завершите работу со звуковым файлом, важно освободить занимаемые ресурсы, вызвав метод close():
gameoverPlayer.close();
Вот и все, что нужно для воспроизведения звуков, хранящихся в JAR-файле. Такой подход рекомендуется для большинства мобильных игр, поскольку звуки загружаются достаточно быстро и с минимальной задержкой.
Воспроизведение звука через URL
В ряде случаев может возникнуть необходимость воспроизвести звук, хранящийся в сети. Например, в вашей игре могут воспроизводиться динамически создаваемые звуки, которые необходимо получать с сетевого сервера. Тогда вам все равно необходимо создать проигрыватель, но передать URL нужного файла. Вот как это можно сделать:
try {
Player gameoverPlayer = Manager.createPlayer
("http://yourserver/GameOver.wav");
gameoverPlayer.prefetch();
gameoverPlayer.start();
}
catch(IOException ioe) {
}
catch(MediaException e) {
}
Этот код проще, чем при использовании файла, хранящегося в JAR-архиве, нет необходимости создавать входящий поток. Но вместо этого, создавая проигрыватель, вы должны указать полный URL звукового файла. После того как проигрыватель создан, воспроизведение звука ничем не отличается от того, как если бы использовали звуковой файл из JAR-архива.
...
В копилку Игрока
Звук, загруженный из JAR-файла, становится доступным для воспроизведения намного быстрее, нежели при загрузке через сеть. Поэтому при попытке воспроизведения файла, хранящегося по указанному URL, может возникнуть значительная задержка. Конечно, это зависит от размера звукового файла и от скорости соединения.
Читать дальше
Конец ознакомительного отрывка
Купить книгу