Вне зависимости от места хранения требуемого звука процесс сохранения и обработки сэмплированного звука неизменен. После того как звук сэмплирован, воспроизведите его, убедитесь, что все в порядке. Может быть, звук будет слишком громким или, наоборот, тихим. Чтобы определить громкость звука, посмотрите на его временную диаграмму (waveform). Временная диаграмма – это графическое представление звуковой волны во времени. Если амплитуда сигнала слишком высока (выходит за пределы видимой области), то звук очень громкий. Если же вы с трудом слышите звук, то, вероятно, он слишком тихий. Чтобы устранить такие проблемы, вы можете либо подстроить входной уровень устройства и сэмплировать его снова, либо использовать инструменты усиления звукового редактора.
Самый лучший способ решения проблемы громкости звука – это подстройка входного уровня устройства и повторная дискретизация звука. После того как вы добились нужного уровня громкости, необходимо обрезать звук, удалив ненужные фрагменты. Обрезание звука (clipping) подразумевает выделение в звуковом редакторе области временной диаграммы и удаление ненужных фрагментов и тишины. Это помогает сократить длину звука и устранить ненужные задержки.
Совет Разработчику
Задержка (latency) – это интервал времени между началом воспроизведения звукового файла до начала звучания. Задержка должна быть сведена к минимуму, чтобы звуки воспроизводились в нужный момент. Лишние фрагменты тишины в начале звукового файла часто являются причиной задержки.
После того как создан звуковой эффект, он должен быть готов к своему звездному часу. Вы можете поэкспериментировать с различными звуковыми эффектами, которые можно создать с помощью звукового редактора. Это может быть обратное воспроизведение, эхо или фазовые сдвиги. Все ограничено лишь вашей фантазией!
Продолжение знакомства с интерфейсом Player
В предыдущей главе вы узнали, как использовать интерфейс Player для воспроизведения тоновых звуков. Несмотря на то что тоны поддерживаются широким спектром телефонных аппаратов, цифровые звуки и MIDI-музыка переводят аудио мобильных игр на новый уровень. К счастью, интерфейс Player также позволяет без труда воспроизводить эти типы звуков. Но перед тем как приступить непосредственно к изучению методов воспроизведения звуков, давайте снова взглянем на интерфейс Player, побольше узнаем о его работе.
В MIDP 2.0 Media API интерфейс Player выполняет функции пульта дистанционного управления для воспроизведения различных типов звуков. Обычно, воспроизведение звука с использованием интерфейса Player включает следующие шаги:
1. создание проигрывателя с помощью метода Manager.CreatePlayer();
2. вызов метода prefetch(), который инициализирует подкачку звука и минимизирует задержку;
3. вызов метода start(), который запускает воспроизведение;
4. вызов метода stop(), прекращающий воспроизведение при необходимости;
5. вызов метода close(), закрывающего проигрыватель.
Итак, перед вами достаточно ясная картина того, что необходимо выполнить, чтобы воспроизвести звук с помощью интерфейса Player. Однако многое осталось за кадром. Так, проигрыватель имеет пять стадий жизненного цикла: UNREALIZED, REALIZED, PREFETCHED, STARTED и CLOSED. Их важность заключается в том, что при воспроизведении звука проигрыватель постоянно переходит из одного состояния в другое. Точно так же, как вы проводите свою жизнь: спите, гуляете, обедаете, гуляете и так далее, – проигрыватель проходит через свои стадии.
Аккуратное определение состояний проигрывателя поможет обеспечить лучшее управление аудио. Например, если вы разрабатываете игру, в которой необходимо загружать большой файл звука посредством сетевого соединения, полезно будет знать состояние загрузки и готов ли звук к воспроизведению. Ниже приведено пошаговое описание переходов проигрывателя из одного состояния в другое:
1. первое состояние проигрывателя – UNREALIZED;
2. проигрыватель входит в состояние REALIZED, когда в его распоряжении есть все необходимое для получения медиаресурсов;
3. проигрыватель входит в состояние PREFETCHED, когда нужные файлы закачены и готовы к воспроизведению;
4. состояние STERTED наступает при воспроизведении ресурса проигрывателем;
5. проигрыватель возвращается в состояние PREFETCHED по окончании воспроизведения;
6. проигрыватель входит в состояние CLOSED при закрытии.
После того как проигрыватель инициализирован и запущен, большую часть времени он проводит в состояниях PREFETCHED и STARTED, в зависимости от того, воспроизводится ли звук. Чтобы получить текущее состояние проигрывателя, используется метод getState(), который возвращает одну из пяти констант состояния (UNREALIZED, REALIZED, PREFETCHED или CLOSED).