Linux → Установка и настройка MOC — music on console
Мне нравится слушать музыку в огромных количествах и хорошем качестве, поэтому я предпочитаю форматы lossless. Но за качество приходится платить: некоторые люди, делающие рипы с оригинальных дисков, любят совать всё в один файл и выкладывать CUE sheet с метаданными о том, где какой трек начинается и заканчивается. Это удобно, но не в Audacious, который я использовал раньше — плеер просто зависал или валился с сегфолтом, загоняя в бесконечный цикл процедуру добавления списка треков. За тот год, что я использовал Audacious этот баг так и не был исправлен, к сожалению.
Совершенно случайно я узнал о существовании консольного плеера MOC. Он стал настоящей находкой: активно развивающийся проект с удобным интерфейсом, немного похожим на Midnight Commander, наличие клиент-серверной модели, поддержкой всех популярных форматов OGG Vorbis, FLAC, WAV, WMA, MP3, FLAC, Musepack, Speex, WAVE, AIFF, AU, а также CUE sheet после наложения соответствующего патча на исходники. Кроме того, поддерживаются списки воспроизведения и эквалайзер с возможностью максимально просто использовать пресеты от Winamp. К сожалению, пока нет нативного скробблера Lastfm, хотя это не мешает использовать сторонний скрипт на Python, который работает без нареканий.
Установка и настройка MOC — процесс не сложный. Начнем с того, что для сборки из исходников придется установить все зависимости для пакета moc с помощью apt-get и опции build-dep. После этого нужно убедиться, что в системе присутствуют subversion, gcc, make, binutils, ncurses, patch, automake и autoconf. Забираем последнюю ревизию из SVN:
# cd /opt/ && svn co svn://daper.net/moc/trunk
Теперь, если нужна поддержка CUE sheet, патчим исходники — cue_sheet_support-svn-v3.diff. Обращу внимание, что патч находится в стадии тестирования, поэтому стабильностью не отличается. Впрочем, с текущей ревизией mocp на момент написания статьи, в моей системе работает без нареканий.
# cd /opt/trunk && wget http://sound4hill.cz/cue_sheet_support-svn-v3.diff # patch < cue_sheet_support-svn-v3.diff
Если ранее уже была установлена другая версия moc, сразу делаем бэкап:
# cp /usr/bin/mocp /usr/bin/mocp.bak
# rm -f /usr/bin/mocp
Запускаем скрипт autogen.sh, который проверит всё ли на месте для сборки и создаст исполняемый файл configure. Теоретически, при отработке make ошибок быть не должно (хотя с первой версией патча у меня были некоторые проблемы, впрочем, баг быстро пофиксили). Собственно, компиляция. Я решил разделить каталоги версии установленной из репозитория и тестинговую, поэтому не указывал –prefix и установил по умолчанию в /usr/local:
# ./configure && make && make install
Делаем символическую ссылку, чтобы запускать mocp из /usr/bin:
# ln -s /usr/local/bin/mocp /usr/bin/mocp
Настройка также достаточно тривиальна: нужно скопировать пример файла конфигурации из /usr/share/doc/moc/examples в $HOME/.moc и добавить следующие опции:
...
# Assume this encoding for ID3 version 1/1.1 tags (mp3 files). Unlike ID3v2
# UTF-8 is not used here and MOC can't guess how tags are encoded. Another
# solution is using librcc (see the next option). This option is ignored
# if UseRCC is set to yes.
ID3v1TagsEncoding = WINDOWS-1251
# lastfmsubmitd
OnSongChange = "/home/posix/.moc/moc_submit_lastfm --artist %a --title %t --length %d --album %r"
...
В последней строке указано каким образом MOC будет реагировать на смену трека в плейлисте — запускать скрипт moc_submit_lastfm и передавать информацию демону lastfmsubmitd. Соответственно, нужно сделать его исполняемым и присвоить права на исполнение пользователю, от которого запущен плеер. Ставим lastfmsubmitd, добавляем через adduser своего пользователя в группу lastfm и пишем в конфиг /etc/lastfmsubmitd.conf свой логин и пароль к аккаунту Lastfm. Проверяем, работает ли демон:
$ top -b -n 1 | egrep "lastfm|PID" PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15891 lastfm 20 0 9688 4388 1756 S 0 0.2 0:11.26 lastfmsubmitd
Нужно полностью рестартнуть сервер MOC, чтобы изменения вступили в силу. Запускаем трек на воспроизведение и смотрим в консоли вывод ps:
$ ps -eo user,pid,cmd | grep lastfm lastfm 15891 /usr/bin/python /usr/bin/lastfmsubmitd posix 30198 python /home/posix/.moc/moc_submit_lastfm --artist Radiohead --title Paranoid Android --length 06:24 --album OK Computer
Осталось прикрутить эквалайзер: скачиваем eqsets.tar.gz и распаковываем каталог eqsets в $HOME/.moc, и еще раз рестартим. Должно получится примерно так (скриншот кликабельный):
И напоследок несколько хоткеев, которые я использую регулярно:
g — поиск
a — добавить файл или каталог в плейлист
Shift+A — добавить каталог рекурсивно
Shift+C — очистить плейлист
Shift+E — включает/выключает эквалайзер
Shift+K — включить предыдущий пресет
k — включить предыдущий пресет
b — воспроизвести предыдущий трек в плейлисте
n — воспроизвести следующий трек
u — поднять трек в плейлисте на одну позицию вверх
j — опустить трек в плейлисте на одну позицию вниз
Ctrl+r — обновить список файлов
h — help
q — закрыть текущее соединение клиента с сервером
Shift+Q — остановить сервер
Подробнее о всех горячих клавишах можно посмотреть в help, или настроить свои собственные.
Приятного прослушивания вашей любимой музыки, надеюсь информация в этой небольшой статье будет полезна.
UPD: сегодня в 9 вечера по мск автор патча cue_sheet_support-svn внёс небольшие изменения в парсер, который разбирает cue-файлы, линк в статье заменён. Пока что есть базовый функционал, будем ждать когда патч будет передан основным девелоперам проекта, которые допилят его и включат в SVN.

