Музыка и звуки в Android

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

В этой статье мы разберём, как добавить звуки и музыку в Android-приложение.

Звуки

Прежде всего, чтобы запустить звук, нужно где-то взять этот самый звук. Скачаем любую mp3-шку и положим её в папку /название_проекта/app/src/main/res/raw.

Не всегда эта папка есть. У меня обычно её в проекте нету. Поэтому в папке res я самостоятельно создаю папку raw.

Файл звука mp3 в папке Android-проекта res/raw

Не забываем о правилах именования файлов ресурсов в проектах IntelliJ IDEA (или Android Studio) – английский язык, маленькие буквы, цифры, из спецсимволов разрешены нижние подчёркивания.

После того, как крик петуха успешно приземлился в нужной папке проекта, идём в код. Для воспроизведения коротких звуковых эффектов в Android обычно используется класс SoundPool. Напишем класс, который будет ответственен за музыку. Впоследствии мы сможем его использовать в любой Activity без необходимости копировать однотипный код (чтобы код был чище).

Отлично! А теперь создадим простую Activity, добавим в неё кнопку и опробуем класс SoundPlayer на практике.

Код файла activity_main.xml, разметка интерфейса, где расположена кнопка по центру экрана внутри ConstraintLayout:

Xml-разметка интерфейса Android-приложения с одной кнопкой для звука

Код файла MainActivity.java, управляющий взаимодействием пользователя с элементами интерфейса (нажатие на кнопку):

Интерфейс Android-приложения с одной кнопкой для звука

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

Кстати, в такой класс SoundPlayer, конечно, может быть помещено больше одного звука. Это зависит от того, сколько в вашем приложении их требуется. Для каждого звука тогда нужно создать свою переменную с soundId, а также свой публичный метод для проигрывания звука.

Музыка

Для воспроизведения фоновой музыки, которая обычно длится дольше, чем звуковые эффекты, в Android используется класс MediaPlayer.

И снова загружаем нужный файл в ту же самую папку res/raw. В этот раз это музыкальная композиция группы Queen. Не забываем про правила именования файлов ресурсов.

Файл музыки mp3 в папке Android-проекта res/raw

Напишем класс MusicPlayer для управления воспроизведением музыки в нашем приложении.

Вот такой он получился. С помощью метода mediaPlayer.setLooping(true) поставили, чтобы музыка не заканчивалась, а всё время крутилась. Используем класс MusicPlayer в MainActivity:

Интерфейс Android-приложения с одной кнопкой для музыки

Отлично, пора протестировать то, что получилось. При открытии приложения тихо, но после нажатия на кнопку начинает играть музыка. Кажется, именно этого мы и добивались.

Остановка музыки при выходе из приложения

Однако есть нюанс. Если вы попробуете выйти из приложения, музыка никуда не денется. А это нехорошо. Нужно что-то с этим поделать.

На самом деле, всё просто. Необходимо лишь дописать реакцию при срабатывании событий onPause() и onResume() у Activity. Вот как будет выглядеть изменённый код MainActivity:

При сворачивании приложения музыка приостанавливается. При раскрытии – снова продолжается.

Готово! Как видите, работа со звуками и музыкой в Android не таит в себе никаких сложностей. Уже есть классы, которые позволяют при минимальной настройке получить результат. SoundPool вообще, хоть скорость звука изменяй, хоть громкость для правого и левого наушника, хоть приоритет.

Добавить комментарий