MOCP (также именуется MOC) - аудиоплеер, известный прежде всего благодаря своему консольному интерфейсу, что во многих случаях является ощутимым преимуществом. он реализован в виде двух составных частей - собственно демона1)-проигрывателя и псевдографического интерфейса на ncurses. вот небольшой список преимуществ данного проигрывателя:

  • отсутствие привязки к X-серверу, т.е. вы можете слушать музыку на системе без графической оболочки или же просто при работе в tty-консоли
  • интуитивно понятный и настраиваемый интерфейс
  • экономия места за счет отсутствия лишних окон, что особо актуально для нетбуков
  • низкая требовательность к ресурсам за счет отсутствия навороченной графики
  • возможность управления извне - например, из командной строки или с помощью кнопок на панели
  • запущенный в «иксах» плеер будет играть и при переходе в tty-консоль2)

Вкратце можно сказать, что mocp - отличный плеер для тех, кому от плеера требуется именно то, для чего он предназаченн - прослушивание музыки.

Установка

Первым делом потребуется установить пакет moc. например, с помощью apt-get:

sudo apt-get install moc

Теперь нужно распаковать уже готовый пример файла настроек:

zcat /usr/share/doc/moc/examples/config.example.gz > ~/.moc/config

Интерфейс и управление

Псевдографический интерфейс

Установив пакет, запустите проигрыватель в терминале с помощью команды

mocp

Вы увидите знаменитый псевдографический интерфейс, который выглядит примерно так:

Честно говоря, при первом запуске он будет выглядеть немного иначе, но все можно настроить по вашему вкусу, о чем речь пойдет ниже. Сверху, на приведенном скриншоте, (по умолчанию в левой части) находится обозреватель файлов, из которого можно добавлять файлы и папки в плейлист, который находится внизу (а по умолчанию справа). В нижней части окна расположены индикаторы громкости, времени воспроизведения, указан текущий файл и прочая информация. Управление осуществляется с клавиатуры, поэтому рассмотрим основные сочетания клавиш:

  • H - показать справку по клавишам управления. Запомнив эту клавишу, про все остальное можно иногда забывать :-)
  • Tab - переключиться между обозревателем файлов и плейлистом
  • , , PgUp/PgDn, Home/End - навигация по списку файлов/плейлисту
  • Enter:
    • в обозревателе файлов - войти в папку или начать воспроизведение выбранного файла (без изменения плейлиста)
    • в плейлисте - переключиться на выбранный трек
  • A (в обозревателе) - добавить файл или папку в плейлист
  • Shift+A - добавить папку рекурсивно (со всеми подкаталогами и их содержимым)
  • D (в плейлисте) - удалить файл из плейлиста
  • Shift+C - очистить плейлист
  • N - следующий трек
  • B - предыдущий трек
  • Shift+< - уменьшить громкость на 1%
  • Shift+> - увеличить громкость на 1%
  • Shift+S - включить/выключить воспроизведение в случайном порядке (Shuffle)
  • Shift+R - включить/выключить повтор плейлиста
  • S - остановить воспроизведение
  • Q - выйти из интерфейса (проигрыватель при этом продолжит воспроизведение), по команде mocp можно вернуться к интерфейсу
  • Shift+Q - выйти и завершить работу проигрывателя

Управление из командной строки

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

man mocp

Здесь мы лишь рассмотрим основные команды:

  • mocp -G - пауза/воспроизведение
  • mocp -f, mocp -r - следующий/предыдущий трек
  • mocp -a «путь/к/файлу» - добавить файл или папку (рекурсивно) в плейлист
  • mocp -c - очистить плейлист
  • mocp -s - остановить воспроизведение
  • mocp -p - начать воспроизведение с первого файла в плейлисте
  • mocp -t s - включить/выключить воспроизведение в случайном порядке (Shuffle)
  • mocp -x - завершить работу проигрывателя
  • mocp -i - показать подробную информацию о текущем треке
  • mocp -v 40 - установить громкость в 40%. -v +10, -v -3 - увеличить/уменьшить на n%

Опции можно комбинировать.

Команда

mocp -c -a "mp3/new" -p -v 55 -o r,s

очистит плейлист, добавит в него все содержимое папки «mp3/new», установит громкость в 55%, включит Shuffle и повтор и начнет воспроизведение.

Графическое управление

