Всем привет.
Мне не нравится, насколько негибки все нынешние музыкальные плееры. Скажем, у вас есть 2k песен и 20 плейлистов, теперь ситуация:
- Хотите плейлист, который включает только песни из вашего «эпик» плейлиста, которые без слов? Сделайте новый, добавьте все песни вручную.
- Хотите играть некоторые песни чаще / реже, чем другие? Бывает - лучшее, что вы можете сделать, это добавить песню несколько раз и поставить проигрывание на рандом.
- Добавлено еще 15 песен в 8 разных папок? Переходите вручную по каждой и добавляйте ее ко всем плейлистам, которые подходят.
и т. д. Как кодер, это то, что я мог решить, поэтому я сделал прототип. Он отлично работает и решает проблемы, которые у меня были с другими плеерами неплохо, а также добавляет потенциал для некоторых приятных функций, таких как:
- новизна песни: начинается с максимума, т.е. шанс играть сначала выше, а затем постепенно смешивается с другими;
- точная статистика того, какие жанры вы слушали с течением времени;
- тонкая настройка эквалайзера, громкости, скорости для каждой песни, если это необходимо;
- возможно выставление рейтинга характеристика песен многими людьми (например, эта песня в среднем равна 7.2 "metal", 5.4 "folk", 8 "epic" ...), хотя для этого нужно перейти от «выставление оценок песен для себя» к некоторой публичной модели.
Проблема заключается в том, что у этого прототипа есть интерфейс, который смогли сделать я и мой товарищ(в глубине души тестер), который написан на javaFX и он плох. Я намереваюсь сделать бэкэнд с нуля (для этого есть веские причины), но у меня нет почти никакого опыта в создании интерфейса, и весь плеер будет хреновым только из-за этого.
Так что, я ищу фронт-энд разраба(минимум состоявшийся джун+, извините ХэлоуВордщики!), который хотел бы попробовать себя в создании некоммерческого плеера с открытым исходным кодом.
Два слова по архитектуре: in-memory DB (например, h2), spring & rest api, для front-end есть несколько вариантов: любой js-фреймворк в Ionic + Cordova, или возможно в WebView javaFX; React native; просто js фреймворк в браузере; или что вам удобно(если это не javaFX).
Позже могут прийти AWS, Docker, CDN и многие другие умные слова, но это после того, как ядро полностью сделано.
Вот репозиторий прототипа
Желателен хороший инглиш, доки/коменты на нём. Например -
Some more on how I resolve the main problems listed above.
Songs have properties(criterias was the original name, Crit in the code) - like rating, novelty etc. User can create new ones and assign them to songs; they're also hierarchially structured. So, say, you have a Crit structure:
Metal -> (child) Power metal -> Symphonic power metal
Symphonic -> Symphonic power metal
(yes, multi-inheritance)
Then you make a playlist with filter, and set filter to Symphonic power metal >= 6 OR Metal > 9. Viola, only songs that have either some kind of metal >9 and songs that have Symphonic power metal more or equal 6 will be in that playlist. Want to add another filter - go ahead, the playlist will be reformed dynamically.
You can clone the playlist to new anonymous one, so say you want to just now listen to only wordless songs of your playlist N - just clone, add filter for wordless, and only songs that have that criteria will be shown.
That has a caveat of having to create the hierarchy of this properties(criterias) and assigning them to songs. Sure, it can take a lot of time - but only once. Also, if you have some new songs and want to show only them so you can assign some properties to them - a playlist with certain filters wil easily do.
Now, for different playing frequency: there's a playback mod "weighed random", which is like random, but the chance that song N will play next is determined by how well its properties match Flavor that accompanies the playlist. So, say, I make a flavor of (rating, NOT metal, epic) - the higher merks on those properties the song has, the more its chance to be played next(with a failsafe of cooldown for each song - so it doesn't just repeat ad infinitum). It's a simplified version, there's actually a possibility to assign how influential will be a criteria to the final weight of the song. Mmmm, math...