Использование класса SoundPool для одновременного воспроизведения треков
Класс MediaPlayer — ценный компонент в наборе медиа-инструментов, однако он может обрабатывать только по одному аудио- или видеофайлу за раз. А что если требуется воспроизвести одновременно более одного аудиотрека? Один из способов заключается в создании множества экземпляров MediaPlayer и одновременной работе с ними. Но если объем аудиоконтента для воспроизведения невелик, и нужна высокая производительность, в Android предлагается для этого класс SoundPool. “За кулисами” класс SoundPool использует MediaPlayer, но мы не будем получать доступ к API-интерфейсу MediaPlayer, а ограничимся лишь SoundPool.
Еще одно отличие между MediaPlayer и SoundPool состоит в том, что класс SoundPool предназначен для работы только с локальными источниками медиа. То есть можно загружать аудиоконтент из файлов ресурсов, файлов, расположенных где угодно, с применением файловых дескрипторов, либо из файлов, для которых указаны путевые имена. Класс SoundPool предлагает еще несколько замечательных средств, таких как возможность циклического воспроизведения аудиотреков, приостановки и возобновления проигрывания индивидуальных аудиотреков, а также приостановки и возобновления воспроизведения всех аудиотреко.
Однако SoundPool присущи и некоторые недостатки. Для всех треков SoundPool управляет единственным аудиобуфером в памяти, размер которого не слишком велик: Мбайт. Это может показаться много, если иметь дело с MP-файлами величиной в несколько килобайт. Но SoundPool развертывает аудиоконтент в памяти, чтобы сделать его воспроизведение быстрым и простым. Размер аудиофайла в памяти зависит от скорости передачи в битах, количества каналов (стерео или моно), частоты выборки и длины аудиоконтента. Если возникают проблемы с загрузкой исходного аудиофайла в SoundPool, поэкспериментируйте с этими параметрами аудиофайла, чтобы уменьшить объем занимаемой им памяти.
Мы продемонстрируем пример приложения, которое загружает и воспроизводит звуки, издаваемые животными. Один из звуков — пение сверчка, которое постоянно воспроизводится в фоновом режиме. Другие звуки будут воспроизводиться через разные интервалы времени. Иногда вы слышите только сверчка, а в другие моменты — голоса нескольких животных одновременно. Также мы поместим кнопку в пользовательский интерфейс, которая позволит приостанавливать и возобновлять воспроизведение. В о содержимое XML-файла компоновки и Java-код активности. Загружаемые примеры для этой содержат наряду с кодом и звуковые файлы. В разделе “Ссылки” в конце вы найдете информацию о том, как загрузить исходный код.
Структура этого примера достаточно прямолинейна. Имеется пользовательский интерфейс с единственной кнопкой ToggleButton, которая используется для приостановки и возобновления воспроизведения активных аудиопотоко. После запуска приложения мы создаем объект SoundPool и загружаем его аудиофрагментами. После их корректной загрузки мы запускаем их воспроизведение. Пение сверчков воспроизводится в бесконечном цикле, в то время как прочие фрагменты воспроизводятся после некоторой задержки, а затем после задержки запускаются вновь. Выбирая различные задержки, мы получаем некоторый случайный эффект — звуки поверх звуко.
Опубликовал Kest
February 14 2015 13:24:33 ·
0 Комментариев ·
2744 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.