LINUX.ORG.RU

Cmus. Замена плейлиста

 


0

1

Условия:

  • Воспроизводится трек из плейлиста.

Задача:

  • остановить текущий трек;
  • очистить плейлист;
  • добавить в плейлист файлы из папки;
  • инициировать воспроизведение первого трека в плейлисте.

Вроде очевидное действие, реализуемое на раз практически в любом плеере, у меня не получается провернуть с cmus’ом.

Логически, должно работать так

cmus-remote -s -c -P "adding/dirs/" -p

но не работает (

Ответ на: комментарий от n1rdeks

Решение

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

Здесь не так всё просто.

Просто добавить к существующему плейлисту выделенные файлы не составляет проблемы:

#! /bin/sh

cmus-remote -P "$@"

А вот для предварительной очистки плейлиста требуется произвести весьма неочевидные манипуляции, минимум в два подхода:

#! /bin/sh

cmus-remote -C "view playlist" "win-activate" "win-sel-cur" "player-stop" "clear"
cmus-remote -P "$@"

алгоритм этот состоит из следующих элементов:
первая команда выполняет внутренние команды посредством параметра -С

  • view playlist — переключает на вкладку «Playlist»
  • win-activate — инициирует воспроизведение, чтобы появился курсор в списке файлов
  • win-sel-cur — переключает со списка плейлистов на список файлов, фокусируясь на курсоре (за этим нужна была предыдущая команда). Другого способа однозначно переключиться на список файлов я не нашёл.
  • player-stop — останавливаем воспроизведение
  • clear — очищаем, наконец, плейлист.

Почему-то невозможно сочетать внутренние команды и параметры командной строки для cmus-remote, потому требуется вторая команда: cmus-remote -P "$@", в которой мы передаём список файлов в активный плейлист.

Мда, через пень-колоду. Зато работает.

Dreamdrawer ()
Ответ на: Решение от Dreamdrawer

Именно. Нет возможности сочетать несколько команд в однострочнике, пиши последовательно. Но плюсы всё равно перевешивают ))) ИМХО, руками просто удобнее. У меня один рабочий список (набор станций, вещающих радио) и забиндил я одну «педаль» в WM - смена случайным порядком станции.

Всё остальное я делаю прямо в проигрывателе (load и т.д., и load «убирает» предыдущий playlist).

n1rdeks ()
Последнее исправление: n1rdeks (всего исправлений: 1)
Ответ на: Решение от Dreamdrawer

Дополнение

Для того, чтобы после замены содержимого плейлиста включалось воспроизведение, не достаточно просто дать команду «играть», иначе будет проигран трек из предыдущего плейлиста, следует заново передать фокус списку файлов и только тогда давать команду «воспроизвести». Дописываем к нашему скрипту ещё две строки:

#! /bin/sh

cmus-remote -C "view playlist" "win-activate" "win-sel-cur" "player-stop" "clear"
cmus-remote -P "$@"
cmus-remote -C "view playlist" "win-activate"
cmus-remote -C "player-play"
Dreamdrawer ()
Ответ на: Дополнение от Dreamdrawer

Пояснение

Где могут пригодиться все эти хитрые манипуляции.
Я привык пользоваться двухпанельными файловыми менеджерами, ранее это был Тотал Коммандер, а нынче это Дабл Коммандер. Они обладают очень удобной функцией — создавать «пользовательские» команды, в которых можно указать, например, запуск скрипта и передавать ему в качестве параметров пути к текущему или выделенным файлам. Таким образом мы можем выделить несколько файлов/кататлогов и закинуть их в плейлист по горячей клавише (или из контекстного меню, в которое также можно прописать пользовательскую команду). Вышеприведённый скрипт как раз обрабатывает переданные в качестве параметров к запуску скрипта пути файлов при помощи конструкции «$@».

Dreamdrawer ()
Ответ на: Дополнение от Dreamdrawer

UPD

Как показал опыт, скрипт не всегда корректно отрабатывает, порой начиная воспроизведение трека из уже удалённого плейлиста. Для решения проблемы добавляем небольшую паузу (sleep 0,5) перед командой «воспроизведение». Длительность паузы подбирается опытным путём, зависит, по-видимому, от производительности железа.

#! /bin/sh

cmus-remote -C "view playlist" "win-activate" "win-sel-cur" "player-stop" "clear"
cmus-remote -P "$@"
sleep 0,5
cmus-remote -C "win-activate" "player-play"
Dreamdrawer ()