Развлекательный центр на Linux. Часть первая


Выбор программного обеспечения

Выбор программного обеспечения (ПО) диктуется желаемым функционалом, а именно:

  1. Проигрывание медиа-файлов всех типов: аудио, видео и графика
  2. Поддержка проигрывания с удалённого устройства (пульта)
  3. Смешивание аудио-дорожек (диджейский пульт)
  4. Караоке

В качестве медиа-центра неплохо подходит проект XBMC (http://www.xbmc.org). В нём же реализован функционал караоке.

Т.к. XBMC больше предназначен для прямого использования, т.е. для непосредственного воспроизведения с компьютера на экран, то в качестве систем с удалённым доступом лучше подойдут системы, специально для этого предназначенные:

  • Для предоставления содержимого (аудио, видео и графика) проигрывателям DLNA подойдёт проект “minidlna”
  • Для запуска музыки с удалённой системы – проект “MPD”. “Patchfork” – для управления MPD-сервером по веб-интерфейсу, а “Cantata” – для полноценного управления

Альтернативный вариант показа текстов для караоке – проект “osdlyrics”, который умеет взаимодействовать с MPD.

Звуковой редактор “Audacity” может понадобиться в случае, если нужно создать “минусовку” из файла с вокалом.

В качестве виртуального диджейского пульта выбран проект Mixxx (http://www.mixxx.org).

Если этого не было сделано ранее, то музыкальную коллекцию необходимо упорядочить. Простого раскладывания файлов по директориям недостаточно – необходимо расставить метки (произвести тегирование). Для этой цели подходит проект “easytag”.

Для перекодировки аудио и видео файлов, если возникнет такая необходимость, подойдёт проект “ffmpeg”.

Таким образом, получается следующий список программных продуктов:

  1. xbmc
  2. minidlna
  3. mpd
  4. patchfork
  5. cantata
  6. osdlyrics
  7. audacity
  8. mixxx
  9. easytag
  10. ffmpeg

Установка ПО

Пример установки перечисленного ПО:

[orca@blizzard ~]$ sudo pacman -S xbmc
[orca@blizzard ~]$ sudo pacman -S minidlna
[orca@blizzard ~]$ sudo pacman -S mpd
[orca@blizzard ~]$ sudo pacman -S mixxx
[orca@blizzard ~]$ sudo pacman -S easytag
[orca@blizzard ~]$ sudo pacman -S ffmpeg
[orca@blizzard ~]$ cd /store/Install/AUR/
[orca@blizzard AUR]$ curl -o "patchfork-git.tar.gz"\
https://aur.archlinux.org/packages/pa/patchfork-git/patchfork-git.tar.gz
[orca@blizzard AUR]$ tar -xvzf ./patchfork-git.tar.gz
[orca@blizzard AUR]$ cd ./patchfork-git/
[orca@blizzard patchfork-git]$ makepkg -s
[orca@blizzard patchfork-git]$ sudo pacman -U patchfork-git-20111122-1-x86_64.pkg.tar.xz
[orca@blizzard patchfork-git]$ sudo cp patchfork.conf /etc/httpd/conf/extra/
[orca@blizzard patchfork-git]$ sudo cp -r ./src/patchfork /srv/http/

[orca@blizzard ~]$ cd /store/Install/AUR/
[orca@blizzard AUR]$ curl -o "cantata-qt.tar.gz" \
https://aur.archlinux.org/packages/ca/cantata-qt/cantata-qt.tar.gz
[orca@blizzard AUR]$ tar -xvzf ./cantata-qt.tar.gz
[orca@blizzard AUR]$ cd ./cantata-qt/
[orca@blizzard cantata-qt]$ makepkg -s
[orca@blizzard cantata-qt]$ sudo pacman -U cantata-qt-1.2.2-1-x86_64.pkg.tar.xz
[orca@blizzard ~]$ sudo pacman -S osdlyrics

Настройка коллекции

Создать общую директорию (например “Media”), а в ней ещё три, с названиями по типу файлов, например: Audio, Graphics, Video. Даже если нечто похожее уже было ранее, то пересобрать коллекцию будет не лишним.

Для коллекции музыки проверенным способом является раскладывание файлов по директориям с названием исполнителей и, далее, с названиями альбомов. Для сборников музыки – отдельная директория, например “Collections”, и, далее, по жанрам.

Для файлов караоке создать отдельную директорию, например “Karaoke”, а в ней – директории с именами исполнителей, и уже туда записать файлы для караоке-песен. Эти файлы идут парой: музыкальный файл (т.н. “минусовка”) и файл с текстом в формате “lrc”. Имена файлов должны быть одинаковыми; отличаются только их расширения, например (директория ~/Media/Audio/Karaoke/Градский А/): “Как Молоды Мы Были.mp3” – файл фонограммы и “Как Молоды Мы Были.lrc” – файл с текстом. XBMC поддерживает неплохой перечень форматов музыкальных файлов, но нормальная работа с функцией “караоке” гарантирована только с файлами форматов “mp3” и “ogg”. Для текстовых файлов (lrc) – XBMC поддерживает русский язык только в кодировке UTF-8.

Для коллекции видео-файлов – по жанрам. Для графических файлов (Graphics) такой вариант – внутри две директории: Photos (Фотокарточки) и Images (Изображения). Строго говоря, изображения тоже могут быть фотографическими, но здесь смысл в том, чтобы в директорию Photos складывать именно свои фотоснимки. Сортировка здесь проста: под каждое событие создаётся директория <год>.<месяц>.<день>.<краткое описание события>. Директорию же с изображениями (Images) дробить по усмотрению, в зависимости от того, что уже есть в наличии.

Для звуковых файлов, метки которых записаны на русском языке в кодировке Windows-1251, необходимо выполнить следующее:

  • Запустить easytag
  • Перейти в меню “Установки”, а затем выбрать “Preferences…” (ALT+P)
  • Открыть вкладку “Настройки тегов ID3”
  • Выставить настройки следующим образом:
    • Правила тегов ID3:
      • Write ID3 tags in FLAC
      • Удалить теги, если поля пусты
      • Автоматически преобразовывать старые версии
      • Use CRC2
    • Character Set for writing ID3 tags:
      • Записывать тег ID3v2 → ID3v2.4 → Unicode → UTF-8
      • Записывать тег ID3v1.x → Кириллица (Windows-1251) → //TRANSLIT
    • Character Set for reading ID3 tags
      • Non-standard → Кириллица (Windows-1251)
  • Нажать кнопку [OK]
  • Открыть директорию с файлами, дождаться завершения сканирования (исправленные теги будут выделены красным)
  • Выделить файлы и нажать кнопку [Сохранить]

Скорей всего, не только для русских описаний была использована кодировка Windows-1251, поэтому следует внимательно пройтись по всей коллекции музыкальных файлов и пересохранить их теги в кодировке UTF-8.

С помощью “easytag” заполнить недостающие метки, например:

  • Выделить все файлы в одной директории/альбоме
  • В панели редактирования тегов для текущего файла заполнить поля: Альбом, Жанр, Исполнитель
  • В каждым из этих полей в контекстном меню выбрать “Записать это поле в теги выделенных файлов”
  • Нажать кнопку [Сохранить]

В силу разнообразия форматов для видео-файлов, универсального рецепта их тегирования нет.


Настройка системы

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

Настройка MPD

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

[orca@blizzard ~]$ sudo ln -s /store/Media/Audio /var/lib/mpd/music
[orca@blizzard ~]$ sudo mkdir /var/log/mpd
[orca@blizzard ~]$ sudo chown -R mpd /var/log/mpd
[orca@blizzard ~]$ sudo chown -R mpd /var/lib/mpd
[orca@blizzard ~]$ sudo vi /etc/mpd.conf
user                    "mpd"
group                   "audio"
pid_file                "/run/mpd/mpd.pid"
db_file                 "/var/lib/mpd/mpd.db"
state_file              "/var/lib/mpd/mpdstate"
log_file                "/var/log/mpd/mpd.log"
sticker_file            "/var/lib/mpd/sticker.sql"
playlist_directory      "/var/lib/mpd/playlists"
music_directory         "/var/lib/mpd/music"

gapless_mp3_playback    "yes"
volume_normalization    "yes"
max_command_list_size   "16384"
auto_update             "yes"
default_permissions     "read,add,control"
password                "password@read,add,control,admin"

bind_to_address "127.0.0.1"

input {
  plugin        "curl"
}

audio_output {
  type          "alsa"
  name          "My ALSA Device"
  device        "default"
  mixer_type    "software"
}

Запустить сервер mpd и проверить его работоспособность:

[orca@blizzard ~]$ sudo mpd                     <1>
errno: Failed to open database file "/var/lib/mpd/mpd.db": No such file or directory
[orca@blizzard ~]$ tail /var/log/mpd/mpd.log    <2>
  1. При первом запуске файла базы данных mpd нет, отсюда ошибка. Впоследствии запуск демона должен проходить без ошибок
  2. В журнале должны появиться сообщения о добавлении музыкальных файлов в базу данных mpd

Остаётся подключить patchfork к веб-серверу (предполагается, что установлен и работает Apache):

[orca@blizzard ~]$ sudo vi /etc/httpd/conf/httpd.conf
...
Include conf/extra/patchfork.conf
[orca@blizzard ~]$ sudo chown http /srv/http/patchfork/config
[orca@blizzard ~]$ sudo systemctl restart httpd

Открыть браузер и перейти по адресу: http://localhost/patchfork. На странице конфигурации в секции подключения к серверу MPD ввести значение поля “password” (устанавливалось директивой password в файле /etc/mpd.conf).

Patchfork неплохо подходит для управления сервером MPD, но функционал оставляет желать лучшего, поэтому, если есть необходимость более серьёзного управления, то следует использовать проект Cantanta, который требует отдельной установки на машину, с которой будет производиться управление. Это не совсем удобно, но есть и хорошая новость – Cantanta доступна в сборке под Windows и, не исключено, что это ПО можно собрать и для работы под Android.

Для автоматического запуска сервера MPD в момент загрузки ОС:

[orca@blizzard ~]$ sudo systemctl enable mpd.service

Настройка xbmc

Запустить xbmc с командной строки, выполнить установку языка системы: раздел “SYSTEM” → “Settings” → “Appearance” → “International”.

Вернуться на домашнюю панель, выбрать раздел “ВИДЕО” и установить для него источник данных. Аналогичные действия выполнить с музыкальной коллекцией (раздел “МУЗЫКА”).

Интерфейс xbmc интуитивно понятен, поэтому описывать его в деталях нет смысла. А вот с настройкой функции “Караоке” следует немного повозиться. Во первых, необходимо сразу убедиться, что эта функция активна:

  1. Запустить xbmc с командной строки
  2. Перейти в раздел “СИСТЕМА”, затем “Настройки”, “Музыка” и “Караоке”
  3. Убедиться, что функция активна
  4. Настроить шрифт: начертание, размер, цвет

Вернуться на домашнюю панель, выбрать раздел “МУЗЫКА”, добавить источник данных “Караоке”, выбрать и поставить песню на воспроизведение, например “Как Молоды Мы Были.mp3”. Если звук есть, а текста нет, то скорей всего файл .lrc нуждается в перекодировке:

[orca@blizzard ~]$ cd ~/Media/Audio/
[orca@blizzard ~]$ file -bi ./Karaoke/Градский\ А/Как\ Молоды\ Мы\ Были.lrc
text/plain; charset=iso-8859-1

Из отчёта видно, что данный файл закодирован в ISO-8859-1. Файл нужно перекодировать. Сначала проверка на одном файле:

[orca@blizzard ~]$ cd ./Karaoke/Градский\ А/
[orca@blizzard ~]$ iconv -f ISO-8859-1 -t UTF-8 ./Как\ Молоды\ Мы\ Были.lrc > \
./Как\ Молоды\ Мы\ Были.lrc.txt

После проверки стало понятно, что “file -bi” неверно определил кодировку файла. Пробуем с “cp1251”:

[orca@blizzard ~]$ iconv -f cp1251 -t UTF-8 ./Как\ Молоды\ Мы\ Были.lrc > \
./Как\ Молоды\ Мы\ Были.lrc.txt

Теперь всё в порядке, можно запустить перекодирование для всех файлов. Для это цели нужно создать и запустить следующий сценарий:

#!/usr/bin/bash

myDir="$1";
while IFS='' read -r -d '' fname; do
        echo "Найден файл $fname";
        recode -f cp1251..UTF-8 "$fname";
        echo "Файл $fname перекодирован";
done < <(find "$myDir" -name '*.lrc' -print0 );
exit 0

В качестве аргумента этому сценарию передаётся директория с файлами караоке-песен.

Если необходимо перекодировать и файлы фонограмм, например “wma” в “mp3”, то:

find . -iname "*.wma" -execdir bash -c \
'FILE="{}" NAME="${FILE##*/}" && \
echo "Работаю в ${PWD##*/} с ${NAME/.wma/} ..." && \
ffmpeg -loglevel quiet -i "$FILE" -ab 192k \
-metadata album="Караоке" -metadata title="${NAME/.wma/}" \
-metadata artist="${PWD##*/}" -metadata comment="LG DVD Karaoke 3000 v1.0" \
"${FILE/.wma/.mp3}"' \;

Итак, как только коллекция будет собрана и будут расставлены все необходимые теги – можно создать “Медиатеку”:

  1. Открыть раздел “МУЗЫКА”, и далее “Файлы”
  2. Нажать [Добавить источник…]
  3. Нажать [Обзор], выбрать директорию с музыкальными файлами, нажать [OK]
  4. Если необходимо, то “Введите название медиаисточника”, нажать [OK]
  5. Выбрать появившийся медиаисточник и в его контекстном меню выбрать “Сканировать в медиатеку”
  6. Дождаться завершения сканирования

С этого момента, в разделе “МУЗЫКА” появятся фильтры-группировки по Исполнителям, Альбомам, Жанрам и т.п.

Для создания печатного варианта каталога караоке-песен:

  1. Открыть раздел “СИСТЕМА”, и далее “Настройки”
  2. Выбрать “Музыка”, и далее “Караоке”
  3. Выбрать “Экспорт текста караоке…” и тип файла (рекомендуется CSV)
  4. Выбрать директорию в профиле xbmc, например “special://masterprofile/library”, т.е. “~/.xbmc/userdata/library” и нажать [OK]
  5. В этой директории должен появиться файл karaoke.csv, который можно открыть в программе электронной таблицы и отредактировать его на своё усмотрение
  6. Отредактированный файл с таблицей можно оформить на свой вкус и распечатать

Если необходимо расставить только теги файлам фонограмм, то:

  • Запустить easytag
  • Выбрать файлы без тегов
  • Выбрать меню “Сканер”, и, далее “Fill Tags…”
  • В поле “Заполнить тег” записать: %a – %b/%t
  • Нажать кнопку “Открыть окно сканера / Сканировать выбранные файлы”
  • Закрыть окно сканера
  • Нажать кнопку [Сохранить]

Другие интересные возможности изменения настроек xbmc:

  1. Директория /usr/share/xbmc/media/Fonts содержит шрифты, используемые xbmc
  2. В директории ~/.xbmc/userdata можно создать файл “advancedsettings.xml” с дополнительными настройками (подробнее здесь: http://wiki.xbmc.org/index.php?title=AdvancedSettings.xml)

Например, чтобы в процессе проигрывания караоке-песни на экране отображался видеоряд, нужно выполнить следующее:

  1. Создать файл “advancedsettings.xml”
  2. Создать директорию и записать туда файл фонового видеоряда
  3. Перезапустить xbmc

Пример файла “advancedsettings.xml”:

<advancedsettings>
  <karaoke>
    <nocdgbackground>false</nocdgbackground>
    <defaultbackground type="video" path="special://masterprofile/karaoke/videobg.avi"/>
    <nextsongpopuptime>2.0</nextsongpopuptime>
  </karaoke>
</advancedsettings>

Путь “special://masterprofile/” это “/.xbmc/userdata”. Т.е. видеофайл “videobg.avi” должен находиться в “/.xbmc/userdata/karaoke”. Следует отметить, что: во-первых видеофайл должен соответствовать формату экрана воспроизведения, во-вторых – после каждой новой песни видеокартинка будет повторяться.

Поддержка KAR-файлов

Очень много коллекций караоке собрано из файлов “KAR”, которые, на самом деле, являются файлами MIDI с дополнительной текстовой дорожкой. XBMC поддерживает MIDI с помощью проигрывателя “timidity”. Для того, чтобы заработала поддержка MIDI необходимо: создать служебную директорию и записать туда подходящий звуковой шрифт (SoundFont):

[orca@blizzard ~]$ mkdir ~/.xbmc/userdata/timidity
[orca@blizzard Downloads]$ cp SGM-V2.01.sf2 ~/.xbmc/userdata/timidity/soundfont.sf2

Звуковой шрифт SGM-V2.01.sf2 загружен отсюда: http://www.geocities.jp/shansoundfont.

О более точных настройках поддержки MIDI читать здесь: http://wiki.xbmc.org/index.php?title=HOW-TO:Setup_XBMC_for_karaoke#MIDI_playback.

Создание файлов караоке

Файлы для караоке отлично извлекаются из фирменных дисков LG, Samsung и BBK с помощью программы karaokediskeunpacker (http://sourceforge.net/projects/karaokediskeunp/). Образы же самих дисков можно найти в Интернете (речь именно о дисках с тысячами песен).

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

  1. Найти или создать “минусовку”
  2. Найти/напечатать текст песни и оформить его в виде файла “lrc”

Фонограмму можно попробовать создать из музыкального файла с вокалом артиста. Хороший результат не гарантирован, но попытаться стоит. Техника удаления вокала основана на складывании инвертированных левого и правого каналов звуковой дорожки (мелодия должна быть стереофонической):

  1. Создать копию файла с вокалом
  2. Запустить “Audacity”
  3. Открыть файл
  4. Выбрать меню “Эффекты”, затем “Plugins” и “Vocal Remover (for center-panned vocals)”
  5. Прослушать песню. Если результат устраивает, то сохранить файл (“Экспортировать…”). Если нет, то поэкспериментировать в ручном режиме (подробнее здесь: http://manual.audacityteam.org/o/man/tutorial_vocal_removal_and_isolation.html)

Для создания lrc-файла подойдёт любой текстовый редактор с поддержкой кодировки UTF-8. На данный момент существует три варианта формата lrc-файла: простой (simple), простой расширенный (simple extended) и улучшенный (enhanced). В простом формате используется одна временная метка на строку текста, в расширенном формате появились теги “M” и “F” для обозначения мужской и женской партий соответственно (поддерживается ограниченным числом проигрывателей), в улучшенном формате временных меток в строке может быть несколько.

Заголовок каждого из форматов может содержать следующий перечень служебных меток:

  • [ar:Имя исполнителя]
  • [al:Название альбома]
  • [ti:Название песни]
  • [au:Автор песни]
  • [length:Длительность песни mm:ss]
  • [by:Автор файла LRC]
  • [offset:Сдвиг текста относительно фонограммы в мс. +/-]

После заголовка идёт текст песни. Несколько советов:

  1. Строку текста длиной больше чем 25 символов лучше разбить на две строки
  2. После временных меток пробелов быть не должно
  3. Для сбора временных меток можно воспользоваться “Audacity”. Поставить оригинал песни (с вокалом) и в каждом начале строки получившегося текста ставить метку (Ctrl+M)
  4. Рекомендуется собирать lrc-файл поэтапно (по куплетам)
  5. По завершению этапа, выбрать меню “Дорожки”, затем “Изменить дорожки” и “Экспортировать”

Пример:

[ar: Звери]
[al: Дальше (2008)]
[ti: Я с тобой]
[au: Роман Белык]
[length: 3:56]
[by: Леонид Хрисанфов]
[00:07.10]Мир такой красивый и
[00:08.79]Такой замечательный
[00:10.41]Я сижу напротив - как же
[00:12.10]Ты привлекательна
[00:13.76]Ты в моих глазах и мир тихо<00:15.42>нько сужается
[00:17.12]Утро, солнце, кофе и сейч<00:18.76>ас все решается
[00:20.41]Я к тебе подсяду
[00:22.13]Я спрошу: «Ты одна?»
[00:23.86]Ты улыбнешься и
[00:25.46]Скажешь мне: «Да»
[00:27.12]Ты улыбнешься и
[00:28.81]Cкажешь мне: «Да»
[00:30.45]Ты улыбнешься и
[00:32.11]Скажешь мне: «Да»!
[00:33.81]Если ты ска<00:35.41>жешь "Да"
[00:37.12]То все вокру<00:38.76>г неважно
[00:40.42]Все только дл<00:42.08>я тебя
[00:43.72]Для одно<00:45.37>й
[00:47.13]Если ты ска<00:48.78>жешь "Да"
[00:50.44]Поверь я бу<00:52.14>ду счастлив
[00:53.79]Ты прекраснее все<00:55.36>х и я с тобо<00:57.15>й!

Можно немного упростить задачу, воспользовавшись рецептом отсюда: http://wiki.xbmc.org/index.php?title=HOW-TO:Create_LRC_karaoke_lyrics_files#Pasting_lyrics_into_the_editor.


Промежуточный итог

Итак, на данный момент, получилась довольно неплохая система для проигрывания медиа-файлов с функцией Караоке, а также музыкальный сервер, которым можно управлять по сети с удалённой системы. В следующей части речь пойдёт о технологии “Digital Living Network Alliance” (DLNA).

Продолжение следует…