Мы в Telegram
Добавить новость
123ru.net
D3.ru
Август
2019

Умное музыкальное радио, не требующее постоянного Интернет–соединения

0
D3.ru 
Умное музыкальное радио, не требующее постоянного Интернет–соединения

https://hsto.org/webt/gw/cx/_x/gwcx_xfnigailrw3e9221n3rpes.jpeg

Во время работы и прогулок я часто слушаю фоновую музыку. Раньше я использовал интернет радио под названием Jango, которое меня почти всем устраивало, за исключением следующих вещей:

недоступность во время почти ежедневных прогулок по лесу (т.е. без подключения к Интернету).
Необходимость переключения между разными каналами, чтобы сменить жанр музыки. Другими словами, у слушателя Jango мало шансов открывать для себя новые музыкальные жанры.

Однажды в голову пришла идея мобильного приложения для прослушивания музыки, которое большую часть времени могло бы работать без Интернета (т.е. кэшировало бы музыку) с автоматическим определением музыкальных пристрастий пользователя. Ничего подобного я не видел (может, просто плохо искал?), поэтому решил реализовать самостоятельно. Сейчас, после нескольких месяцев кодирования в свободное от основной работы время я опубликовал первую, ещё очень сырую, но уже достаточно рабочую версию Android–приложения.

Хотелось реализовать приложение с очень простым и интуитивным интерфейсом (по–сути, только с двумя кнопками: "pause" и "skip"), но с достаточно продвинутой внутренней логикой для анализа музыкальных предпочтений (на основе сбора статистики о продолжительности прослушивания треков до пропуска) и кэширования треков. Поскольку не хотелось дублировать логику для разных платформ, было решено её реализовать на C++ (являющимся "общим знаменателем" для iOS и Android).

Для хранения метаданных о треках, а также пользовательских настроек я выбрал SQLite. Файлы обложек альбомов и музыкальных треков хранятся в трёхуровневом дереве директорий на основе хеша (подобно тому, как это устроено в Git).

Размер кэша выбрал 512 MiB (эти и любые другие цифры, разумеется, могут конфигурироваться). Логика ротации треков следующая: за одну итерацию обновления закачивается по 20 треков. После того, как пользователь как минимум дважды прослушал каждый трек инициируется новое обновление. Удаляются треки, у которых среднее время прослушивания ниже заданного предела, и с сервера загружаются метаданные новых треков, после чего начинается их скачивание.

Логика воспроизведения следующая. Чем больше среднее время прослушивания трека, тем чаще он проигрывается.

Будучи опытным C++–разработчиком, я не испытал особых трудностей в реализации описанной выше логики (хотя в реальности она несколько более сложная). Однако, не имея опыта написания приложений под Android, мне пришлось затратить много времени и усилий на реализацию соответствующего программного слоя (особенно UI). Уверен, что многие вещи сейчас реализованы не самым лучшим образом.

Android–обёртку я решил писать на Kotlin. В самом деле, Java не сулила никаких преимуществ, ведь всё равно пришлось бы возиться с JNI (в iOS ситуация будет другая, там Objective C гораздо удобнее Swift по части интеграции с нативным кодом основной логики).

Для загрузки JSON–метаданных я использовал Fuel, а для загрузки файлов — Fetch (был удивлён, что Fuel не умеет эффективно скачивать файлы). Кстати, ко второй библиотеке у меня есть претензии по стабильности работы.

Серверный код был написан на Golang и использует PostgreSQL через reform. Текущая база метаданных была построена путём индексирования Free Music Archive, в будущем планирую проиндексировать и другие открытые источники. Треки на сервере пока не хранятся для экономии места (экономлю на хостинге), а напрямую ссылаются на хранилище источника.

Сервер накапливает статистику прослушивания треков для каждого из пользователей. Таким образом каждому музыкальному жанру присваивается оценка предпочтения, влияющая на вероятность выбора соответствующих композиций при ротации.

Буду рад, если попробуете моё приложение. Вдруг вам понравится. Наверняка во время использования вы столкнётесь с багами (программа пока сырая). Скорость их исправления будет напрямую зависеть от востребованности моей работы.

Написал ababo на android.d3.ru / комментировать






Загрузка...


Губернаторы России
Москва

Сергей Собянин подвел итоги Московской олимпиады школьников


Спорт в России и мире
Москва

Клиенты СберСтрахования стали в 1,5 раза чаще приобретать страховки для бегунов


Загрузка...

Все новости спорта сегодня


Новости тенниса
ATP

Немец Зверев выбил россиянина Медведева из топ-4 ATP


Загрузка...


123ru.net – это самые свежие новости из регионов и со всего мира в прямом эфире 24 часа в сутки 7 дней в неделю на всех языках мира без цензуры и предвзятости редактора. Не новости делают нас, а мы – делаем новости. Наши новости опубликованы живыми людьми в формате онлайн. Вы всегда можете добавить свои новости сиюминутно – здесь и прочитать их тут же и – сейчас в России, в Украине и в мире по темам в режиме 24/7 ежесекундно. А теперь ещё - регионы, Крым, Москва и Россия.


Загрузка...

Загрузка...

Экология в России и мире
Москва

Станислав Кондрашов Telf AG: Китай стремиться к экологически чистому производству





Путин в России и мире
Москва

Эксперт Президентской академии в Санкт-Петербурге о качественном росте отечественного автомобилестроения


Лукашенко в Беларуси и мире
Минск

Запись от имени Президента Беларуси сделана в книге соболезнований в посольстве Ирана




123ru.netмеждународная интерактивная информационная сеть (ежеминутные новости с ежедневным интелектуальным архивом). Только у нас — все главные новости дня без политической цензуры. "123 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. Smi24.net — облегчённая версия старейшего обозревателя новостей 123ru.net.

Мы не навязываем Вам своё видение, мы даём Вам объективный срез событий дня без цензуры и без купюр. Новости, какие они есть — онлайн (с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии).

123ru.net — живые новости в прямом эфире!

В любую минуту Вы можете добавить свою новость мгновенно — здесь.





Зеленский в Украине и мире
Киев

Зеленский объяснил, почему не хочет приглашать РФ на «саммит мира»


Навальный в России и мире


Здоровье в России и мире


Частные объявления в Вашем городе, в Вашем регионе и в России






Загрузка...

Загрузка...



Анастасия Волочкова

«Просто не афиширую»: куда пропала Волочкова с театральной сцены



Москва

Глава Воскресенска вручил жителям награды от Союза десантников Белогорья

Друзья 123ru.net


Информационные партнёры 123ru.net



Спонсоры 123ru.net