Skip to content

set of scripts to build personal music library with restriction

License

Notifications You must be signed in to change notification settings

rapthead/musicscripts

Repository files navigation

musicscripts

perl и shell скрипты для организации личной музыкальной библиотеки в Gnu/Linux

зачем

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

usecase

К примеру были скачаны композиции с сайта what.cd и дабы поддерживать рейтинг принято решение оставаться на раздаче вечно. Соответственно из этого вытекает требование того что файлы не будут модифицированы.

краткое описание утилит и библиотек (в алфавитном порядке)

cronplay.pl

cronplay.pl скрипт, который по файлу формата схожего с crontab, в правой части которых вместо комманд находится sql-запрос. Предполагается что данный скрипт вызывается при окончании плейлиста mpd. Если текущее время подподает под маску времени в синтаксисе crontab, то треки, полученные в результате выполнения sql-запроса к музыкальной базе данных будут добавлены к плейлисту и воспроизведение будет продолжено. Данный скрипт писался для дипломной работы "Проектирование системы web-радио". Пример использования:

# в будние дни с 14 часов по 16
# случайный альбом из альбомов, треки которых 
# ниразу не воспроизводились в течение последнего месяца
* 14-16,23 * * 1-5 \
SELECT uri FROM track \
WHERE album_id = \
    ( SELECT me.album_id FROM track as me \
        WHERE NOT EXISTS \
            ( SELECT * FROM play_log JOIN track ON play_log.track_id = track.track_id \
                WHERE track.album_id = me.album_id AND time > datetime('now','-1 month') ) \
        GROUP BY me.album_id \
        ORDER BY random() \
        LIMIT 1 ) \
ORDER BY disc, track_num

На текущий момент читает данную конфигурацию из конца файла

cue2meta.pl

cue2meta.pl скрипт, который использовался до появления fusemusic.pl, совместно с dbupdate.pl. Его цель - распарсить cue-файл и у соответствующих аудио файлов заменить метаданные на те, что содеражтся в cue. Использовался после переноса музыкальных файлов на аудио-плеер. Работает лишь с файлами формата flac.

cue2sql.pl

cue2sql.pl использовался для первоначальной инициализации музыкальной базы даннх.

cueRename.pl

cueRename.pl используется для переименования аудио-файлов альбома, log-файлов и непосредственно cue, исходя из информации cue-файла. Использование: cueRename.pl путь.cue

cue_mbcheck.pl

cue_mbcheck.pl ищет альбом в базе данных musicbrainz.org и если альбом найден, сверяет информацию с информацией в cue и выводит расхождение.

dbupdate.pl

dbupdate.pl предназначен для модификации базы данных mpd с целью внесни в нее информации из cue-файла в замен информации из метаданных композиций. Очень несистемное решение, зато очень простое. Текущая версия может работать только с базой mpd версии 0.16. В одном из коммитов можно найти версию для mpd 0.15. С актуальной версией mpd данный скрипт работать возможно не будет.

fuse_music.pl

fuse_music.pl флагманский скрипт данного набора. Создает виртуальную файловую систему на основе базы данных и музыкальной библиотеки. Структура директорий представляет собой: /исполнитель-год-альбом/номертрека-название.flac. При чтении из файла на лету подменяет блок метаданных оригинального файла на вновь сформированный блок мета-информации на основе информации из базы данных. Таким образом получается 2 копии файлов - немодифицированный реальный и модифицированный виртуальный. Любой аудиоплеер будет читать файлы из виртуальной файловой системы с уже скорректированной мета-информацией. Скрипт довольно оптимизирован без нареканий и высокой нагрузки работает на крайне сколмных системах. К примеру на cubietruck (arm Allwinner a20).

fuse_music.pl [--musiclib путь к муз. библиотеке] [--mountpoint путь к точке монтирования] [--dbpath путь к базе]

get_stats.pl

get_stats.pl парсит статистику прослушиваний с last.fm.

mpd_alarm.sh

mpd_alarm.sh скрипт для использования mpd в качестве будильника. с функцией увеличения громкости. После вызова данного скрипта к плейлисту mpd добавляется 3 случайных альбома. Если был режим single, отключает его, устанавливает громкость в 10% и через каждые 5 секунд прибавляет 1%. Пока не mpd не поставлен на паузу или не прошли 400 секунд. По завершении восстанавливает исходное состояние mpd (громкость, single).

mpdled.sh

mpdled.sh при включении у mpd режима single зажигает светодиод на устройстве cubietruck.

rg2cue.pl

rg2cue.pl используется для сохранения рассчитаного значения replaygain в cue-файл.

rgcue2.sh

rgcue2.sh рассчитывает значения replaygain путем копирования файлов во временную директорию, производит рассчет replaygain утилитой metaflac и передает результат утилите rg2cue.pl, которая сохраняет результат в cue.

sl2pl.pl

sl2pl.pl разбирает отчет прошивки плееров rockbox и добавляет эту информацию в таблицу журнала прослушиваний музыкальной базы данных.

urgency.pl

urgency.pl актуализирует информацию в музыкальной базе данных о треках музыкальной библиотеки на основе информации из cue. В том числе производит добавление новых композиций.

библиотеки

lib/CueParse2.pl

lib/CueParse2.pl Разбирает cue-файлы и возвращает структурированную информацию в виде хеша. Может сохранять cue. В том числе созданных в режиме noncompliant.

lib/MusicDB.pm

lib/MusicDB.pm Объектно-ориентированный интерфейс к музыкальной базе данных.

About

set of scripts to build personal music library with restriction

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published