9
февраль
2022
Консольный "облачный" плеер Tizonia - ключ к миру музыки и подкастов
14:08

Консольный "облачный" плеер Tizonia - ключ к миру музыки и подкастов

9 февраль 2022 14:08

Современный www перегружен рекламой, политикой, счётчиками, аналитикой, тизерными объявлениями и тяжелыми видео. Удачная попытка возвращения в 2020-2022 годам к корням Интернет (gopher, lynx, mosaik) - минималистский аудио плеер Tizonia для консоли Linux.

В чём преимущество tizonia - подключается к популярным сервисам

  • запускается из командной строки. Управление с клавиатуры (клавиши всегда быстрее мыши)
  • Spotify (лидер, около 25% рынка музыкального контента)
  • SoundCloud (есть поддержка учётной записи, личных предпочтений и плейлистов)
  • Tune-In (бесплатные музыкальные подкасты с наиболее актуальными музыкальными стилями и передачами, которые собирают миллионные аудитории слушателей - например, Armin Van Buuren "ASOT")
  • возможность поиска Интернет радиостанции на iHeart по песне или по произвольному слову или предложению
  • может выступать как сервер для передачи MP3 файлов по протоколу Icecast/SHOUTcast (сервер Интернет-радиостанции)
  • умеет воспроизводить звук с HTTP Интернет радиостанций: подключаться как клиент к серверу Icecast/SHOUTcast
  • может выступать кодировщиком на другое устройство Chromecast с указанным IP-адресом
  • GNU приложение с исходными кодами - можно собрать из исходных кодов, при желании, на Raspberry PI (сделать Интернет-радиоприёмник) или запустить Tizonia в контейнере Docker.
    Автором программы tizonia является программист Juan A. Rubio "juanrubio".

Удалось собрать и запустить Tizonia под Linux Ubuntu 20.04.3 LTS российской версии Runtu Lite.

Ссылка на официальную документацию

Три способа установки Tizonia

Способ №1. Установка изолированного компонента "tizonia" с помощью менеджера пакетов snap.**

Установка snap, затем в нём tizonia
sudo apt install snapd
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install tizonia