Возможность управления проигрывателем напрямую, без какого-либо интерфейса, можно использовать с применением творческого подхода. Можно назначить команды на комбинации клавиш (или использовать мультимедиа-кнопки клавиатуры при наличии таковых), можно поискать (или написать) какой-нибудь плагин к чему-нибудь… я же реализовал управление плеером, накидав на панель вот таких кнопок:


кнопки управления mocp на панели Gnome

Теперь разберемся, как их сделать. А делаются они точно так же, как любые другие кнопки запуска.
Для Gnome: щелчок правой кнопкой по панели → Добавить на панель… → Пользовательская кнопка запуска и задать команды для кнопок, иконки и подсказки к ним:


Создание кнопки запуска. (Самая полезная кнопка :-P. Чтобы слушать музыку, достаточно курсором перенести файл или папку на эту кнопку)

Иконки взяты из стандартного набора Gnome, вы же можете подобрать любые другие на свой вкус. Ниже приводится список команд для каждой кнопки и иконки к ним.

Действие Команда Путь к иконке
воспроизвести файл/папку mocp -c -a «$1» -p -v 40 /usr/share/icons/Humanity/emblems/48/emblem-sound.svg
предыдущий трек mocp -r /usr/share/icons/Humanity/actions/48/gtk-media-rewind-ltr.svg
пауза/воспроизведение mocp -G /usr/share/icons/Humanity/actions/48/stock_media-play.svg
следующий трек mocp -f /usr/share/icons/Humanity/actions/48/gtk-media-rewind-rtl.svg
выключить все mocp -x /usr/share/icons/Humanity/actions/48/gtk-media-stop.svg
текущий трек moc-notify /usr/share/icons/Humanity/actions/48/gtk-info.svg

Уведомления:

Тут немного сложнее, ибо все делается с помощью отдельного скрипта, о котором речь пойдет чуть ниже.

Интеграция с conky

Для вывода строки с названием артиста и песни можно воспользоваться следующим скриптом. Не забудьте сделать файл исполняемым.

#!/bin/bash
 
. /tmp/mocp_popup.txt
. /tmp/mocp_state.txt
 
# Переменная хранит разделитель между артистом и названием
# Для радио это как правило ' - '
SEPARATOR=" - "
 
