Страницы

среда, 30 апреля 2014 г.

Rhythmbox синхронизация и извлечение. is_audio_player file

Rhythmbox не позволяет явно экспортировать список радиостанций из пользовательского интерфейса.
Чтобы как-то решить этот вопрос, было проведено небольшое исследование проигрывателя, структуры хранения его метаданных.


Rhythmbox. Место хранения метаинформации


Rhythmbox хранит метаинформацию в домашней папке .local/share/rhythmbox в файле: rhythmdb.xml.
Это обычный xml файл, в котором например список радиостанций храниться в ветке "iradio".

Пример xml-ветки интернет-радиостанции, в файле rhythmdb.xml:

<entry type="iradio">
  <title>Старое радио - Музыка</title>
  <genre>Музыка</genre>
  <artist/>
  <album/>
  <location>http://www.staroeradio.ru/music128.m3u</location>
  <rating>4</rating>
  <play-count>23</play-count>
  <last-played>1398867737</last-played>
  <bitrate>127</bitrate>
  <date>0</date>
  <media-type>application/octet-stream</media-type>
</entry>


※※※


Rhythmbox. Синхронизация и преобразование с помощью встроенной функциональности mp3 в ogg


Медиапроигрыватель Rhythmbox, входящий в поставку Ubuntu, достаточное средство для прослушивания Интернет-радио, музыкальных файлов и подкастов.
Есть встроенная функциональность для синхронизации с iPod, медиплеерами.

Здесь пойдет заметка, о скрытой возможности синхронизации с подключёнными томами (флешками, usb). Первоначально, информацию по этому способу, я получил на ресурсах [1], [2].

Данная возможность позволяет выполнять резервирование системной фонотеки (музыкальной коллекции) встроенными средствами Rhythmbox на внешних носителях, таких как жесткие диски и flash-накопители.

На подключенном томе (флешке, usb-диске), обычного типа Mass Storage Device, создается скрытый файл: .is_audio_player
и заполняется следующим, в соответствии с форматом, частично описанном в [2]:

name="Sacculum musicae"
audio_folders=musica/
folder_depth=3
output_formats=application/ogg
playlist_path=playlists/
playlist_format=audio/mpegurl, application/xspf+xml

Теперь несколько слов о формате файла .is_audio_player :
name - название плеера (нашего носителя с музыкой), которое будет отображаться в списке "Устройства" в пользовательском интерфейсе Rhythmbox.
audio_folders - список папок, куда сохраняется музыка.
folder_depth - глубина вложенности папок плеера. 3 - это будет сформирована структура Группа-Альбом и внутри альбома песня. Разумеется, если тэги корректно заполнены.

output_formats - список поддерживаемых форматов плеером. В нашем случае, только свободный формат Ogg vorbis, что позволит при синхронизации преобразовать mp3 в ogg, что является маленькой приятной особенностью.
Форматы задаются в нотации MIME, списком через запятую.
Например: audio/mpeg,audio/x-ms-wma

playlist_path - папка для сохранения плейлистов.
playlist_format - формат плейлистов, в нотации MIME
Например для формата m3u, MIME-нотация: audio/mpegurl, для формата xspf - application/xspf+xml .

Стоит заметить, что синхронизация Rhythmbox односторонняя, из папки Музыка на компьютере, в плеер (на диск). Это приводит к тому, что на другом компьютере, с пустой базой музыки, происходит и удаление с диска (плеера), всех композиций, при использовании встроенной функциональности синхронизации. Чтобы перенести базу в новую систему, надо использовать функцию "Импортировать".



※※※

Rhythmbox. Извлечение данных о радиостанциях


Т.к. список радиостанций храниться в формате xml, то воспользуемся инструментом xmlstarlet [5]. Это позволяет из консоли манипулировать данными. содержащимися в xml файле.

$ sudo apt-get install xmlstartlet

X-Path выражение для извлечения списка url-радиостанций из xml-файла Rhythmbox (rhythmdb.xml)
Интересующие данные находятся в следующих путях-ветках (X-Path формат):