Данный способ нерабочий, так как приводит к следующим проблемам:

  • конфигурационный файл tizonia.conf находится в доступной только для чтения файловой системе snap (решается копированием файла tizonia.conf из папки snap в каталог ~/.config/tizonia рабочей папки пользователя
  • не решаемая проблема: ошибка player: OMX_ErrorInsufficientResources вызвана невозможностью получения из пакетов "snap" доступа к звуковой карте в некоторых дистрибутивах, о чем пишет разработчик.

Способ №2. Установка с помощью скрипта, который выполняется в интерпретаторе Shell.

Это рекомендованный способ установки tizonia для Debian и Ubuntu. Однако оказалось, что DEB-файлы для установки (репозиторий tizonia) находятся на сторонем сервере Bintray. То-ли срок хранения закончился, то-ли срок оплаты, но репозиторий tizonia на Bintray недоступен.

Можно загрузить и запустить скрипт с сервера github, хуже от этого не будет (установятся зависимости), но и пользы мало:

  • на заключительном этапе пакет tizonia-all не найден.
  • Также, в исходном тексте скрипта видно, что автор подстраивает установку к различным операционным системам, наиболее известным, таким как Debain "buster", Debian "bullseye". Очевидно, что все варианты ОС учесть нельзя, и в редких или более поздних версиях Linux скрипт может оказаться неработоспособным.
    curl -kL https://github.com/tizonia/tizonia-openmax-il/raw/master/tools/install.sh > install.sh
    bash install.sh

или так:
curl -kL https://github.com/tizonia/tizonia-openmax-il/raw/master/tools/install.sh | bash

В версиях Linux, которые скрипт не поддерживает, выдаётся сообщние: "Can't find a supported Debian or Ubuntu-based distribution."

Этот путь ошибочный по причине недоступности репозитория на Bintray, несовместимостью с различными версиями Linux.

Способ №3. Компиляция и сборка приложения из исходных текстов программ.**

Это правильный путь, который опрадвал себя и работает в Ubuntu 20.04. Кроме того, можно скомпилировать программу для любые операционные системы семейства Linux, совместимые с Ubuntu 20.04.

Порядок сборки плеера tizonia из исходных кодов:

Сборка из исходных кодов прошла успешна в операционной системе Runtu Lite (пакетная база Ubuntu 20.04 LTS). Рекомендую проводить компиляцию также в Ubuntu-подобных ОС, т.к. в Debian значительно больше проблем при сборке.

Первый способ компиляции Tizonia

1. Сменил версию интерпретатора python по умолчанию.

python -V

Если данная команда выдала версию 2.7.x (или ничего не показала), следует переключить python на версию 3.x:

установил python3 самой новой версии (и дополнительный пакет "python3-testresources" к нему):

sudo apt-get update
sudo apt install python3 python3-testresources

определил каталог установки:

whereis python3

в выводе программы надо глазами найти папку с упоминанием бинарного исполняемого файла (/bin/):

Например:
/usr/bin/python3.8

Переключил версию интерпретатора

sudo ln -sfn /usr/bin/python3.8 /usr/bin/python

Теперь команда python -V показала версию 3.8 (в данном дистрибутиве).

Более новая версия python 3.9 тоже подходит. Команда создания символьной ссылки:

sudo ln -sfn /usr/bin/python3.9 /usr/bin/python

2. Создал в домашней папке каталоги tizonia (рабочая папка назначения при сборке программы) и папку для файла конфигурации:

mkdir ~/tizonia
mkdir ~/.config/tizonia

3. Клонирование проект tizonia из git на локальный компьютер:

sudo apt-get install git
cd ~
git clone https://github.com/tizonia/tizonia-openmax-il

4. После этого переходим в папку 'tizonia-openmax-il', затем в папку tools:

cd ~/tizonia-openmax-il/tools

5. Выполняем компиляцию зависимостей

Сделал всё по инструкции автора - BUILDING.HTML:

export TIZONIA_REPO_DIR=/home/vladimir/tizonia-openmax-il/
export TIZONIA_INSTALL_DIR=/home/vladimir/tizonia
export PATH=$TIZONIA_REPO_DIR/tools:$PATH
export PYTHONPATH=$TIZONIA_INSTALL_DIR/lib/python3.8/site-packages:$PYTHONPATH

Примечание: в конкретной системе уточнить 3.8 или 3.9 при помощи python -V.

Дополнение: Перед началом компиляции нужно в систему добавить ключ 78FD980E271D2943 от репозитория archive@mopidy.com, т.к. иначе во время компиляции будет ошибка что источник не может быть проверен
(W: Ошибка GPG: https://apt.mopidy.com buster InRelease: Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY 78FD980E271D2943
E: Репозиторий «https://apt.mopidy.com buster InRelease» не подписан.).

Поэтому перед компиляцией выполнил команду:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 78FD980E271D2943

В каталоге "~/tizonia-openmax-il/tools" выполняем скрипт для компиляции зависимостей:

bash tizonia-dev-build --deps

На SSD диске время компиляции небольшое (10 минут 30 секунд).

6. Установка libspotify
Библиотека libspotify исключена из большинства дистрибутивов как устаревшая (перемещена в архив).
Зависимость: libspotify >= 12.1.51.
К счастью, существуют простой способ установки libspotify при помощи пакета из архива Mopidy APT:

Добавляем команды

sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/stretch.list
sudo apt-get update
sudo apt-get install libspotify12 libspotify-dev

7. Основной этап компиляции - всё из той же папки
~/tizonia-openmax-il/tools

До компиляции желательно установить ccache с целью ускорения процесса:

sudo apt install ccache

Запуск компиляции tizonia производится командой по инструкции:

cd ~/tizonia-openmax-il/tools
bash tizonia-dev-build --release --install

Время выполнения компиляции на быстром SSD диске значительное, составляет 45 минут и дольше.

Плеер tizonia не собирается в Ubuntu 22.04 и новее, при интерпретаторе python 3.10 и библиотеке libboost 1.74 - см. попытку решения в конце статьи.


Замечание: В некоторых дистрибутивах при компиляции основной программы (следующий шаг) может возникать ошибка "/usr/bin/ld: cannot find -lboost_python3". В таких ОС нужно установить пакет "libboost-python-dev" или "libboost-all-dev" и создать символьную ссылку на библиотеку "libboost_python38.so". источник информации о способе решения:

Устанавливаем нужные для работы программы библиотеки "libboost-python-dev", "libboost-program-options" и "libboost-filesystem-dev", "libboost-thread-dev", "libmediainfo-dev", "libev-dev и liblog4c-dev":

sudo apt-get install libboost-python-dev libboost-program-options-dev libboost-filesystem-dev libboost-thread-dev libmediainfo-dev libev-dev liblog4c-dev

Ищем от пользователя root файл который может называться "libboost_python3":

su -
find / -name "libboost_python3*.*" -type f

будет найдена строка вида:

/usr/lib/x86_64-linux-gnu/libboost_python38.so.1.71.0

или

/usr/lib/x86_64-linux-gnu/libboost_python39.so.1.74.0

теперь создаём мягкую символьную ссылку:

ln -s /usr/lib/x86_64-linux-gnu/libboost_python38.so.1.71.0 /usr/lib/libboost_python3.so

или

ln -s //usr/lib/x86_64-linux-gnu/libboost_python39.so.1.74.0 /usr/lib/libboost_python3.so

Обязательно выходим из сеанса root:

logout

Для работы программы нужны библиотеки python:

sudo apt-get install  python3-joblib python3-fuzzywuzzy

Выполняем под обычным пользователем компиляцию программы tizonia.

cd ~/tizonia-openmax-il/tools
bash tizonia-dev-build --release --install

Теперь при компиляции ошибок выдаваться не должно.

Окончание компиляции следующее:
[code]CXX mpris/tizonia-tizmprismgr.o
CXX mpris/tizonia-tizmprisprops.o
CXX mpris/tizonia-tizmprisif.o
CXX services/iheart/tizonia-tiziheartgraph.o
CXX services/iheart/tizonia-tiziheartgraphops.o
CXX services/iheart/tizonia-tiziheartmgr.o
CXXLD tizonia
/usr/bin/mkdir -p '/home/vladimir/tizonia/bin'
/bin/bash ../libtool --mode=install /usr/bin/install -c tizonia '/home/vladimir/tizonia/bin'
libtool: install: /usr/bin/install -c .libs/tizonia /home/vladimir/tizonia/bin/tizonia


Elapsed time: 00:47:43[/code]

Второй способ компиляции программы Tizonia

Применяется в случае ошибки "No package 'libspotify' found" и невозможности установить пакет libspotify из архива mopidy.com.

checking for SPOTIFY... no
configure: error: Package requirements (libspotify >= 12.1.51) were not met:

No package 'libspotify' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables SPOTIFY_CFLAGS
and SPOTIFY_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
configure: error: ./configure failed for spotify_source
configure: error: ./configure failed for plugins

решается следующим образом:

cd ~/tizonia-openmax-il
autoreconf -ifs 
./configure --without-libspotify
make
make install

или одной командой:

cd ~/tizonia-openmax-il && autoreconf -ifs && ./configure --without-libspotify && make && make install

(Источник, инструкция)

Примечание от 20.04.2022: на этапе "make" под ОС Debian происходит "зависание" сборки с ростом потребления оперативной памяти свыше 10 Гбайт. На Ubuntu Linux рекомендую способ №1 (запуск ).

Примечание от 28.11.2023: в Ubuntu 22.04 Tizonia не ставится, даже после сборки и компиляции python3.6 и libboost. См. конец статьи.

Готовый настроенный конфигурационный файл ~/.config/tizonia:

Его нужно создать в каталоге ~/.config/tizonia и исправить в нём пути к папкам.
tizonia.conf.zip

# A comma-separated list of paths to be scanned by the Tizonia IL Core when
# searching for component plugins
component-paths = /home/vladimir/tizonia/lib/tizonia0-plugins12

Исправить путь к базе данных программы:

# This is the path to the Resource Manager database
rmdb = /home/vladimir/tizonia/share/tizrmd/tizrm.db

Запуск программы tizonia для воспроизведения подкаста из Интернет

/home/vladimir/tizonia/bin/tizonia --tunein-search bobina -b 3

где -b 3 - число секунд буферизации звука,
bobina - строка поиска.

Должно начаться воспроизведение на русском языке - шоу "Digital Emotions" от автора DJ Fonarev (Владимир Фонарёв):

bobina

Управление плеером:

n - следующий подкаст
p - предыдущий подкаст
вверх - увеличить громкость
вниз - уменьшить громкость и т.д.
пробел - остановить / возобновить музыку.

Полный список команд есть в описании здесь.

Проблемы и решения

Если плеер tizonia перестал работать, с ошибкой

tizonia 0.22.0. Copyright (C) 2020 Juan A. Rubio and contributors
This software is part of the Tizonia project <https://tizonia.org>

ModuleNotFoundError: No module named 'tiztuneinproxy'

tizonia exiting (OMX_ErrorInsufficientResources).

[OMX.Aratelia.audio_source.http:port:0]
[OMX_ErrorInsufficientResources]

Нужно выполнить указанные выше команды export перед вызовом программы.

Написал короткий скрипт "tizonia.sh", который нужно поместить в домашний каталог (~) пользователя и дать права на выполнение "chmod +x tizonia.sh":

#!/bin/sh
# Wrapper script for tizonia
export TIZONIA_INSTALL_DIR=/home/vladimir/tizonia
export PATH=$TIZONIA_REPO_DIR/tools:$PATH
export PYTHONPATH=$TIZONIA_INSTALL_DIR/lib/python3.8/site-packages:$PYTHONPATH

exec /home/vladimir/tizonia/bin/tizonia "$@"

solution

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

~/tizonia.sh --tunein-search ASOT -b 5

(Вместо "ASOT" подставляем ключевые слова для поиска подкаста).

Сборка tizonia в Ubuntu 22.04 (сплошные проблемы)

Проблема при компиляции при python 3.10:

configure: error: ./configure failed for libtizgmusic
configure: error: ./configure failed for gmusic
configure: error: ./configure failed for clients

Шаг 1 – Установка зависимостей

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev libgdbm-dev libnss3-dev libedit-dev libc6-dev

Шаг 2 – Загрузка Python 3.6

wget https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tgz

tar -xzf Python-3.6.15.tgz

Шаг 3 – Компиляния исходного кода Python 3.6

cd Python-3.6.15
./configure --enable-optimizations  -with-lto  --with-pydebug
make -j 2  # заменить 2 на число ядер процессора - 4, 8 или 16
sudo make altinstall

Шаг 4 - проверка установки версии Python 3.6

python3.6 --version

**Шаг 5 - переключение с Python 3.10 на Python 3.6

whereis python3.6

/usr/local/bin/python3.6

Настройка пути

echo $PATH
export PATH=/usr/local/bin/python3.6:$PATH    
echo $PATH

Настройка:

whereis python2

/usr/bin/python2

whereis python3.6

/usr/local/bin/python3.6

whereis python3.10

/usr/bin/python3.10

sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.6 1

sudo update-alternatives --config python3      

Проверка:

python -V

Python 3.6.15

sudo update-alternatives --config python3

Для компиляции модулей программы потребуется зависимость - библиотека для python под названием "soundcloud" ! Которую нужно установить в python 3.10 и 3.6 следующим образом:

sudo update-alternatives --config python3

Выбрал 3.6.

python -V

Выводится версия 3.6.15.

Шаг 6 - временное переименование модуля lsb_release

Данный шаг нужен в Ubuntu 22.04 (Linux Mint 21 "Victoria") для установки модуля python: pip install soundcloud и предотвращения ошибки выполнения "No module named 'lsb_release'":

sudo mv /usr/bin/lsb_release /usr/bin/lsb_release_back

Шаг 7 - установка нужных версий инструментов и компонентов перед компиляцией

При выполнении компляции возникали ошибки

checking python module: soundcloud... no
configure: error: failed to find required module soundcloud
configure: error: ./configure failed for libtizsoundcloud
configure: error: ./configure failed for soundcloud
configure: error: ./configure failed for clients

Следующие действия решают это проблему:

Понижение версии setuptools

sudo -H pip install "setuptools<58.0"
sudo -H pip3 install "setuptools<58.0"

sudo -H python -m pip install "setuptools<58.0"
sudo -H python3 -m pip install "setuptools<58.0"

Установка библиотек зависимостей, включая soundcloud:

sudo -H pip3 install --upgrade gmusicapi soundcloud youtube-dl pafy pycountry titlecase pychromecast plexapi spotipy fuzzywuzzy eventlet python-Levenshtein

Шаг 8. Компиляция

Компиляция tizonia - подробно описана в пункт 5 статьи.

Полная компиляция занимает более 45 минут.

cd ~/tizonia-openmax-il/tools/
bash tizonia-dev-build --release --install

Появилась новая проблема:
/usr/bin/ld: /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0: undefined reference to PyModule_Create2' /usr/bin/ld: /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0: undefined reference toPyCMethod_New'
collect2: error: ld returned 1 exit status
make[5]: [Makefile:459: tizcastd] Ошибка 1
make[5]: выход из каталога «/home/vladimir/tizonia-openmax-il/cast/tizcastd/src»
make[4]:
[Makefile:497: all-recursive] Ошибка 1
make[4]: выход из каталога «/home/vladimir/tizonia-openmax-il/cast/tizcastd»
make[3]: [Makefile:406: all] Ошибка 2
make[3]: выход из каталога «/home/vladimir/tizonia-openmax-il/cast/tizcastd»
make[2]:
[Makefile:338: all-recursive] Ошибка 1
make[2]: выход из каталога «/home/vladimir/tizonia-openmax-il/cast»
make[1]: [Makefile:389: all-recursive] Ошибка 1
make[1]: выход из каталога «/home/vladimir/tizonia-openmax-il»
make:
[Makefile:330: all] Ошибка 2

Попытка решения:

sudo ldconfig

Повторить компиляцию.
cd ~/tizonia-openmax-il/
./configure
make
make install

В Linux Mint 21 (Ubuntu 22.04) проблема компиляции связана с libboost_python310.so.

При этом, нет ошибок в Ubuntu Linux 20.04 (runtu Lite).

Дополнение от 01.12.2023. Решение проблемы в Linux Mint 21 с libboost: компиляция библиотеки boost из исходников

Предпринял попытку компиляции boost по инструкции.

cd ~
wget https://boostorg.jfrog.io/artifactory/main/release/1.83.0/source/boost_1_83_0.tar.gz
sha256sum boost_1_83_0.tar.gz 
tar zvfo boost_1_83_0.tar.gz 
cd boost_1_83_0/
df -h # нужно >600 MB
./bootstrap.sh --with-python=python3
./b2  

Библиотека была создана в каталоге /home/vladimir/boost/boost_1_83_0/stage/lib

ls -l /home/vladimir/boost/boost_1_83_0/stage/lib | grep libboost_python

libboost_python310.a
libboost_python310.so -> libboost_python310.so.1.83.0
libboost_python310.so.1.83.0

Копирую:

mkdir /opt/boost
sudo cp /home/vladimir/boost/boost_1_83_0/stage/lib/*.* /opt/boost

Изменяю мягкую ссылку : /usr/lib/libboost_python3.so будет указывать на /opt/boost/libboost_python310.so

cd 
sudo mv /usr/lib/libboost_python3.so /usr/lib/libboost_python3.so.BAK
sudo mv /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0 /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0.BAK
sudo mv /lib/x86_64-linux-gnu/libboost_python310.so.1.83.0 /lib/x86_64-linux-gnu/libboost_python310.so.1.83.0.BAK
sudo ln -s /opt/boost/libboost_python310.so  /usr/lib/libboost_python3.so
sudo rm  /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0
/# было /usr/lib/x86_64-linux-gnu/libboost_python38.so.1.71.0
sudo ldconfig
sudo rm /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0
sudo ln -s /opt/boost/libboost_python310.so  /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0
ls -l /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0

Вход в каталог tizonia-openmax-il и повторная сборка:

cd ~/tizonia-openmax-il/
make

Ошибка те же самая:
/usr/bin/ld: /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0: undefined reference to PyModule_Create2' /usr/bin/ld: /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0: undefined reference toPyCMethod_New'
collect2: error: ld returned 1 exit status
make[5]: *** [Makefile:459: tizcastd] Ошибка 1
make[5]: выход из каталога «/home/vladimir/tizonia-openmax-il/cast/tizcastd/src»

Вывод: в Ubuntu 22.04 (Linux Mint 21) сборка представляет проблемы.

Возвращаю назад:

sudo mv /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0.BAK /lib/x86_64-linux-gnu/libboost_python310.so.1.74.0
sudo apt install --reinstall libboost-all-dev

После завершения сборки исполнимоаго файла, возвращаем на место файл lsb_release:

 sudo mv /usr/bin/lsb_release_back /usr/bin/lsb_release 

Полный список подкастов на Tune-In:

https://tunein.com/podcasts/.

Использование tizonia для воспроизведения звука с Интернет-радиостанции

  1. Радиостанции можно найти здесь: https://directory.shoutcast.com/Search
  2. Воспроизведение звука с Интернет-радиостанции:

    ~/tizonia.sh http://81.92.237.83:80/eldo80s


Сборка клиента Spotify

Клиент Spotify для командной строки написан на языке программирования Rust другим разработчиком. Хотя клиент Spotify не имеет отношения к Tizonia, у них много общего - вызов из командной строки Мне удалось собрать клиента Spotify:

Энтузиаст создал проект на замену ей - https://github.com/librespot-org/librespot.

Порядок компиляции программы "LibreSpot":

cd ~
git clone https://github.com/librespot-org/librespot.git
sudo apt-get install build-essential libasound2-dev pkg-config
curl https://sh.rustup.rs -sSf | sh

Перезапуск окна терминала.

rustup component add rustfmt
rustup component add clippy
cd librespot/
cargo build --release --no-default-features --features "alsa-backend"


Похожие публикации