Skip to content

06RU1 taglib

slacknk edited this page Dec 26, 2020 · 2 revisions

mp3-теги содержащие кириллицу в нестандартной кодировке

Была аналогичная проблема на ubuntu-14.04 (linuxmint-17) с taglib-rusxmms (1.9.1-2), а все из-за того что

Задача свелась к наложению патчей от RusXMMS на имеющиеся исходники пакета.

$ sudo apt-get build-dep taglib
$ mkdir /tmp/taglib-rusxmms/
$ cd /tmp/taglib-rusxmms/
$ wget -c http://darksoft.org/files/rusxmms/patches/taglib-csa10.tar.bz2
$ tar -xvf taglib-csa10.tar.bz2 -p -C ./

затем были загружены исходники по которым в ubuntu/deb собирался taglib (необходимо что бы src-репозиторий был подключен) и прописаны патчи, которые мы загрузили и распаковали:

$ cd /tmp/taglib-rusxmms/
$ apt-get source taglib

$ echo taglib-1.9.1-ds-rusxmms.patch >> /tmp/taglib-rusxmms/taglib-1.9.1/debian/patches/series
$ cp -av taglib/taglib-1.9.1-ds-rusxmms.patch /tmp/taglib-rusxmms/taglib-1.9.1/debian/patches/ 

$ echo taglib-1.9.1-ds-rusxmms-enforce.patch >> /tmp/taglib-rusxmms/taglib-1.9.1/debian/patches/series 
$ cp -av taglib/taglib-1.9.1-ds-rusxmms-enforce.patch /tmp/taglib-rusxmms/taglib-1.9.1/debian/patches/

Укажем различные внесенные изменения:

  • cd /tmp/taglib-rusxmms/taglib-1.9.1 && dch -i можно, например, здесь подправить билд на 2csa10 и получить что-то вида taglib (1.9.1-2csa10), ну и в * (изменениях) указать:
    • * taglib-csa10 < http://rusxmms.sourceforge.net > Далее можно приступать к сборке и если сборка проходит, но в конце обрывается на
dpkg-buildpackage -rfakeroot
...
dpkg-gensymbols: предупреждение: появилось несколько новых символов в файле symbols: смотрите вывод diff ниже
dpkg-gensymbols: предупреждение: некоторые символы или шаблоны исчезли из файла symbols: смотрите вывод diff ниже
dpkg-gensymbols: предупреждение: debian/libtag1-vanilla/DEBIAN/symbols совпадает с debian/libtag1-vanilla.symbols не полностью

...

dh_makeshlibs: dpkg-gensymbols -plibtag1-vanilla -Idebian/libtag1-vanilla.symbols -Pdebian/libtag1-vanilla -edebian/libtag1-vanilla/usr/lib/x86_64-linux-gnu/libtag.so.1.14.0
 returned exit code 1
make: *** [binary] Ошибка 1
dpkg-buildpackage: ошибка: fakeroot debian/rules binary возвратил код ошибки 2

в этом случае можно попробовать удалить debian/libtag1-vanilla.symbol с которым идет конфликт

  • rm -v /tmp/taglib-rusxmms/taglib-1.9.1/debian/libtag1-vanilla.symbol
    • перед удалением конечно же заново перезагрузите дерево сборки (apt-get source taglib) и пропишите патчи (действия выше) и сборка пройдет!
      • dpkg-buildpackage -rfakeroot
libtag1c2a_1.9.1-2csa10_amd64.deb
libtag1-dev_1.9.1-2csa10_amd64.deb
libtag1-doc_1.9.1-2csa10_all.deb
libtag1-vanilla_1.9.1-2csa10_amd64.deb
libtagc0_1.9.1-2csa10_amd64.deb
libtagc0-dev_1.9.1-2csa10_amd64.deb
taglib_1.9.1-2csa10_amd64.changes
taglib_1.9.1-2csa10.debian.tar.gz
taglib_1.9.1-2csa10.dsc