Спасибо, нашел много нового:) Сам им пользуюсь и немного писал про MOC, а вот скрипты и эквалайзер не прикручивал.
Я бы еще посоветовал в список хоткеев обязательно добавить h (можно q и Q, все-таки это одни из самых главных хоткеев:)
И еще, ты не знаешь, как настроить автозапуск?
Пожалуйста
Эквалайзер давно появился также в виде патча, но в SVN только недавно добавили. Да, насчет этих хоткеев я как-то забыл ) Сейчас добавлю, спасибо за хинт.
Насчет автозапуска: можно написать скрипт на примере любого демона, сделать симлинк в /etc/rc6.d и будет стартовать на 6ом ранлевеле вместе с другими демонами (если deb-based дистрибутив). В других дистрибах в сторону rc.d нужно смотреть, соответственно.
О, а вот и ответ на вопрос про эквалайзер… можешь удалить второй комент:)
Спасибо за подсказку:)
И еще, эквалайзер только в 2.5 появился, или ты забыл добавить, как добавить хоткеи? Я сам пользуюсь стабильным 2.4.4 из репозитория, и у меня пишется “Bad command”, когда пытаюсь включить эквалайзер.
В 2.4.4 эквалайзера нет. Я пробовал пропатчить 2.5.0-alpha3, но make вылетал с ошибкой. В этом треде http://moc.daper.net/node/501 умные люди мне посоветовали не усложнять себе жизнь и собрать сорсы из SVN, в которых эквалайзер добавили по дефолту. Собственно, это в посте и описано.
Пейтоновый lastfmsubmitd мне не нравится, я свой написал, на шелле http://www.rootshell.be/~polachok/code/lastfmpost
Спасибо, попробую поюзать.
Обновил пост, добавив уточнение насчет того, что из сорсов moc по дефолту ставится в c префиксом /usr/local, если не передать свой –prefix скрипту configure в качестве параметра. Подробности можно узнать, если ввести ./configure -h.
p.s. Определенно нужно развивать умение не забывать про важные моменты в постах )
А возможно сделать, чтобы он запоминал, что играет и при последующем запуске начинал с того же трека воспроизведение?
Такой функционал мне не требовался, потому точно сказать по этому поводу не смогу. Попробуй спросить на их форуме http://moc.daper.net/forum/5 — может быть там кто-нибудь знает.
Скажите пожалуйста, а как сделать что бы он запускался при загрузке и сразу играл плэйлист?
плагин ластфма: сделал все по инструкции, вывод ps и top правильный, но почему то на странице аккаунта ластфм.ру при воспроизведении трека не пишется, что трек проигрывается. подозреваю, что не скробблится вообще. вывод ps и top:
stop@stp-pc:~$ ps -eo user,pid,cmd | grep lastfm
lastfm 13769 /usr/bin/python /usr/bin/lastfmsubmitd
stop 13918 python /home/stop/.moc/moc_submit_lastfm –artist Alihan Samedow –title Gozelim Sensin (Azerbaycan halk mahnisi) –length 05:30 –album Balaban – Land Of Fire Music From Azerbajian
stop 13959 grep –color=auto lastfm
stop@stp-pc:~$ top -b -n 1 | egrep “lastfm|PID”
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13769 lastfm 20 0 36048 6240 1832 S 0 0.2 0:00.01 lastfmsubmitd
в чем может быть проблема? заранее спасибо
Грамотный пост
Вoт этo пoст! Сильнo. Спасибo.