/rhythmdb/entry[@type=\"iradio\"]
/rhythmdb/entry[@type=\"iradio\"]/title
/rhythmdb/entry[@type=\"iradio\"]/location



Формирование простейшего плейлиста из xml-базы данных Rhythmbox:


$ xmlstarlet sel -I -t -o "#EXTM3U" -t -m "/rhythmdb/entry[@type=\"iradio\"]" -n -o "#EXTINF:0," -v "title" -o " " -n  -v "location"  rhythmdb.xml

-t -o "#EXTM3U" - это формируется заголовок m3u файла,

-t -m "/rhythmdb/entry[@type=\"iradio\"]" -n - это внутренне выбирается (math) каждая подветка (радиостанция), и добавляется перевод строки после предыдущей радиостанции

-o "#EXTINF:0," -v "title"  - это формируется комментарий с названием радиостанции, -v "title" - печатает содержимое xml-тэга title


-o " " -n  - это перевод строки,


-v "location" - это выводится url адрес, печатает содержимое xml-тэга location

rhythmdb.xml - это текущий файл который разбирается.


Вывод также можно направить в файл:

$ xmlstarlet sel -I -t -o "#EXTM3U" -t -m "/rhythmdb/entry[@type=\"iradio\"]" -n -o "#EXTINF:0," -v "title" -o " " -n  -v "location"  rhythmdb.xml > internet-radio.m3u8

Кодировка в Ubuntu, по умолчанию UTF-8.

Есть более продвинутый формат плейлистов XSPF (MIME application/xspf+xml):

$ xmlstarlet sel -T -I -t -o "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" -n -t -o "<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">" -n -t -o "<trackList>" -t -m "/rhythmdb/entry[@type=\"iradio\"]" -n -o "<track>" -n -o "<title>" -c "title" -o "</title>" -n -o "<location>" -c "location" -o "</location>" -n -o "</track>" -t -n -o "<trackList>" -n rhythmdb.xml > internet-radio.xspf

Всё это выделять мышкой - это должна быть одна строка.
Это быстрый однострочный пример, формирование выходного файла как текстового файла, но внутри xml (опция -T). Чтобы сделать правильно, надо написать стилевой лист XSLT.

※※※


Rhythmbox. Чем заполнить коллекцию? Свободной музыкой Тунгуски

  
В [8] представлены альбомы Тунгуски для загрузки, в виде архивных файлов. 
Прямая ссылка на общество:

Представленные несколько готовых альбомов для загрузки и последующих распаковки архива и помещения в папку "Музыка".
Все альбому содержат музыкальные дорожки, с заполненными тэгами, а также обложку, что создаёт законченный вид альбома в медиаплеерах Rhythmbox и Gnome Music.

Спасибо Артёму Драгунову за качественный проект Тунгуска (http://artemdragunov.livejournal.com/tag/Тунгуска).


Тунгуска в Gnome Music 3.10

Также доступно и интернет-радио "Тунгуска" - http://radiotunguska.com/


※※※

P.S. 21.05.2014. Аналогичную операцию (.is_audio_player), проделал с новым телефоном Megafon Login 2, где на sd-карте создана папка Music, которая видна в стандартном Android приложении "Музыка". Теперь доступна синхронизация музыки на Android (Megafon Login 2) и Rhytmbox на Ubuntu.
Дабы избежать перегрузки памяти на телефоне, в настройках синхронизации в Rhytmbox был выбран плейлист "Любимые композиции", в который попадают песни помеченные 5 звёздами.
 
※※※

Ресурсы


1.  How To Use Rhythmbox To Transfer Music To Any Mass Storage Device (Phone, USB Memory Stick) [Sync]. http://www.webupd8.org/2010/06/how-to-use-rhythmbox-to-transfer-music.html
2.  . http://almost-a-technocrat.blogspot.ru/2010/11/isaudioplayer.html
3. A survey of playlist format. http://gonze.com/playlists/playlist-format-survey.html
4. XMLStarlet. http://xmlstar.sourceforge.net/overview.php
5. XSPF specification. http://www.xspf.org/specs/
6. С чем едят формат M3U? http://habrahabr.ru/sandbox/25319/
7. M3U. http://ru.wikipedia.org/wiki/M3U
8. Альбомы Тунгуски для загрузки. http://www.jamendo.com/en/artist/343607/tunguska-electronic-music-society

※※※

Комментариев нет: