Аудиофильный Linux — bitperfect и pulseaudio

Многие используют персональный компьютер для прослушивания музыки. Раньше это был вариант для непритязательных слушателей владеющих звуковой картой. Сейчас многие любители аудио стали использовать компьютер, как транспорт, для подачи цифрового потока на внешний высококачественный ЦАП.
По USB, оптике или коаксиалу вы будете транспортировать звук на ЦАП (Цифро-Аналоговый Преобразователь) не суть важно, вы уже сами определите какие входа у ЦАП реализованы лучшим образом. Часто USB самое слабое звено, но в последнее время с этим почти справились в новых моделях.
Но речь пойдет не о тонкостях «хардверной» реализации, а о програмном обеспечении.
Сегодня для прослушивания с ПК на ЦАП обычно используют операционную систему Windows или MacOS X. Значительно реже для этой цели применяют гиковскую операционную систему Linux.


Ubuntu Linux

В целом смысл использования этих ОС и предпочтений в реализации звукового ядра. В Windows последовавших после XP этому моменту уделили повышенное внимание. Главная беда — latency, касается больше музыкантов. При записи в домашних условиях электрогитары или клавишных проведя по струнам/клавишам вы услышите звук с большой задержкой. Это и есть latency. В таком варианте играть просто невозможно, вы слышите в конкретный момент не то, что играете, а то что было ранее.
В MacOS (основана на юниксовом ядре FreeBSD) заявлялась латенси 2.4 мс, в Linux на звуковом ядре alsa — 4.3 ms, в Windows (XP) значительно больше. Чтобы преодолеть такие дикие задержки вносимые операционной системой на пути звука в Windows использовали ASIO — особый протокол передачи аудиоданных, который позволял избежать бутылочных горлышек ОС и подать звук напрямую с минимальной задержкой (latency).


Latency наглядно

Ваша звуковая карта должна иметь поддержку этого протокола и соответствующие драйвера. Иначе есть эмулятор ASIO4ALL. На ASIO я получал до 12-20 мс быстродействия, что вполне достаточно для записи музыкальных инструментов.


Вот что делает ASIO

На Linux мифические 4,3 мс (думаю и на Mac они не менее мифические) можно получить скомпилировав особое рел-тайм ядро, а так же установим звуковой сервер jack и тд. Это все очень муторно, не интересно и сложно хотя бы в силу того, что уже давно перестали делать релтайм патчи для линуксовых ядер (хотя раньше и Коливас и другие разработчики такие патчи выпускали). Получается, что вам остается или ставить какие то не особо юзабельные «аудифильские» дистрибутивы, где не факт, что авторы в аудио понимают, так как вы думаете, либо патчить старыми патчами на старых ядрах.


Linux навевает осеннее настроение

Я давно пользуюсь Linux и особого смысла в таком геморое не вижу. Мне важно следующее — подать с ПК не измененный (так называемый bitperfect) поток на внешний ЦАП. Большего мне не нужно.

Есть ли вообще bitperfect на  Linux уже рассматривалась любителями высококачественного аудио в материале Тест Linux на качество звука, а есть ли BitPerfect , где было успешно доказано его присутствие.

В свете этого — вы можете помониторить интернет и уяснить для себя — что главная проблема не latency, а устройство звуковой системы Linux.
А выглядит она так — звуковое ядро Alsa, над которым микширующая надстройка pulseaduio.
Практически везде пытаются избавиться от pulseaduio оставив голую alsa. Но pulseaduio очень удобный фронтенд позволяющий выбирать на какое звуковое устройство пойдет поток и тд.
Отмечают, что pulseaudio «портит» звук.
Такое мнение происходит от того, что изначально pulseaudio настроена на применение сглаживающего фильтра (ресемплера) для звука. Фильтров много, если у вас только простенькая звуковая карта, то вполне можно сделать с помощью этих улучшайзеров ее звук приятнее.
Но никто в сети в статьях озаглавленных «аудиофильский Linux» и так далее не указал, что если у вас есть хороший цап, то pulseaudio может работать совсем в другом режиме, действительно аудиофильном, являясь bitperfect.
Изменить режим работы pulseaudio не сложно. Для этого нужно внести маленькие изменения в конфигурационный файл /etc/pulse/daemon.conf
В частности в строке задающий метод ресемплирования стоит значение:
resample-method = speex-float-1
Т.е. используется метод ресемплирования (один из многих доступных) speex-float-1, причем почти самый худший (худший 0, лучший 10).
Но для подачи потока на ЦАП вообще не нужно никакое ресемплирование, оно испортит данные.  Нужен просто идеально точный поток на ЦАП, битперфект.
Нужно — да пожалуйста.
Вместо той строчки пишем

resample-method = copy

По сути весь трик и описан. Но еще можно поправить следующие строчки на указанные в них значения:
Вместо
default-sample-format = s16le;

Написать
default-sample-format = float32ne;

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

А эти строчки
default-sample-rate = 44100
alternate-sample-rate = 192000

