Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Создание игр для мобильных телефонов - Майкл Моррисон

Создание игр для мобильных телефонов - Майкл Моррисон

Читать онлайн Создание игр для мобильных телефонов - Майкл Моррисон

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 27 28 29 30 31 32 33 34 35 ... 87
Перейти на страницу:

MIDP 2.0 Media API разработан с учетом трех основных компонентов: менеджер, проигрыватель и управление. Вместе эти три компонента создают программный интерфейс для работы с различными аудиосредствами. Классы и интерфейсы, входящие в состав MIDP 2.0 Media API размещены в пакетах javax.microedition.media и javax.microedition.media.control. Класс Manager, расположенный в пакете media, который позволяет опрашивать телефон о поддерживаемых средствах мультимедиа, а также создавать проигрыватели для воспроизведения любых типов мультимедийных данных. Интерфейс Player располагается в том же пакете, он реализует методы управления воспроизведением аудио. Интерфейс Control служит базовым интерфейсом для особых средств управления мультимедиа, например, регулятором громкости и звуков. Интерфейсы VolumeControl и ToneControl расположены в пакете media.control.

Общий подход, используемый для воспроизведения звука средствами MIDP 2.0 Media API, таков:

1. использовать класс Manager для доступа к особому типу данных;

2. использовать интерфейс Player для воспроизведения мультимедиа;

3. при необходимости использовать интерфейс Control для управления воспроизведением.

Указанный подход является общим и, естественно, может меняться в зависимости от типа медиа. Например, чтобы воспроизвести один звук, достаточно вызвать метод класса Manager, который называется playTone(). Чтобы создать и воспроизвести последовательность звуков, необходимо использовать интерфейс ToneControl. В этой главе вы научитесь воспроизводить рингтоны и отдельные звуки, в следующей речь пойдет о воспроизведении звуковых файлов, MIDI-музыки и MP3 аудио.

Тоновые звуки и музыка

Перед тем как приступить к изучению особенностей воспроизведения тонов в MIDP 2.0 Media API, важно узнать о некоторых аспектах тонов и музыки. Вспомните, что, с точки зрения физики, звук – это волна, перемещающаяся в пространстве. Звуковая волна – это результат сжатия и расширения среды. Иначе говоря, звуковая волна – это серия движущихся изменений давления. Вы слышите звук, потому что движущаяся звуковая волна попадает в ваше ухо, а изменение давления воздействует на барабанную перепонку. Если вы оказались на скалистом побережье океана, вы услышите, как волны разбиваются о скалы. Громкость звука определяется энергией звуковой волны.

Частота звуковой волны – это скорость, с которой колеблется (или вибрирует) волна при движении в среде. Колебания звуковой волны также называются высотой звука. Вы можете услышать звук различной частоты, если ударите ложкой по стеклянному стакану с водой. Количество воды в стакане влияет на частоту издаваемого звука, а следовательно, на высоту звука.

Частота звука измеряется в герцах (Гц) – число колебаний в секунду. Музыкальные ноты соответствуют звукам определенной частоты. Например, среднее C соответствует звуку с частотой около 262 Гц. Вместо того чтобы говорить о звуках в цифрах, в соответствие им ставят буквы A, B и C. В таблице 8.1 показана одна октава, которая содержит двенадцать нот и соответствующие им значения частот звука.

Таблица 8.1. Частоты звуков средней октавы

Вероятно, вы знаете, что ноты повторяются с увеличением или снижением тона, набор из 12 нот называется октавой. Ноты, которые отличаются на октаву, имеют частоты, отличающиеся в 2 раза. Аналогично, ноты, отстоящие на половину октавы друг от друга, отличаются частотами на половину октавы. Например, нота С, стоящая на октаву выше, чем средняя С, имеет частоту 524 Гц. В таблице 8.2 показано соотношение между нотами С различных октав.

...

В копилку Игрока

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

Таблица 8.2. Частоты звуков для ноты С в различных октавах

Имя каждой ноты в таблице 8.2 очень важно, поскольку оно позволяет непосредственно обратиться к ноте определенной октавы. Иначе говоря, вы можете задать нужную ноту простым именем, например, С5, A2, G4 и т. д. Такое принятое именование очень важно, поскольку оно будет использоваться в дальнейшем, когда речь пойдет о создании и воспроизведении рингтонов. Но перед этим давайте узнаем, как опросить телефон и получить данные о поддерживаемых аудиовозможностях, а также – воспроизвести звук.

Запрос аудиовозможностей аппарата

Перед тем как делать необоснованные предположения о том, что может и не может делать телефон с аудио, целесообразно спросить об этом у телефона. MIDP 2.0 Media API предоставляет простые средства для включения и отключения определенных звуковых средств мобильного телефона. Например, вы можете создать как тоновое звуковое сопровождение игры, так и цифровое, и воспроизводить нужный вариант в зависимости от функций телефона.