Когда пакеты получите необязательно ставить все, достаточно установить конкретные:

  • $ sudo dpkg -i /tmp/taglib-rusxmms/libtag1c2a_1.9.1-2csa10_amd64.deb /tmp/taglib-rusxmms/libtag1-vanilla_1.9.1-2csa10_amd64.deb

Если подобный способ получился в deb-подобном дистрибутиве, давайте подобное провернем в slackware и сравним так сказать.


И еще раз по порядку. Есть проект, который осуществляет поддержку патчей для taglib: RusXMMS. Наша задача наложить их патчи на иходники пакета, т.е. мы пропатчим taglib для русских тегов mp3 отличных от utf-8 для плееров Amarok, Clementine, Qmmp &etc, т.е. те которые обращаются к taglib для прочитывания информации из mp3-тегов.

  • Стоит отметить еще есть немного другое решение в качестве использования другого плеера или просто поставьте/соберите плеер deadbeef / DeaDBeeF / 0xDEADBEEF (an audio player) - он не обращается к тегам через taglib, и не надо taglib патчить и пересобирать этот пакет (taglib), собранный Патриком.

    • SBo-14.1 # sbopkg -Bki "deadbeef"
    • SBo-14.2 # sbopkg -Bki "jansson deadbeef"
  • За дополнительной информацией про сборку из исходников и установку пакетов обращайтеся в последующие разделы, здесь же учтем, то что вы знаете про данное и приступим к пересборке taglib.


Необходимо собрать librcc и пересобрать taglib с патчем и этой библиотекой.

LibRCC - Russian Charset Conversion Library

Итак, для начала, нам необходима librcc из этого самого проекта, который предоставляет патчи для taglib, но прежде чем собирать librcc, хотелось бы оговориться об возможностях данной библиотеки. Если запустите сборку (LibRCC) заметите следующую информацию:

./configure
...
Enca Charset Detection Support:        dynamic
LibRCD Charset Detection Support:      dynamic

Это нас информируют о том то что в /usr/lib${LIBDIRSUFFIX} не найден один из файлов указанной библитеки, а именно:

  • Enca: /usr/lib${LIBDIRSUFFIX}/libenca.so
  • LibRCD: /usr/lib${LIBDIRSUFFIX}/librcd.so

В принципе, можете продолжить сборку, установить и потом собрать пропатченный taglib, а затем доустановить enca или librcd, тем самым taglib будет обращаться к librcc, а та в свою очередь запрашивать информацию у enca или librcd.

  • Но если же будете собирать с установленным enca или librcd учитывайте что taglib_librcc не будет работать, если вы удалите enca или librcd.

LibRCD is used by RusXMMS project for encoding auto-detection.

На мой взгляд, здесь правильнее всего собрать:

librcd -> librcc -> taglib

Просто исходя из того что LibRCD, как LibRCC является частью проекта RusXMMS, того самого у которого мы берем данные патчи для taglib. А еще могу добавить, что и правильным будем собирать так и с Enca без установленного LibRCD, если по каким-то причинам вы так или иначе пользуйтесь Enca, скажем enconv из этого итогового пакета для каких-то своих целей в том числе я для перегонки man-страниц в нестандартной кодировке, если таковые установлены у вас в системе (н-р: LANG=ru_RU.UTF-8 /usr/bin/man xfce4-terminal), в общем вам решать, это я просто относительно enca пометку сделал в большей степени для тех людей которые систему в минимальном размере стараются держать, хоть она много и не занимает эта библиотека.


Ниже ссылки где можно взять готовые SlackBuild'ы:

собираем librc* по этим СлакБилдам (или пишем свои) - они нам необходимы для пересборки с патчем taglib.

Далее, берем патчи из rusxmms/patches, распаковываем и пересобираем taglib:

  • SlackBuild, slack-desc и исходники берем у самого Патрика: source/l/taglib
  • taglib-csaВЕРСИЯ.tar.bz2 распаковываем в каталог вместе с исходниками, единственное что нам необходимо добавить в SlackBuild строчки с применением патчей перед cmake:
