Количество мобильных музыкальных приложений с каждым годом возрастает. На начало 2016 года 97% процентов пользователей Android используют медиа приложения и 88.04% аудио приложения [1]. Появляется множество музыкальных сервисов, так в этом году для ОС Андроид стали доступны сервисы Apple музыка и Яндекс. Музыка. Согласно статистике 2016 года пользователи Андроид стали проводить на много больше времени в музыкальных приложениях. Следовательно, данная область достаточно востребована, и чтобы составить конкуренцию на рынке, логика воспроизведения музыки должна работать без ошибок. А значит программистам нужны определенные инструменты, которые позволили бы разрабатывать музыкальные приложения достаточно просто и эффективно.
Крупные компании пишут собственные библиотеки по воспроизведению аудио данных, на что уходит достаточно много времени и денег, так как для качественного воспроизведения необходимо писать код на C (или С++) и Java одновременно, что требует от разработчика знания нескольких языков программирования, а, следовательно, высокой квалификации. В небольших компаниях используются стандартные библиотеки, такие как MediaPlayer [2], ExoPlayer [3], но они обладают ограниченными возможностями, не позволяют реализовать большую часть функционала и могут не работать на некоторых устройствах. Например, MediaPlayer не работает на Lg g3 при кросс доменных ссылках на треки [2], ExoPlayer не поддерживается на старых версиях операционной системы [3], и на некоторых музыкальных форматах есть проблемы с перемоткой и правильным определением времени песен.
На данный момент нет библиотеки для Android, которая:
• позволила бы кэшировать музыку прямо во время стримминга (непрерывное получение и проигрывание аудио данных по сети интернет).
• давала бы эффект бесшовного воспроизведения треков (gapless playback).
• позволила бы шифровать загруженную музыку прямо во время воспроизведения (так как в ОС Android нет скрытых папок, а правообладателям музыки, как правило, нужна защита от не легального прослушивания).
• обладала бы минимальным эффектом задержки перед началом стримминга.
• позволяла синхронизировать музыку с другими Андроид устройствами (Android TV, Android Watch).
• считывала и записывала метаданные песни.
• накладывала различные эффекты на треки.
• обладала бы способностью визуализации музыки [4].
Разработчикам приходится реализовывать данные функции самостоятельно, что занимает достаточно много времени и приводит к большому количеству ошибок. Данный процесс усложняется еще и тем, что требуется писать отдельную логику воспроизведения для телефонов со старой версией операционной системы.
Поэтому существует необходимость в разработке общего музыкального фреймворка, где будет реализован весь необходимый функционал для Android разработчиков.
Целью данной дипломной работы является разработка библиотеки для воспроизведения звуковых файлов для ОС Android, которая будет работать на всех устройствах вне зависимости от производительности устройства и скорости интернета.
Для достижения данной цели были поставлены следующие задачи:
• описать основные требования к библиотеке
• разработать архитектуру библиотеки
• написать программный продукт
• протестировать библиотеку
• выложить библиотеку в открытый доступ, для дальнейшего использования библиотеки другими программистами.
Таким образом, объектом исследования является воспроизведение аудио-файлов.
Предмет исследования - изучение основных принципов разработки музыкальных продуктов для ОС Android, изучение принципов воспроизведения звуковых данных.
В результате данной дипломной работы была спроектирована и разработана библиотека для организации работы со звуком в ОС Android в условиях низкой производительности устройства под названием StreamPlayer, которая сильно облегчила разработку музыкальных приложений под Андроид устройства и уже позволила сохранить затраты времени на разработку нескольких приложений. Данная библиотека предоставила дополнительный функционал, нужный для воспроизведения. Если стандартные классы Андроид позволяют декодировать музыкальные форматы только начиная с версии Андроид 4.1, то в StreamLibrary ограничений по апи нет, что значительно упрощает разработку приложений, особенно в тех проектах, где есть необходимость поддерживать старые версии телефонов.
Библиотека предоставляет следующий функционал:
• Стримминг музыки.
• Воспроизведение локальных аудиозаписей.
• Загрузка звуковых файлов по сети интернет.
• Кэширование данных.
• Бесшовное воспроизведение аудиозаписей.
• Управление настройками проигрывания.
• Эквалайзер.
• Визуализация данных.
• Функционал, отвечающий за оптимизацию приложения при низкой производительности телефонов.
• Редактирование и считывание метаданных песни.
Библиотека может использоваться в таких приложениях, как: интернет-радио, приложения по стриммингу музыки, любые виды плееров, приложения по анализу и редактированию метаданных песен.
В дальнейшем планируется провести оптимизацию библиотеки при стримминге, в частности получать метаданные песни прямо во время загрузки. Так же планируется уменьшить размеры библиотеки, так как из-за использования библиотеки FFmpeg приложение в некоторых случаях может увеличиваться на 15 - 20 Мб.
На данный момент библиотека используется в нескольких крупных приложениях : MusicSense [21], Musix [22], Sok.fm, Beeline Volna [23]. Планируется так же разработка других приложений с использованием библиотеки StreamPlayer. Библиотека находится в открытом доступе [24].