# Блок отвечает за формирование строк
# Если в воспроизводимом файле есть http://, значит проигрыватся радио
if [ $(mocp -Q %file | grep http://) ]
  then
    PLAYER="Radio"
    # Если нет названия песни
    if [ -z "$(mocp -Q %song)" ]
      then
        # Выводим адрес с которого идет проигрывание
        FIRST_LINE="RadioSite"
        SECOND_LINE="$(mocp -Q %file | sed 's/http:\/\///g')"
      else
        # Если название песни присутствует
        SONG="$(mocp -Q %song)"
        # Выводим артиста
        FIRST_LINE="${SONG%*$SEPARATOR*}"
        # Выводим название
        SECOND_LINE="${SONG#*$SEPARATOR*}"
    fi
  else
    # Если воспроизводится не радио
    PLAYER="MoC"
    if [ -z "$(mocp -Q %song)" ]
      then
        # Выводим что тегов нет
        FIRST_LINE="No Title"
        SECOND_LINE="No Title"
      else
        # Выводим артиста
        FIRST_LINE="$(mocp -Q %artist)"
        # Выводим название
        SECOND_LINE="$(mocp -Q %song)"
    fi
fi
 
NEWNAME="$FIRST_LINE - $SECOND_LINE"
NEWNAME="$(echo $NEWNAME | sed 's/\&/And/g' | sed 's/\`//g')"
NEWSTATE="$(mocp --info | grep State: | awk '{print $2}')"
 
if [ $NEWSTATE == STOP ]; then
  exit 1
fi
 
# Выводим информацию в conky
if [[ $NEWSTATE == "PLAY" ]]; then
  echo "$PLAYER Play:" "$NEWNAME"
  else
    echo "$PLAYER Stop:" "$OLDNAME"
fi
 
#======================================== Всплывающие окна =============================================================
mocp -i > /dev/null
if [ $? -eq 2 ];then
  exit 2
fi
 
if [[ "$OLDNAME" == "$NEWNAME" ]]; then
  if [[ "$OLDSTATE" == "$NEWSTATE" ]]; then
    exit 1
  fi
fi
 
# Выводим информацию в всплывающее окно
if [[ $NEWSTATE == "PLAY" ]]; then
  notify-send --expire-time=2700 -i "/usr/share/icons/Humanity/emblems/48/emblem-sound.png" "$PLAYER Play:" "$NEWNAME"
  else
    notify-send --expire-time=2700 -i "/usr/share/icons/Humanity/emblems/48/emblem-sound.png" "$PLAYER Stop:" "$OLDNAME"
fi
 
echo OLDNAME=\"$NEWNAME\" > /tmp/mocp_popup.txt
echo OLDSTATE=\"$NEWSTATE\" > /tmp/mocp_state.txt
#=======================================================================================================================

В конфигурационный файл conky, добавьте строку:

${scroll 45 20 ${exec путь_к_скрипту}}

В итоге будет выводиться бегущая строка шириной в 45 символов и одновременно будет выводиться только 20 из них.

Настройка

Настройки программы содержатся в файле .moc/config. здесь мы рассмотрим основные опции:

ReadTags = yes
# читать тэги из файлов и показывать названия треков в обозревателе/плейлисте вместо имен файлов

MusicDir = "/media/smb/music"
# папка, в которой хранится ваша фонотека. в нее можно быстро переместиться,
# нажав 'm', можно запустить 'mocp -m', и она сразу будет открыта в обозревателе,
# а также можно сделать, чтобы mocp всегда при запуске открывал эту папку

Repeat                  = no
Shuffle                 = no
# включить/выключить повтор и воспроизведение в случайном порядке

AutoNext                = yes
# автоматически переключаться на следующий трек после конца текущего

FormatString            = "%(n:%n :)%(a:%a - :)%(t:%t:)"
# формат вывода информации о текущем треке (см. полное описание в ~/.moc/config)

SoundDriver             = ALSA, OSS, PULSE, JACK
# используемая звуковая система. будет использована первая работающая
# если все играет - не трогайте)))

ShowHiddenFiles         = no
# показывать ли в обозревателе скрытые файлы

StartInMusicDir         = yes
# всегда при запуске открывать MusicDir (см. выше)

HideFileExtension       = no
# скрывать расширения файлов в обозревателе

ShowFormat              = no
показывать формат напротив каждого файла (MP3/OGG/etc)

ShowTime                = IfAvailable
# показывать продолжительность напротив файла. yes - всегда, no - никогда,
IfAvailable - если была вычислена ранее (работает быстрее)

Theme                 = example_theme
# задать цветовую тему. указывается только имя файла, файлы ищутся в
# ~/.moc/themes и /usr/share/moc/themes/

UseRCC                          = yes
# автоматически определять кодировку для id3v1-тегов (требуется пакет librcc0)

UseRCCForFilesystem                     = yes
# автоматически определять кодировку для имен файлов

SavePlaylist            = yes
# запоминать плейлист при выходе

PlaylistNumbering       = no
# нумерация треков в плейлисте
# если отключено, показывает только номера треков из тегов

Layout1 = "directory:0,0,100%,50% playlist:0,50%,100%,FILL"
# см. полное описание в ~/.moc/config. приведенный здесь вариант соответствует
# горизонтальному разделению окна (обозреватель сверху, плейлист снизу)

PlaylistFullPaths       = no
# показывать полный пути к файлам в плейлисте

OnSongChange = "/usr/bin/moc-notify"
# команда, выполняемая при смене трека (см. полное описание)
# в данном примере звпускает скрипт, отображающий popup-уведомление.
# (не используйте ~, указывайте абсолютный путь)

Помимо этого есть еще множество связанных со звуком настроек, но если все играет, трогать их стоит только если вы четко понимаете, чего хотите добиться.

Ниже приводится скрипт, отображающий popup-уведомление с данными о текущем треке:

#! /bin/bash
track=`mocp -Q %title | cut -d " " -f 1`
if [ $(echo $track | wc -L) -lt 2 ] && [ "$(echo $track | grep [0-9])" = "$track" ] ; then track="0$track" ; fi
notify-send -i "/usr/share/icons/Humanity/emblems/48/emblem-sound.svg" \
"$track - $(mocp -Q ' %song')" "$(mocp -Q '%artist - %album') $(mocp -Q '(%tt)')"

Для корректной работы задайте значение параметра FormatString в ~/.moc/config как в примере выше.

Ссылки

1) демон или daemon - работающая в фоне программа, управляемая с помощью обособленных программ-клиентов
2) более того, при переключении консолей плеер ставится на паузу, пока пользователь логинится в текущей консоли