...

В копилку Игрока

Все телефоны стандарта MIDP 2.0 поддерживают звуки и их последовательности, поэтому вы всегда можете использовать их в играх.

Чтобы запросить возможности телефона, используется класс Manager. Если быть более точным, метод getSupportedContentTypes() возвращает список мультимедийных средств, которые поддерживаются данным телефоном. Поскольку этот метод статический, нет необходимости создавать экземпляр класса Manager, чтобы воспользоваться этим методом. Этот метод возвращает массив строк – список поддерживаемого контента. Ниже приведен пример того, как можно вызвать этот метод:

String[] contentType = Manager.getSupportedContentTypes(null);

Я же сказал, что это очень просто! После этого вызова массив contentType будет содержать список поддерживаемого контента в соответствии с их именами MIME. Ниже приведен список наиболее широко распространенных типов MIME, которые поддерживаются мобильными телефонами MIDP 2.0:

► audio/x-tone-seq – тоны и их последовательности;

► audio/x-wav – Wav-звуки;

► audio/x-midi – MIDI-музыка;

► audio/mpeg – MP3-аудио.

Несмотря на то что интересно поразмышлять о том, какие значения может возвратить метод getSupportContentTypes(), лучше опробовать его на реальном устройстве. В листинге 8.1 приведен код класса SSCanvas мидлета SoundCheck, который опрашивает телефон о его возможностях и выводит на экран каждый поддерживаемый тип контента....

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

Класс Manager реализует другой метод – getSupportedProptocols(). Он опрашивает устройство о поддерживаемых протоколах передачи, с помощью которых можно получить доступ к определенному типу контента. Например, телефон может поддерживать загрузку Wav-файла из JAR-архива мидлета, однако не поддерживать загрузку через HTTP. Поскольку игры в этой книге разработаны так, что все необходимые ресурсы находятся в JAR-архиве, то выполнять проверку протоколов нет необходимости.

Листинг 8.1. Класс SSCanvas – это особый класс холста мидлета SoundCheck

import javax.microedition.lcdui.*;

import javax.microedition.media.*;

import javax.microedition.media.control.*;

public class SCCanvas extends Canvas {

private Display display;

public SCCanvas(Display d) {

super();

display = d;

}

void start() {

display.setCurrent(this);

repaint();

}

public void paint(Graphics g) {

// очистить холст

g.setColor(0, 0, 0); // черный

g.fillRect(0, 0, getWidth(), getHeight());

g.setColor(255, 255, 255); // белый

// получить данные о поддерживаемых типах контента

String[] contentTypes = Manager.getSupportedContentTypes(null); //Единственная строка кода выявляет все поддерживаемые типы контента

// вывести поддерживаемые типы звуков

int y = 0;

for (int i = 0; i < contentTypes.length; i++) {

// Draw the content type

g.drawString(contentTypes[i], 0, y, Graphics.TOP | Graphics.LEFT);

y += Font.getDefaultFont().getHeight();

// воспроизвести звук, если поддерживаются тоны

if (contentTypes[i] == "audio/x-tone-seq") {

try {

// воспроизвести среднее C (C4) в течение двух секунд (2000ms)

при максимальной громкости (100)

Manager.playTone(ToneControl.C4, 2000, 100); //Тон (среднее С) воспроизводится в течение 2 секунд на полной громкости в случае, если тоны поддерживаются устройством

}

catch(MediaException me) {

}

}

}

}

}

Метод paint() отвечает за вывод списка поддерживаемых типов контента. Как видите, метод Manager.getSupportContentTypes() заполняет строковый массив поддерживаемыми типами контента. Затем запускается цикл, в котором доступные типы по очереди выводятся на экран. Обратите внимание на два дополнительных пакета media, импортированных в код в первой строке.

Один интересный элемент приведенного кода – это проверка типа auto/x-tone-seq, которая завершается воспроизведением звука. Статический метод playTone() класса Manager, о котором вы подробнее узнаете в следующем разделе, используется для воспроизведения звуков. А пока вам достаточно знать, что второй параметр в этом методе – длительность воспроизведения звука в миллисекундах. Таким образом, в приведенном примере звук воспроизводится в течение двух секунд. А третий параметр в этой функции – громкость (в нашем примере 100 %).

Несмотря на то что код приложения весьма интересен, не менее интересно посмотреть на работу мидлета. На рис. 8.1 показан мидлет SoundCheck, запущенный в эмуляторе J2ME.

1 ... 27 28 29 30 31 32 33 34 35 ... 87
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Создание игр для мобильных телефонов - Майкл Моррисон.
Комментарии