cd $TMP/taglib-$VERSION || exit 1
for p in `ls ../taglib | grep -e .patch -e .diff | grep $VERSION` ; do
 patch -p1 --verbose < ../taglib/$p || exit 1
 install -Dm644 ../taglib/$p $PKG/usr/doc/taglib-${VERSION}
done

Добавляем данные строчки (строчку) в taglib.SlackBuild, собирайте и устанавливайте.

И в принципе все, перезапускайте плеер, если запущен и наслаждайтесь реультатом.

  • После каждой сборки ./*.SlackBuild, как собрали устанавливайте так:
    • # upgradepkg --reinstall --install-new ПАКЕТ.txz
  • После пересборки taglib, н-р: qmmp, clementine,
    • плеер перезапускаем и по-новой закидываем файлы в плейлист.

slackware-14.2 - taglib-1.10.1
cd $TMP/taglib-$VERSION || exit 1
patch -p1 --verbose < $CWD/taglib-1.10-ds-rusxmms.patch || exit 1
slackware-14.1-current - taglib-1.9.1
  • я задействовал librcc-0.2.12, librcd-0.1.11
  • патчи для taglib-1.9.1 из taglib-csa10
patch -p1 --verbose < $CWD/taglib-1.9.1-ds-rusxmms.patch || exit 1
patch -p1 --verbose < $CWD/taglib-1.9.1-ds-rusxmms-enforce.patch || exit 1
deb - taglib_1.9.1

Для сравнение, как это все выглядет в Ubuntu-14.04-LTS / LinuxMint-17:

sudo apt-get build-dep taglib
mkdir /tmp/taglib-rusxmms/
cd /tmp/taglib-rusxmms/
wget -c http://darksoft.org/files/rusxmms/patches/taglib-csa10.tar.bz2
tar -xvf taglib-csa10.tar.bz2 -p -C ./
cd /tmp/taglib-rusxmms/
apt-get source taglib
echo taglib-1.9.1-ds-rusxmms.patch >> /tmp/taglib-rusxmms/taglib-1.9.1/debian/patches/series
cp -av taglib/taglib-1.9.1-ds-rusxmms.patch /tmp/taglib-rusxmms/taglib-1.9.1/debian/patches/ 
echo taglib-1.9.1-ds-rusxmms-enforce.patch >> /tmp/taglib-rusxmms/taglib-1.9.1/debian/patches/series 
cp -av taglib/taglib-1.9.1-ds-rusxmms-enforce.patch /tmp/taglib-rusxmms/taglib-1.9.1/debian/patches/
rm -v /tmp/taglib-rusxmms/taglib-1.9.1/debian/libtag1-vanilla.symbol
cd /tmp/taglib-rusxmms/taglib-1.9.1
dch -i
dpkg-buildpackage -rfakeroot
sudo dpkg -i /tmp/taglib-rusxmms/libtag1c2a_*.deb /tmp/taglib-rusxmms/libtag1-vanilla_*.deb

Установка и настройка

Русификация

Как русифицировать?

Архивы, яз.пакеты и т.д.

ru-taglib_rusxmms

ru-man-pages

Пакеты

Менеджер пакетов

Зависимости

07PKGS0PKGTOOLS.md 07PKGS1SLACKPKG+.md 07PKGS9RM.md

Сборка в пакет

08BUILD.md 08BUILD1SBOPKG-14.2.md 08BUILD1SBOPKG.md

Компилирование ядра

Дополнительная информация по различным пакетам

Одинаковый вид для GTK и Qt

Темы и движки тем из 32 в 64

09PKGS3GAMES.md

Шрифты

Другое

10DISTUPGRADE

Напоследок

Зеркала

SlackBASED

SlackNEWS SlackLOGO

Ресурсы в Интернете

Углубляемся: Разное

Server | Развертывание сервера:

Desktop

WMs

FMs

Misc/XApps

Tint2-panel Conky

Misc

Media

Jabber

Web-browser

Web-browser-addons:

Bittorrent: clients

Clone this wiki locally