Зададут максимальную частоту потока подаваемого на ЦАП.
Можно выбрать только 2 значения, по умолчанию и еще одно, если под умолчание не подпадает. Конечно хотелось бы, что бы можно было задать больше значений, но нет.
В итоге нет особого резона отказываться от pulseaudio, так как через него намного удобнее управлять alsa. Для этого существует специальная графическая утилита pavucontrol.


pavucontrol

Если вы оставляете только alsa, то все изменения придется устанавливать редактируя конфигурационный файл в текстовом редакторе. Вы хотите запустить файл с другой частотой — лезьте в файл. Хотите в другой битности (источник 24 бит, а не 16), правьте файл и тд. Это бред.
С pulseaudio настроенном на режим простого копирования потока, вы получаете комфорт использования без недостатков чистой alsa.

ПРОСЛУШИВАНИЕ
Да я прослушал на цапах с чипами Sabre32 ES9018 и PCM1794a практически все ресемплеры из комплекта, включая и идущие с приставкой best_.
Вывод однозначный — ресемплеры на пути к цап — абсолютное зло.


ЦАП на PCM1794a

Что удалось услышать.
При использовании ресемплеров (любых):

звук становится более замазанным и плоским.
Стереоэффекты теряют ощутимую часть своего эффекта.
Инструменты как бы барахтаются в общем музыкальном болоте, их сложнее вычленить слухом.
Самое главное — теряется сок, искрометность.

При использовании pulseaudio в режиме copy получаем:

Острый сочный звук
Стереоэффекты удивительно устойчивые и ясные
Драйвовость и искрометность.
Ясность, каждый инструмент как на ладони, нет аморфной звуковой подложки.

Разница такова, что нет необходимости вслушиваться и ловить нюансы. Различие такое, что сразу слышно — это мазня, а это искра божья. На одних и тех же ЦАП.
Так же при том, что в программных плеерах выставлены все параметры, как самые правильные — нет выравнивания звука, нет эквалайзеров, нет dsp-плагинов и тд, все же есть небольшое различие в звучании, слабо, но уловимое. Я прослушивал через проигрыватель deadbeef и foobar2000 (wine) и foobar2000 был чуть  предпочтительнее. Но deadbeef оказался удобнее, он лучше понимал форматы, кушал единые файлы раскладывая их по cue и тд.
В целом звучание из Linux (Ubuntu/4.6.0-040600rc6-lowlatency/xfce) в режиме copy очень хорошее, способное порадовать слух аудиофила.
Есть ли отличие в звучании при реализации прослушивания через Windows 10 (ASIO) я расскажу в другой раз.

9 Комментарии

  1. Ооо.. Отлично! Давно хотел попросить вас, чтобы дали советы по поводу вывода звука с компа, именно про проги и их настройку… Пользуюсь вин 10, жду следующую статью!

  2. А если PS использовать как медиасервер, на ее и linux ставится и wi fi есть чтоб например с айпада управлять

  3. Наверное можно итак попробовать, но тот Linux, который ставится на PS3(?) врятли можно будет назвать полноценным — там же не репозитариев, ничего нет (или я не в курсе).

  4. Все хотят чтоб с компа и как по нотам.Но увы. печатная машинка неспешит радовать аудиоманьяка хорошим саундом)) Вы попробуйте от сидишника добейтесь адеквата с паяльником в руках и даташитами а там глядиш и придет понимание что вся суть проблемы в транспортировке цифры.Я вот невижу другого пути чем городить квадрат из ноутбука.Оптика некошерно.

  5. Я имел ввиду квадратную шину I2S внутренний протокол передачи данных в сд плеере.Есть китайские конверторы USB-I2s но и цап должен иметь соотв. реализованый вход.Но опять узким местом будет юсб.Ето вариант чтоб не разбирать ноут и не паять)).Просто юсб-юсб фонарь не аудиофильский ето разьем))!Сильно много грязи идет понему из компа главным образом вч помехи питания!!!В запушеных случаях движения мышкой дают треск!!! негромкий конечно.Как промеж.вариант вывести SPDIF коакс.по нему можно гнать все но не дсд.А по том только братся за СОФТ!!!!!

  6. Не подскажете, что я делаю не так, но не могу сохранить изменения в файле конфигурации pulseaudio. Открываю, меняю, но не дает сохранить…

  7. К этим файлам имеет доступ только суперпользователь.
    Можно дать команду
    sudo nano /etc/pulse/daemon.conf
    ввести свой пароль и дальше редактируйте.
    Сохранить изменения
    Ctrl+O (буква О) и потом клавиша Энтер.
    Выйти из редактора
    Ctrl+X
    Можно и другими редакторами прользоваться. Например gedit.
    Если редактор gedut не установлен — его можно установить напечатав (у вас убунту?)
    sudo apt-get install gedit

  8. Спасибо! Все получилось через терминал.

    Да, у меня убунту и deadbeef. Покопавшись в настройках нашел такой вариант вывода звука: модуль вывода ALSA output plugin, устройство вывода TEAC USB Direct hardware device without any conversions. Тоже выводит без ресемплинга все частоты поддерживаемые моим цапом. Как такой вариант на ваш взгляд, можно назвать bitperfect?

Отправить ответ