MeloManiac — база данных альбомов для меломанов

в 15:13, , рубрики: python, turbogears, бд, клиент-сервер, коллекционирование, музыка, я пиарюсь, метки: , , , , ,

В начале этого года я начал заниматься разработкой системы workflow для одной компании, причем по условиям нужно было работать с фреймворком Turbogears — питоновской системой для создания клиент-серверных приложений, работающих через браузер. Чтобы было интереснее разбираться с новой для себя штукой, я одновременно начал писать для себя систему по классификации музыкальных альбомов. Дело в том, что существующие подобные базы, которые есть в интернете, меня не устраивали: Last.fm не позволяет оценивать альбомы, навигация везде неудобная, и главное — нет привязки к своей коллекции. Оффлайновые программы вроде iTunes меня тоже не устраивают, опять же из-за другой изначальной нацеленности: они заточены больше под прослушивание, чем классификацию и сортировку по нужным критериям, кроме того, в функционал необходимо было добавить и альбомы, которые находятся не на компьютере, а в виде физических дисков.

Зачем я всё это здесь пишу. Интересно посмотреть, насколько это дело сейчас актуально, кому-нибудь нужно. А может быть какие-то компании заинтересованы в подобных разработках — тогда буду рад предложениям о сотрудничестве (dimouse _at_ old-games.ru).

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

image

С интерфейсом особо не заморачивался: есть три основные страницы с доступом к таблицам, соответственно, исполнителей, альбомов и жанров. На каждой, само собой, реализован основной CRUD функционал, есть возможность сортировок и фильтраций таблиц. Всё это очень легко организовать благодаря MVC парадигме, которой руководились создатели Turbogears, а также использованию SQL Alchemy.

image

На странице с исполнителями хотел бы отметить рейтинг исполнителя, который вычисляется по следующей формуле: средняя оценка по альбомам (кроме тех, которые не оценены) + число таких альбомов / 10. Таким образом будут более-менее уравновешены титаны, которые сделали несколько десятков отличных альбомов, но несколько подпортили впечатление небольшим числом середнячков или провальных альбомов (а такие бывают у всех, кроме Mercyful Fate:)), и группы, ярко выстрелившие одним-единственным альбомом, но потом ничего не сделавшие. Результат подобного рейтинга мне показался очень близок к моим настоящим предпочтениям, поэтому я его и использую.

image

Основная страница — это, конечно же, альбомы. Как было заявлено в начале, кроме информации о самом альбоме, я здесь храню и информацию о его наличии. Дело в том, что база мной начала собираться в виде текстового файла еще н-ное число лет назад, а многие альбомы, которые когда-то были, неизбежно потерялись, особенно это касается mp3-файлов, поэтому система может быть полезна и тем, что может показать такие альбомы — их надо найти и скачать. Ссылка «rips I don't have» на главной странице как раз является шорткатом для отображения таких альбомов. Кроме того, я здесь же храню информацию о наличии у меня альбомов в физическом виде — причем отдельный бит здесь выделен под альбомы, выпущенные зарубежом (к сожалению, до сих пор основная часть дисков у меня — это наследие пиратского прошлого 90-ых). Еще хотел добавить бит на наличие альбома в виде пластинки, но пока не стал — пластинок у меня мало, хотя если какие-то меломаны захотят этим пользоваться, то им, возможно, будет нужен такой функционал.

Каждое изменение записи об альбоме записывается в виде «даты последнего изменения». На самом деле надо было сделать отдельную переменную для фиксирования именно даты прослушивания, но пока сделано так, поэтому сортировка и фильтрация по дате показывают всё в куче: те альбомы, которые прослушаны и оценены, те, у которых изменились данные, а также новые свежедобавленные (их, правда, можно отделить от оцененных, так как у них, как правило, еще нет оценки).

Наполнение базы вручную — это, безусловно, весело, но странно было бы не использовать автоматизированные средства по добавлению данных прямо с компьютера: ведь на сегодняшний день музыкальные коллекции — это прежде всего MP3. А в MP3 файлах есть теги, с которыми у любителей всё разложить по полочкам всегда головная боль: ну не любят люди их правильно заполнять, да и вообще заполнять. Не говоря уже о именах файлов… Поэтому система Меломаньяк с одной стороны, проверяет соответствие базы и файлов, а с другой, может «населяться» вообще сразу оттуда (правда, сначала все-таки надо будет завести нужных исполнителей), что будет весьма удобно тем, кто только начинает свой список альбомов, а не как я — подстраивает уже существующий список под написанную для нее систему с помощью цепочки сложных конвертаций (сначала я, пока не определился в каком виде оно будет, писал систему на Си с помощью CppSQLite3.

image

Да, несколько слов о технической реализации. Для того, чтобы всё это организовать нам нужно как-то работать с MP3-тегами под Python. Подобных библиотек наклепали великое множество, поэтому делать что-то самому смысла нет. Был взят Mutagen, как наиболее удобный и развитый. В Мутагене помимо прочего есть скрипт для преобразования всех тегов в Unicode, но под Винду с ним особо не поработаешь, поэтому код был адаптирован и включен в Меломаньяка. Теперь, наконец-то, все треки отображаются нормально, когда мне хочется послушать музыку с телевизора! Вывод информации о треках в данной директории носит скорее информационный характер, так как информации о самих треках в базе пока нет, хотя, честно говоря, иногда тянет такое сделать и посмотреть, какой альбом самый длинный у меня в коллекции, где больше всего песен и т.д.

Вообще, поле для развития есть огромное: можно еще говорить о разных релизах одного альбома, о привязке этих релизов к определенным директориям на компьютере (или на сетевом диске, как у меня), проверке системой наличия нужных треков в этих директориях, а также слежении за структурой вложенности этих директорий и их названий (например, ЖАНР/ИСПОЛНИТЕЛЬ/АЛЬБОМ/РЕЛИЗ), но на данный момент мне не хочется перегружать систему малоиспользуемыми штуками: я могу посмотреть прослушанные альбомы и те, которые еще предстоит прослушать, посмотреть на свои оценки, сравнить, имею доступ к http-серверу с программой на любом из своих компьютеров (внутри домашней сетки), — а большего мне, в общем-то, и не надо.

Буду рад услышать отзывы или заинтересованных в использовании программы людей.

Автор: Dimouse

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js