Попробовал наконец-то проиграть DSD-файлы на своем сабжевом ЦАПе.
Сначала толком ничего не вышло. Вроде Deadbeef умеет играть – на деле так и не запустил native playback. И, как я понял, ядро должно уметь USB-интерфейс для этого (судя по попадающимся в гугле статьям про поддержку XMOS – значит, и для местного тоже должно что-то быть, а не просто модуль usb-audio). При ресемпле (кстати, стоит сразу потыкать опции в настройках плеера на тему ресемплинга – там много чего “лишнего” для корректного вывода потока на ЦАП) звук таки выводился, но – в обычном формате, PCM.
Примерно по той же причине не работали и другие опробованные плеера – mpv, например.
Вообще, на основе тех граблей, по которым походил, можно вычленить несколько пунктов, чтобы не перечислять все плеера и их опции, с которыми я игрался:
- USB-конвертер должен поддерживаться ядром. Поэтому любой плеер у меня и не получилось бы запустить – устройство просто не реагировало на входящий поток.
- Плеера умеют работать с DSD, скормленные им файлики проигрывались
- Если включить ресемплинг – то плеер начинал выдавать уже PCM-поток. В таком случае работал usb-audio и ЦАП играл в рамках разрешения PCM-потока.
Наигравшись со всем этим, скачал с сайта Teac ASIO-драйвер для винды и их фирменный плеер. Прокинул ЦАП в виртуалку, поставил все это, скормил файл, запустил. Играет – правда, заикается. Ну, как минимум, убедился, что все работает и лампочка на ЦАПе не для красоты.
После этого снова баловался с Deadbeef’ом, “брутфорся” разные варианты настроек. Плюс поискал возможность вывода DSD в MoC (помнилось мне, что где-то видел в настройках опции DoP – оказалось, это был MPD). MoC, кстати, несмотря на вроде как поддержку DSD, файлики с расширениями DSD/DFF/DSF не видел в принципе.
Гуглинг по теме “linux dsd dop play” в итоге привел меня к этой статье: https://www.rollofone.com/?p=309 – тут есть пример строчки для конвертирования DSD-файлов в DoP в FLAC-контейнере. Пришлось собрать dsf2flac – https://github.com/hank/dsf2flac
И вот уже этот файл при проигрывании Deadbeef’ом наконец-то зажег заветный индикатор на ЦАПе. Пробовал, кстати, сначала играть его в audacity – тот как-то иначе выводит сигнал. Музыку слышу, но сквозь шум.
Если подвести итог, то DoP на сейчас – единственный вариант слушать DSD на моем ЦАПе.
В самом Deadbeef’е, как я понял, поддержки DoP пока нет – хотя уже несколько лет, как запланирована.
В mpd есть поддержка, плюс она там гибко конфигурируется. Т.е., обычные файлы могут играться как обычно, а DSD будут прозрачно заворачиваться в DoP. Пока не пробовал, нужна проверка.
В продолжение изысканий на тему SACD. Скачал Dire Straits в образе. Образ в файлы рипается этим: http://sacd-ripper.github.io – можно просто зайти в каталог sacd_extract, там cmake . && make. Получаем бинарь sacd-extract. Рипаем чем-то в стиле sacd_extract -2 -i Brothers\ In\ Arms.iso -p. Получаем подкаталог с файликами. Дальше конвертим упомянутой в статье утилитой: ls -1 *.dff | while read i ; do dsf2flac -d -i “${i}” “${i}.flac” ; done – получаем DoP’ы. Слушаем :).
Хм. Наткнулся на https://community.roonlabs.com/t/what-is-required-for-native-dsd-on-linux/20795
Глянул у себя:
rain@walkbook:~$ cat /proc/asound/card1/stream0
TEAC Corporation TEAC UD-301 at usb-0000:00:14.0-2, high speed : USB Audio
Playback:
Status: Stop
Interface 1
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 32000, 44100, 48000, 88200, 96000, 176400, 192000, 352800
Data packet interval: 125 us
Interface 1
Altset 2
Format: S32_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 32000, 44100, 48000, 88200, 96000, 176400, 192000, 352800
Data packet interval: 125 us
Interface 1
Altset 3
Format: S32_LE DSD_U32_BE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 32000, 44100, 48000, 88200, 96000, 176400, 192000, 352800
Data packet interval: 125 us
DSD_U32_BE есть. Значит, оно должно уметь native DSD?
https://www.nest.org.ru/2017/11/09/адъ-меломана-nb-linux-usb-dac-dsd-support/
А вот в mpd пока что-то так и не запустил. Идет легкий шум и сквозь шум едва слышна мелодия. На опцию dop “yes” не реагирует.