Главная » Программирование игр под Android » Работа с регуляторами громкости – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

Если у вас есть телефон на Android, то знаете, что при нажатии кнопок увеличения и уменьшения громкости вы управляете разными параметрами в зависимости от того, какое приложение в данный момент используете. При звонке вы регулируете громкость голоса вашего абонента, в приложении You Tube – громкость звукового сопровождения ролика, на главном экране – громкость звонка.

Начало традиционное – наследуем наш класс от Activity и реализуем в нем интерфейс OnTouchLi stener, чтобы можно было обрабатывать касания экрана. В нашем классе есть два члена: SoundPool и указатель на звуковой эффект, который будет загружаться и воспроизводиться (мы установили его начальное значение равным -1, пока звуковой эффект еще не загружен).

В методе OnCreateO мы делаем то, что выполняли уже неоднократно: создаем TextVi ew, регистрируем активность как OnTouchLi stener и устанавливаем TextVi ew в качестве средства отображения.

Следующая строка – привязка кнопок управления громкостью к музыкальному потоку. Далее создаем SoundPool и настраиваем его на одновременное воспроизведение 20 эффектов – этого должно быть достаточно для большинства игр. Наконец, получаем дескриптор Asset Fi 1 eDescri ptor для файла explosi on. ogg (помещенного в каталог assets/) от AssetManager. Для проигрывания звука мы просто передаем этот дескриптор методу SoundPool.  oad и храним полученный указатель. Метод SoundPool. load обрабатывает исключение (если при загрузке возникли какие-то проблемы, показываем на экране сообщение об ошибке).

В методе OnTouchO просто проверяем отрыв пальца от дисплея, что означает факт касания. В этом случае, если звуковой эффект был загружен успешно (то есть его указатель не равен -1), мы его воспроизводим.

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

Заметьте – в этом примере мы не выгружаем звук и не освобождаем ресурсы SoundPool. Это сделано для краткости – обычно SoundPool выгружается в методе onPause перед уничтожением активности. Помните – всегда необходимо выгружать из памяти все, что вам больше не нужно.

Хотя класс SoundPool очень прост в использовании, есть несколько моментов, на которые стоит обратить внимание.

Метод SoundPool. loadO выполняет загрузку асинхронно. Это означат, что вам придется немного подождать перед вызовом метода SoundPool. pi ay , поскольку загрузка может еще не закончиться. К сожалению, не существует универсального способа проверить состояние процесса загрузки эффекта. Это можно сделать только при использовании SDK SoundPool версии 8, а нам необходимо обеспечить совместимость со всеми версиями Android. Обычно это не является большой проблемой – вы можете загрузить другие активы до того, как звуковой эффект будет воспроизведен впервые.

SoundPool имеет некоторые проблемы при работе с МРЗ-файлами и большими фрагментами (чья длительность определяется как больше 5-6 секунд). Обе неприятности не документированы, поэтому нет четкого правила для определения, вызовет ваш звуковой фрагмент проблемы или нет. В качестве общего правила я бы предложил отказаться от МРЗ в пользу формата OGG и использовать как можно меньшие частоту дискретизации и длительность, при которых качество звука остается приемлемым.

ПРИМЕЧАНИЕ

Как и для всех обсужденных нами ранее API, функциональность SoundPool гораздо шире. Я упоминал, что вы можете воспроизводить звуковые эффекты циклически. Для этого вы получаете ID от метода SoundPool.play, который вы можете использовать для паузы или приостановки воспроизведения циклического эффекта. Изучите документацию по классу SoundPool на сайте Android Developers, если вам необходима такая функциональность.

Источник: Mario Zechner / Марио Цехнер, «Программирование игр под Android», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»

По теме:

  • Комментарии