HOWDY, $USER!
Я заметил, что часто слушаю одну и ту же музыку кругами, а что-то забыл и вообще слушать перестал, хотя стоило бы. Просто забыл в каком каталоге, в каком альбоме какая годнота есть.
Решил эту несправедливость исправить. И поскольку музыку слушаю исключительно из локального хранилища в консольном плеере cmus
, то и скрипт будет ориентирован на него.
Идея сделать плейлист всего и выбрать режим случайного воспроизведения отпадает - мне это неудобно и долго. Поэтому выбрал однострочник для выполнения в консоли.
Ищу все музыкальные файлы -> выбираю из списка случайный -> немедленно воспроизвожу в cmus.
find "/mnt/Music/A-Z-А-Я/" -type f -regex ".*\.\(mp3\|wma\|Mp3\|flac\|ape\|m4a\)$" | ( i=0; while read line; do lines[i++]="$line"; done; echo "$line"; cmus-remote -f "${lines[$RANDOM % $i]}" )
Удобнее и быстрее применять это не к всей коллекции музыки, а к дискографии отдельного исполнителя, чтобы не заслушивать одни и те же композиции, а ознакомиться с творчеством в случайном порядке:
find "/mnt/Music/A-Z-А-Я/Kraftwerk (1970-2006)/Albums/" -type f -regex ".*\.\(mp3\|wma\|Mp3\|flac\|ape\|m4a\)$" | ( i=0; while read line; do lines[i++]="$line"; done; echo "$line"; cmus-remote -f "${lines[$RANDOM % $i]}" )
Вот, уже хорошо получилось!
Тоже самое, только вместо немедленного воспроизведения - добавление в плейлист:
find "/mnt/Music/A-Z-А-Я/" -type f -regex ".*\.\(mp3\|wma\|Mp3\|flac\|ape\|m4a\)$" | ( i=0; while read line; do lines[i++]="$line"; done; echo "$line"; cmus-remote -C add\ "${lines[$RANDOM % $i]}" )
После N раз запуска, можно этот случайный плейлист воспроизвести:
cmus-remote -p # воспроизвести
Казалось бы, вот она мякотка. Но встал вопрос оптимизации. Каждый раз искать все файлы это очень долго. Значит нужно 1 раз найти, затем в цикле N раз добавить случайные файлы:
find "/mnt/Music/A-Z-А-Я/" -type f -regex ".*\.\(mp3\|wma\|Mp3\|flac\|ape\|m4a\)$" \
| ( i=0; while read line; do lines[i++]="$line"; done; echo "$line"; for n in {1..25}; do cmus-remote -C add\ "${lines[$RANDOM % $i]}" ; done )
Ну вот, теперь можно прослушать 25 случайных песенок из огромной коллекции:
cmus-remote -p # воспроизвести
Пожалуй применю это ещё к коллекции музыки в формате SID
для Commodore64
, там плеер выводит ограниченное количество файлов в каталоге, и тоже слушаю одно по кругу. А так смогу формировать случайные коллекции композиций разных музыкантов для копирования на microsd.
Джедаи консоли, прошу поделиться исправлениями моего скрипта, не наговнобашил ли я, или что можно улучшить без промежуточных файлов и в формате однострочного скрипта? (как этот)