Таблица 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;
Читать дальше
Конец ознакомительного отрывка
Купить книгу