UMGUM.COM (лучше) 

Lossless audio + APE + CUE + QMMP ( Сборка QMMP из исходных кодов для воспроизведения "lossless audio" в контейнере APE + CUE. )

31 октября 2010  (обновлено 15 августа 2016)

Эта публикация отнесена в архив. Она неактуальна.

OS: Debin GNU/Linux Lenny.

Жил я себе, да был, и захотелось мне послушать музыку, не то, чтобы совсем хорошую, но, хотя бы, менее испоганенную сжатием, чем это обычно бывает в результате дел неумелых ручонок энтузиастов, наполняющих своими творениями "трекеры". Было дело, рыскал по ресурсам интернета в поисках любимых композиций, представленных в форматах "сжатия без потерь" (Lossless data compression). Обычно это WAV или FLOC; любой их них вполне себе хорошо воспроизводится в среде современного Linux. Но, вот незадача, искомые композиции распространялись только в контейнерах "Monkey’s Audio", в файлах с расширением ".ape", с приложенным индексом треков в файлах с расширением ".cue". Внутри контейнера содержались треки WAV или FLAC (Free Lossless Audio Codec). По простому, можно бы распаковать треки из контейнеров и проигрывать их в любом плеере, но этот путь не для меня; хотелось бы слушать музыку сразу, без выкрутасов и перекодировок. В конце концов, пользователи Microsoft Windows имеют возможность не заботиться о перекодировках, а я, что - рыжий? Windows в личных целях не пользуюсь уже более двух лет, и ограничивать себя ни в чём не привык.

В общем, было принято решение добиться проигрывания комбинации из "Monkey’s Audio", "CUE", "FLAC" и "WAV" на "нативном" уровне, так сказать.

Решение решением, а соответствующего инструментария, как выяснилось, практически не имеется. Amarok "поднял руки" на первых же страницах выдачи поисковых сервисов. Разные там "Баньши" и "Ритмбоксы" тоже ничего не обещали. Audacious жестоко "глючил" при открытии ".cue" индексов и был изгнан. DeaDBeef оправдал название неработающим заявленным функционалом чтения индекса "CUE" и общей примитивностью. В итоге, отсеялся единственный, более или менее, достойный претендент на звание спасителя: QMMP (Qt-based Multimedia Player). Живёт этот плеер по следующему адресу: http://qmmp.ylsoftware.com/


После Amarok интерфейс QMMP кажется убогим, надуманным и неудобным. Мне естественным представляется строить интерфейс плеера на главном элементе - списке воспроизведения; а вот создатели QMMP видимо так не считают, предпочитая отрисовывать дурацкие фенечки, вроде бордюрчиков, кнопочек и экранчиков. Ну, да всё у них ещё впереди, благо плагинная система позволит реализовать любой внешний вид.

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

....
поддержка потоков MP3, Vorbis, AAC, AAC+;
поддержка CUE;
поддержка "встроенного" CUE (для файлов FLAC и WavPack);
возможность использовать несколько списков воспроизведения;
автоматической определение кодировки для cue-файлов и ShoutCast-метаданных;
поддерживаемые форматы списков воспроизведения: m3u, pls, xspf;
....

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

MPEG1 layer 2/3;
Ogg Vorbis;
Native FLAC/Ogg FLAC;
Musepack;
WavePack;
трекерные форматы (mod, s3m, it, xm и так далее);
ADTS AAC;
CD Audio;
WMA, Monkey’s Audio (и другие форматы библиотеки FFmpeg);
PCM WAVE (и другие форматы библиотеки libsndfile).

Поддерживаемые в Linux подсистемы вывода:

OSS;
ALSA;
Pulse Audio;
JACK.

Всё, что нужно для счастья воспроизведения (не считая интерфейса, хе).

Устанавливаем пакеты и библиотеки кодеков, требующиеся свежему QMMP для сборки в среде Debian Lenny:

# aptitude install libqt4-dev tar unzip bzip2 gzip libavcodec-dev libmad0-dev libvorbis-dev libogg-dev libmad-ocaml-dev libavformat-dev libcdio-cdda-dev libcdio-paranoia-dev libalsa-ocaml-dev libtaglib-ocaml-dev libcurl4-dev libmms-dev libflac-dev libmpcdec-dev libjack-dev libbjack-ocaml-dev libmodplug-dev libsndfile-dev libwavpack-dev libpulse-dev ffmpeg libcdio-dev libcddb-dev libfaad-dev libbsd-dev libsamplerate-dev libenca-dev mplayer

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

# aptitude install libprojectm-dev

Надо заметить, в зависимости от количества уже установленных в системе приложений, общий объём вновь загружаемых пакетов может превысить психологическую планку в 100 Мегабайт. Для одного плеера это может показаться слишком большой ценой; кому как, собственно.

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

# aptitude install cmake checkinstall

Скачиваем дистрибутив по ссылке полученной с сайта разработчиков:

# cd /usr/src
# wget http://qmmp.ylsoftware.com/files/qmmp-0.4.2.tar.bz2

Распаковываем архив. Переходим в корень директории с исходными кодами:

# tar -xvf qmmp-0.4.2.tar.bz2
# cd /usr/src/qmmp-0.4.2

Конфигурируем дистрибутив с помощью утилиты "CMake" кросс-платформенной системы автоматизации сборки программного обеспечения из исходного кода, пришедшей на смену комплексу скриптов "configure":

# cmake ./ -DCMAKE_INSTALL_PREFIX=/usr

Выше, опцией "-DCMAKE_INSTALL_PREFIX", указываем будущее месторасположение собираемого из исходных кодов приложения, более привычное для Debian дистрибутивов, в отличии от принятого по умолчанию разработчиками "/usr/local". Если сохранить "префикс" по умолчанию, то в дальнейшем придётся озаботится указанием месторасположения необходимых приложению разного рода ресурсов.

Вывод конфигуратора "говорящий" и явно даёт понять, успешно ли прошла процедура:

Transports:
HTTP support ......................enabled
MMS support .......................enabled

Input Plugins:
mp3 support .......................enabled
FLAC support ......................enabled
Ogg Vorbis support ................enabled
Musepack support ..................enabled
MOD support .......................enabled
Wave support ......................enabled
WavPack support ...................enabled
WMA support .......................enabled
AAC support .......................enabled
CUE sheet support .................enabled
Mplayer support....................enabled
CD Audio support...................enabled

Output Plugins:
ALSA support ......................enabled
OSS support .......................enabled
JACK support ......................enabled
PulseAudio support ................enabled
Null output support ...............enabled
Win32 Waveout support .............disabled

Effect Plugins:
Sample Rate Conversion ............enabled
BS2B Plugin .......................disabled
LADSPA Host .......................enabled

Visual Plugins:
Analyzer ..........................enabled
ProjectM ..........................disabled

General Plugins:
MPRIS support .....................enabled
Scrobbler .........................enabled
Tray support ......................enabled
Notifier support ..................enabled
Lyrics support ....................enabled
HAL support .......................enabled
Global hotkey support .............enabled
File operations ...................enabled
Cover manager .....................enabled
KDE4 notifications support ........enabled

File Dialogs:
QMMP File Dialog ..................enabled

Advanced:
Automatic charset detection .......enabled

-- Configuring done
-- Generating done
-- Build files have been written to: /usr/src/qmmp-0.4.2

Понятно, что следует добиваться поддержки максимального количества опций, хотя, если чего-то не нужно, то нет смысла упираться. В нашем случае включение "Win32 Waveout support" невозможно, так как функционал работает только на платформе Microsoft Windows.

CMake генерирует файлы управления сборкой (makefile, в системах Unix, для дальнейшей сборки с помощью make) из файлов CMakeLists.txt, подготавливаемых разработчиками, размещаемых в "корне" дерева исходных кодов.

Если что-то в выхлопе конфигуратора нам не понравилось, можно зачистить результаты его работы перед повтором в новых условиях:

# ./clear_qmake.sh

Scanning dependencies of target distclean
cleaning for source distribution
distribution clean
Built target distclean

После успешного конфигурирования компилируем продукт:

# checkinstall -D --install=no --pkggroup=QMMP --pkgname=qmmp --pkgversion=0.4.2 --pkgrelease=1 --pkgsource=http://qmmp.ylsoftware.com/ --maintainer=me@domain.name make install

На выходе утилиты получаем готовый пакет, уложенный в директории с исходными кодами, если не было иных указаний на путь сохранения. Устанавливаем полученный пакет:

**************************************************
Done. The new package has been saved to

/usr/src/qmmp-0.4.2/qmmp_0.4.2-1_amd64.deb
You can install it in your system anytime using:

      dpkg -i qmmp_0.4.2-1_amd64.deb
**************************************************

Устанавливаем подготовленный нами пакет:

# dpkg -i ./qmmp_0.4.2-1_amd64.deb

Работает вполне себе прилично, функции свои выполняет. Без косяков не обходится, разумеется. Как раз в том, для чего приложение и устанавливается - в обработке списков "CUE" "APE" контейнера. Сами треки контейнера, сжатые кодеком "FLAC" или "WAV", проигрываются без сбоев, а вот распознавание списков "CUE" иной раз сбоит.
При попытке открытия файла "/path.to.file/file.name.cue" порой выводится ошибка следующего вида:

....
QmmpAudioEngine: selected decoder: cue
DecoderCUE: file "/path.to.file/file.name.wav" doesn't exist
QmmpAudioEngine: invalid file format
....

Причём, стоит очистить список воспроизведения и загрузить заново файл "/path.to.file/file.name.cue", как контейнер корректно распознаётся и содержимое его воспроизводится. Функционал, надо полагать, новый и требуется время, чтобы отладить его бесперебойную работу.


Заметки и комментарии к публикации:


( возможность дальнейшего комментирования публикации отсутствует )